Bibliothèque: MultiTester - page 20

 

Une erreur délicate avec un heap crash qui semble avoir vécu pendant longtemps.

    ::ArrayResize(Buf, (int)user32::SendMessageW(Handle, CB_GETLBTEXTLEN, 0, 0 ));
    user32::SendMessageW(Handle, CB_GETLBTEXT, 0, Buf);

CB_GETLBTEXTLEN : La valeur de retour est la longueur de la chaîne, en TCHARs, à l'exclusion du caractère nul de fin de chaîne.

CB_GETLBBTEXT : Le tampon doit avoir suffisamment d'espace pour la chaîne de caractères et le caractère nul de fin de chaîne.

Vous devez écrire

::ArrayResize(Buf, (int)user32::SendMessageW(Handle, CB_GETLBTEXTLEN, 0, 0 )+1);
 
traveller00:

Une erreur intelligente avec un carambolage qui semble avoir vécu longtemps.


CB_GETLBTEXTLEN : La valeur de retour est la longueur de la chaîne, en TCHARs, à l'exclusion du caractère nul de fin de chaîne.

CB_GETLBBTEXT : Le tampon doit avoir suffisamment d'espace pour la chaîne de caractères et le caractère nul de fin de chaîne.

Vous devez écrire

Merci ! Il est vrai que GetExpertName, où cette fonction est utilisée, est devenu presque un rudiment.

 
fxsaber:

GetExpertName, lorsqu'il est utilisé, est devenu presque un rudiment.

Comment dire, il est utilisé dans SetExpertName, qui est extrait de Run, et c'est en fait l'une des fonctions principales de MultiTester. Bien que l'erreur soit rare, je l'ai rencontrée par hasard.

 
traveller00:

En d'autres termes, il est utilisé dans SetExpertName, qui est tiré de Run, et c'est en fait l'une des principales fonctions de MultiTester. Bien que l'erreur apparaisse rarement, je l'ai rencontrée par hasard.

Ce n'est plus le cas depuis un certain temps.

 
    Str += iBeginTime ? "FromDate==" + ::TimeToString(iBeginTime, TIME_DATE) + "\n" : NULL;
    Str += iEndTime ? "ToDate==" + ::TimeToString(iEndTime, TIME_DATE) + "\n" : NULL;

Signes égaux supplémentaires dans "FromDate==" et "ToDate==" ?

 
traveller00:

Signes égaux supplémentaires dans "FromDate==" et "ToDate==" ?

Inutile, merci.

 
Bonjour. J'utilise MultiTester comme WFO avec un forward standard, mais le diviseur 1/4 de période standard n'est pas suffisant. J'essaie de comprendre votre code et d'apprendre à MultiTester à remplir le champ date du forward, mais je n'y parviens pas sans connaissances en OOP. J'ai atteint la fonction Run() dans le fichier MTTester. Je ne comprends pas plus loin. Tous les paramètres sont collés sur une ligne et transmis à SetSettings2 et SetSettings, où ils sont multipliés et transmis au presse-papiers. Pouvez-vous me dire ce qu'il faut corriger si un autre paramètre apparaît dans la chaîne et où MultiTester insère les données dans la fenêtre ? J'ajouterais une poignée de fenêtre supplémentaire et le texte de la date à venir.
Et en même temps, veuillez me dire à quoi servent INITDEINIT fInit et INITDEINIT fDeinit dans la fonction TesterSettings.Add().
 
Good Beer:
Bonjour. J'utilise MultiTester comme WFO avec un forward standard, mais le diviseur 1/4 de période standard n'est pas suffisant. J'essaie de comprendre votre code et d'apprendre à MultiTester à remplir le champ date du forward, mais je n'y parviens pas sans connaissances en OOP. J'ai atteint la fonction Run() dans le fichier MTTester. Je ne comprends pas plus loin. Tous les paramètres sont collés sur une ligne et transmis à SetSettings2 et SetSettings, où ils sont multipliés et transmis au presse-papiers. Pouvez-vous me dire ce que je dois corriger si un autre paramètre apparaît dans la ligne et où MultiTester insère les données dans la fenêtre ?

Dans l'onglet Testeur->Paramètres, appuyez sur CTRL+C, puis dans un éditeur de texte, appuyez sur CTRL+V. Vous verrez tous les paramètres du testeur.

ForwardMode
ForwardDate

Ces deux paramètres sont responsables de l'avancement (le second est pertinent lorsque le premier est à 4).


MTTester gère les paramètres du testeur via le presse-papiers, créant ainsi ce que vous voyez dans l'éditeur de texte par CTRL+V.

 
fxsaber:


MTTester gère les paramètres du testeur via le presse-papiers, créant ce que vous voyez dans un éditeur de texte par CTRL+V.

Merci.

La tâche est claire : trouver la bonne ligne en comptant à partir du haut et la remplacer par le texte requis.

 
Good Beer:

La tâche est claire : trouver la bonne ligne en partant du haut et la remplacer par le texte requis.

Le numéro de ligne change et n'est pas important.

  static bool Run( const string ExpertName = NULL,
                   const string Symb = NULL,
                   const ENUM_TIMEFRAMES period = PERIOD_CURRENT,
                   const datetime iBeginTime = 0,
                   const datetime iEndTime = 0,
                   const int ForwardMode = 0 )
  {
    string Str = "[Tester]\n";

    Str += (ExpertName != NULL) ? "Expert=" + ExpertName + "\n" : NULL;
    Str += (Symb != NULL) ? "Symbol=" + Symb + "\n" : NULL;
    Str += iBeginTime ? "FromDate=" + ::TimeToString(iBeginTime, TIME_DATE) + "\n" : NULL;
    Str += iEndTime ? "ToDate=" + ::TimeToString(iEndTime, TIME_DATE) + "\n" : NULL;
    Str += "ForwardMode=" + (string)ForwardMode + "\n";

    return(MTTESTER::SetSettings2(Str) &&
           MTTESTER::SetTimeFrame(period) && MTTESTER::ClickStart());