La fonction StrToTime provoque l'erreur 4051

 

Bonjour,

l'éditeur dans la version >600 n'aime pas la fonction StrToTime.

Son appel provoque l'erreur 4051. Quel est le problème ?

Le code est ici :

//+------------------------------------------------------------------+
//| test.mq4 |
//+------------------------------------------------------------------+

#property version "1.00"

//--- input parameters
input string TimeClose_="21:45";
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
//---

//---
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
//---

}
//+------------------------------------------------------------------+
//| Expert tick function |
//+------------------------------------------------------------------+
void OnTick()
{
//---
datetime xxxxx = StrToTime("21:45"); // makes no difference with TimeClose_ from the input
Print("error: "+GetLastError());
}
//+------------------------------------------------------------------+

Le résultat avec chaque tick :

Ce qui ne va pas ici. La compilation avec l'éditeur 509 ne provoque pas d'erreur, bien sûr.

 
kla-mue:

Bonjour,

l'éditeur dans la version >600 n'aime pas la fonction StrToTime.

Son appel provoque l'erreur 4051. Quel est le problème ?

Le code est ici :

<deleted>

Veuillez poster votre code en utilisant le bouton SRC
 

OK, maintenant je sais... la prochaine fois...

avez-vous une solution à mon problème ?

//+------------------------------------------------------------------+
//|                                                         test.mq4 |
//+------------------------------------------------------------------+

#property version   "1.00"

//--- input parameters
input string   TimeClose_="21:45";
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   datetime xxxxx = StrToTime("21:45");
   Print("error: "+GetLastError());
  }
//+------------------------------------------------------------------+
 
kla-mue: OK, maintenant je sais... la prochaine fois...
  1. La prochaine fois, modifiez votre message original.
  2.    datetime xxxxx = StrToTime("21:45");
       Print("error: "+GetLastError());
    test EURUSD,H1 : erreur : 4051
    N'appelez GetLastError() que si vous avez une erreur. Est-ce que xxxx == 0 ? Pourquoi ne l'avez-vous pas imprimé avec GLE ?
  3. Peut-être que vous devriez essayer le nouveau StringToTime.
 
kla-mue:

OK, maintenant je sais... la prochaine fois...

avez-vous une solution à mon problème ?

Le problème a peut-être été résolu. . https://www. mql5.com/en/forum/149475 mais veuillez quand même le signaler au Service Desk.

 
WHRoeder:
  1. La prochaine fois, modifiez votre message original.
  2. test EURUSD,H1 : erreur : 4051
    N'appelez GetLastError() que si vous avez une erreur. Est-ce que xxxx == 0 ? Pourquoi ne l'avez-vous pas imprimé avec GLE ?
  3. Peut-être devriez-vous essayer le nouveau StringToTime



@2 : comment puis-je savoir s'il y a une erreur, si je ne demande pas GLE ?

Ce code est pour découvrir, pourquoi mon EA donne des messages d'erreur. Aucun autre but.


@3 : le StringToTime cause la même erreur :(


Y a-t-il une autre possibilité ?

 
kla-mue: @2 : comment puis-je savoir s'il y a une erreur, si je ne demande pas à GLE ?

GLE ne vous dit pas SI vous avez une erreur. Il vous dit quelle est l'erreur QUAND vous en avez une.

GLE renvoie le dernier code d'erreur. Ce code est associé à quel code ? Inconnu. Il peut s'agir d'un élément associé au traitement interne du terminal ou d'un appel d'une fonction précédente que vous avez appelée.

Don't call GetLastError() unless you have an error
Vous avez une erreur si OrderSend renvoie un ticket négatif, Time[i] renvoie zéro, ou si StringToTime renvoie zéro, etc.
 

StringToTime

La fonction convertit une chaîne contenant l'heure ou la date au format "yyyy.mm.dd [hh:mi]" en un type de datetime.

datetime StringToTime(
chaîne valeur // date chaîne
) ;

Paramètres

valeur

[in] Chaîne au format " yyyy.mm.dd hh:mi ".

datetime xxxxx = StringToTime(D'21:45');
 
qjol:
D'21:45'

Ce n'est pas une chaîne, c'est déjà une date ( 21:45 du jour où vous avez compilé le code).
Lisez la doc StrToTime()

  datetime var1 ; var1=StrToTime("2003.8.12 17:35") ; var1=StrToTime("17:35") ; // renvoie la date actuelle avec l'heure donnée var1=StrToTime("2003.8.12") ; // renvoie la date avec l'heure de minuit "00:00".
 
mais vous devez utiliser le format "yyyy.mm.dd hh:mm" sinon vous obtenez l'erreur 4051.
 

PARFAIT ! Maintenant, il fonctionne sans erreur =)

Ce doit être le format complet de la date !

TNX beaucoup !!