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()); }
Commentaire 0