Guide Pratique : Développez votre EA pour MetaTrader 5 avec FileWriteArray

Mike 2013.04.09 22:14 96 0 0
Pièce jointe

Dans cet article, nous allons plonger dans le fonctionnement d'un Expert Advisor (EA) qui capte les prix Bid et Ask à chaque tick et les enregistre dans un tableau. Ce système est particulièrement utile pour ceux d'entre vous qui souhaitent analyser les données de marché en temps réel.

Notre Expert Advisor stocke les valeurs des prix dans la structure appelée "prices". À chaque vingtième tick, il enregistre les données dans un fichier binaire grâce à la fonction FileWriteArray(). Les données sont enregistrées dans un sous-dossier du répertoire local de votre terminal. Pour savoir où se trouve ce dossier local, vous pouvez utiliser la fonction TerminalInfoString().

PrintFormat("Le chemin vers le dossier local du terminal : %s\\Files\\", TerminalInfoString(TERMINAL_DATA_PATH)); 

Une fois que vous supprimez l'EA du graphique, toutes les données non écrites seront enregistrées dans le fichier avant que l'EA ne termine son fonctionnement.

Voici le code de base :

//--- paramètres d'entréeinputstring InpFileName="data.bin";
inputstring InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+//| Structure pour stocker les données de prix                                |//+------------------------------------------------------------------+struct prices
  {
   datetime          date; // données
   double            bid;  // Prix Bid
   double            ask;  // Prix Ask
  };
//--- variables globalesint    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+//| Fonction d'initialisation de l'Expert                                    |//+------------------------------------------------------------------+intOnInit()
  {
//--- allouer de la mémoire pour le tableau
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+//| Fonction de désinitialisation de l'Expert                                  |//+------------------------------------------------------------------+voidOnDeinit(constint reason)
  {
//--- écrire les chaînes restantes si count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+//| Fonction de tick de l'Expert                                              |//+------------------------------------------------------------------+voidOnTick()
  {
//--- sauvegarder les données dans le tableau
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- afficher les données actuelles
   Print("Date = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask);
//--- augmenter le compteur
   count++;
//--- si le tableau est rempli, écrire les données dans le fichier et le réinitialiser
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+//| Écrire n éléments du tableau dans le fichier                        |//+------------------------------------------------------------------+void WriteData(constint n)
  {
//--- ouvrir le fichier
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- écrire les données du tableau à la fin du fichier
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- fermer le fichier
      FileClose(handle);
     }
   else
      Print("Échec de l'ouverture du fichier, erreur ",GetLastError());
  }
Liste
Commentaire 0