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

Mike 2013.04.09 22:14 14 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ée
input string InpFileName="data.bin";
input string 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 globales
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Fonction d'initialisation de l'Expert                                    |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- allouer de la mémoire pour le tableau
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Fonction de désinitialisation de l'Expert                                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- écrire les chaînes restantes si count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| Fonction de tick de l'Expert                                              |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- 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(const int 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