Bibliothèque: MultiTester - page 56

 

Il est parfois nécessaire de visualiser un élément de l'historique des prix sous la forme d'un tableau. Cela peut se faire via CTRL+U, en sélectionnant l'onglet Bars/Ticks. Il faut ensuite saisir à la main l'intervalle nécessaire. C'est fastidieux.


C'est pourquoi j'ai créé une fonctionnalité supplémentaire, qui est démontrée par l'Expert Advisor suivant.

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/fr/code/26132
#include <fxsaber\Keyboard\Keyboard.mqh> // https://www.mql5.com/fr/code/48393

input bool inTicks = true; // true - Ticks, false - Bars
input int inBefore = -60; // Avant en secondes
input int inAfter = 60;   // Après en secondes
input ENUM_TIMEFRAMES inPeriod = PERIOD_CURRENT; // Période (mode Bars)

datetime GetTime( const int X )
{
  int Window;
  datetime Res;
  double Price;
    
  return(ChartXYToTimePrice(0, X, 0, Window, Res, Price) ? Res : 0);
}

void OnChartEvent( const int32_t id, const long &lparam, const double&, const string& )
{
  if ((id == CHARTEVENT_CLICK) && KEYBOARD::IsControl())
  {
    const datetime Time = GetTime((int)lparam);

    if (Time)
    {
      if (inTicks)
        MTTESTER::CopyTicks(_Symbol, Time + inBefore, Time + inAfter);
      else
        MTTESTER::CopyRates(_Symbol, inPeriod, Time + inBefore, Time + inAfter);      
    }    
  }
}


Vous cliquez (avec la touche CTRL enfoncée) à l'endroit voulu du graphique et vous obtenez automatiquement et immédiatement les données tabulaires correspondantes.

Les fonctions sélectionnées remplissent simplement certains champs de données et les interrogent. L'interface graphique vous permet ensuite de voir ce qui vous intéresse. L'automatisation, en général.

 
L'idée d'écrire un outil d'EA qui combine plusieurs fonctions pratiques serait peut-être une bonne idée.
 

5430 Les fenêtres clignotent toujours lors de la préparation d'une tâche.

Comment résoudre ce problème ?

 
Aleksei Skrypnev #:

5430 Windows clignote toujours lors de la préparation d'un devoir.

Comment résoudre ce problème ?

De cette manière.
Попробуйте загрузить все файлы в архиве.
Попробуйте загрузить все файлы в архиве.
  • 2025.12.22
  • www.mql5.com
если бы время файлов в архиве совпадало со временем модификации в кодобазе. Не соответствует времени изменения конкретного файла. Я вижу корректную структуру после разархивирования а ведь сам редактор позволяет загрузить все эти файлы именно так
 
fxsaber #:
Ainsi.

C'est un très bon thème. Mais j'ai téléchargé avant tout séparément et ça clignote encore.

J'ai vu que dans le fichier MultiTester_Example.mq5

j'ai ajouté des lignes au fichier MultiTester_Example.mq5.

#define  FAKE // Enlever - contourner pour placer le code dans le KB.

#ifdef  FAKE
  void OnStart() {}
#else // #ifdef FAKE
#endif // #ifdef FAKE #else

Je l'ai commenté ou dois-je le faire différemment ? Ou puis-je supprimer ces 4 lignes ?

//#define FAKE // Remove - bypass to place code in the KB.

#ifdef FAKE// void OnStart() {}

#else // #ifdef FAKE

#endif // #ifdef FAKE #else


P.S. J'ai vu que j'ai pris l'ancienne liste de tâches sans ces lignes et qu'elle s'est mise à clignoter. Avec les nouvelles lignes, elle ne clignote pas.

Mais ai-je bien commenté une seule ligne ?

 
Aleksei Skrypnev #:

C'est un très bon thème. Mais j'ai téléchargé avant que tout séparément clignote encore.

J'ai vu cela dans le fichier MultiTester_Example.mq5

on a ajouté les lignes

Je l'ai commenté de cette façon ou dois-je le faire différemment ? Ou puis-je supprimer ces 4 lignes en général ?


P.S. J'ai vu que j'ai pris l'ancienne liste de tâches sans ces lignes et qu'elle clignotait. Avec les nouvelles lignes, elle ne clignote plus.

Mais ai-je commenté correctement une seule ligne ?

Vous avez bien compris : supprimez les commentaires ou supprimez complètement ces 4 lignes.
 
Bonjour, cher fxsaber ! Veuillez m'aider à résoudre un problème. Mon script a une fonction d'archivage, que j'ai développée avec l'aide de l'excellente bibliothèque MTTESTER. Il écrit Settin dans le dossier Tester dans la ligne suivante : if(!kernel32::CopyFileW(SrcPath,DstPath,false)) // Écraser Settin depuis le bac à sable Files vers le dossier Tester. Nous obtenons un ensemble portant le nom de "After archiving". Mais il n'est pas adapté à un travail ultérieur, apparemment à cause de l'encodage. Cependant, si vous l'écrivez manuellement au robot dans le testeur de stratégie et que vous l'enregistrez ensuite sous le nom "Après écriture manuelle au robot et enregistrement", cet ensemble est déjà approprié. Et il ne s'agit pas seulement de changer l'en-tête, mais de quelque chose d'autre. J'ai demandé de l'aide aux ironmen (Qwen, Deep Seek) et ils ont généré un script "ReloadSetsFromCommonFixed". Il a beaucoup de fonctionnalités intéressantes et il fonctionne, à l'exception de cette ligne : if(!FileCopy(source_path, FILE_COMMON, dest_path, FILE_COMMON)) L'ensemble est copié, mais lors de l'impression de vérification, la sortie est abracadabra, apparemment à cause de l'encodage. Iron a proposé 4 solutions, mais aucune n'a fonctionné (le texte les a toutes). Mon dernier espoir est d'avoir des caractères en cuir. Existe-t-il un moyen de modifier cette ligne dans la fonction d'archivage : if(!kernel32::CopyFileW(SrcPath,DstPath,false)) pour simuler également l'écriture manuelle sur le robot avec sauvegarde ultérieure dans le format requis "Après écriture manuelle sur le robot et sauvegarde" ? Cordialement, Alexander
 
klycko #:
Est-il possible de modifier cette ligne dans la fonction d'archivage ?

J'ai cherché ici (dans la fenêtre ouverte, appuyez sur ENTRÉE dans la barre d'adresse) l'enregistrement défini. Il est très probable que ces indicateurs soient nécessaires.

FileOpen(FileName, FILE_WRITE | FILE_UNICODE | FILE_TXT);
 

Ces drapeaux ont beaucoup aidé et le problème de l'archivage a été résolu. Le résultat est maintenant dans le bon format.

Je vous remercie de tout cœur !

Mais dans mon script Nocturne la commande ne fonctionne pas correctement :

prWrite0 = MTTESTER::SetSettings2(Settings); // Écriture des paramètres dans le robot

Bien que prWrite0 = true après son exécution.

Il s'agit probablement à nouveau d'une question de drapeaux lors de la lecture de l'ensemble des paramètres du dossier.

Ceci est fait par la fonction GetKthFileContent, qui a la ligne :

int handle = FileOpen(full_path, FILE_READ | FILE_WRITE | FILE_UNICODE | FILE_TXT | FILE_COMMON) ;

Les variantes de la ligne ci-dessous ne fonctionnent pas non plus :

// int handle = FileOpen(full_path, FILE_READ | FILE_TXT | FILE_COMMON); // Source variante ligne

// int handle = FileOpen(full_path, FILE_READ | FILE_UNICODE | FILE_TXT | FILE_COMMON) ;

Commande suivante :

prRead0 = MTTESTER::GetSettings(Control) ; // Lit les paramètres du robot qui viennent d'être installés

fonctionne correctement et prRead0 = true après son exécution.

Mais dans le réseau de contrôle, prMFI=true, car il a été initialement chargé manuellement dans le robot. Cela signifie que l'écriture dans le robot n'a pas eu lieu, même si le signe d'écriture prWrite0 = true.

Dans le réseau d'origine, prHEX=vrai

Dans le réseau d'origine du robot, prMFI=true

La commande MTTESTER::SetSettings2(Settings) fonctionne, mais ces paramètres n'apparaissent pas dans le robot.

Quel est le problème ?

Cordialement, Alexander

 
klycko #:

Quel est donc le problème ?

Je n'ai pas pris la peine d'étudier les drapeaux et j'ai décidé d'écrire un code fonctionnel pour sauvegarder et charger les fichiers de configuration du Testeur.

// Chargement/enregistrement du fichier set du testeur.
#property script_show_inputs

input bool inLoad = true; // Chargement/enregistrement des paramètres - vrai/faux

#include <fxsaber\MultiTester\MTTester.mqh> // https://www.mql5.com/fr/code/26132

void OnStart()
{
  const string FileName = __FILE__ + ".set";
  
  string Settings;
  ushort Words[];  
      
  if (inLoad) // Charger les paramètres.
  {
    Print("Load: " + (string)FileLoad(FileName, Words));
    Settings = ShortArrayToString(Words, 1); // 1 - Unicode
    
    Print(MTTESTER::SetSettings(Settings));
  
  }
  else if (MTTESTER::GetSettings(Settings)) // Sauvegarde des paramètres.
  {
    Words[ArrayResize(Words, 1) - 1] = 0xFEFF; // 1 - Unicode
    
    StringToShortArray(Settings, Words, ArraySize(Words));    
    Print("Save: " + (FileSave(FileName, Words) ? (string)ArraySize(Words) : "error"));
  }
}


Vous pouvez sauvegarder(inLoad = false) un fichier set par le biais du script, puis modifier quelque choseà la main et le charger(inLoad = true) dans le Testeur par le biais du script.

Si cela fonctionne, prenez les morceaux correspondants de la source pour vous.