Se sei un trader e hai mai desiderato un modo per registrare i prezzi di Bid e Ask in tempo reale, sei nel posto giusto! Questo Expert Advisor (EA) si occupa di ottenere i prezzi ad ogni tick e di memorizzarli in un array di strutture chiamato "prices". Ogni ventesimo tick, l'EA scrive i dati delle strutture in un file utilizzando la funzione FileWriteArray(). I dati vengono registrati in un file binario all'interno della sottodirectory della cartella locale del terminale. Puoi ottenere il percorso della cartella locale del terminale chiamando la funzione TerminalInfoString().
PrintFormat("Il percorso della cartella locale del terminale: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
Quando rimuovi l'Expert Advisor dal grafico, verranno scritti i dati non registrati nel file, dopodiché l'EA termina il suo lavoro.
Codice:
//--- parametri di input input string InpFileName="data.bin"; input string InpDirectoryName="SomeFolder"; //+------------------------------------------------------------------+ //| Struttura per memorizzare i dati dei prezzi | //+------------------------------------------------------------------+ struct prices { datetime data; // data double bid; // Prezzo Bid double ask; // Prezzo Ask }; //--- variabili globali int count=0; int size=20; string path=InpDirectoryName+"//"+InpFileName; prices arr[]; //+------------------------------------------------------------------+ //| Funzione di inizializzazione dell'Expert | //+------------------------------------------------------------------+ int OnInit() { //--- alloca memoria per l'array ArrayResize(arr,size); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Funzione di de-inizializzazione dell'Expert | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { //--- scrivi le stringhe rimanenti se count<n WriteData(count); } //+------------------------------------------------------------------+ //| Funzione tick dell'Expert | //+------------------------------------------------------------------+ void OnTick() { //--- salva i dati nell'array arr[count].data=TimeCurrent(); arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID); arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK); //--- mostra i dati correnti Print("Data = ",arr[count].data," Bid = ",arr[count].bid," Ask = ",arr[count].ask); //--- aumenta il contatore count++; //--- se l'array è pieno, scrivi i dati nel file e azzeralo if(count==size) { WriteData(size); count=0; } } //+------------------------------------------------------------------+ //| Scrivi n elementi dell'array nel file | //+------------------------------------------------------------------+ void WriteData(const int n) { //--- apri il file ResetLastError(); int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN); if(handle!=INVALID_HANDLE) { //--- scrivi i dati dell'array alla fine del file FileSeek(handle,0,SEEK_END); FileWriteArray(handle,arr,0,n); //--- chiudi il file FileClose(handle); } else Print("Impossibile aprire il file, errore ",GetLastError()); }
Commento 0