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 inputinputstring InpFileName="data.bin"; inputstring InpDirectoryName="SomeFolder"; //+------------------------------------------------------------------+//| Struttura per memorizzare i dati dei prezzi |//+------------------------------------------------------------------+struct prices { datetime data; // data double bid; // Prezzo Bid double ask; // Prezzo Ask }; //--- variabili globaliint count=0; int size=20; string path=InpDirectoryName+"//"+InpFileName; prices arr[]; //+------------------------------------------------------------------+//| Funzione di inizializzazione dell'Expert |//+------------------------------------------------------------------+intOnInit() { //--- alloca memoria per l'array ArrayResize(arr,size); //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+//| Funzione di de-inizializzazione dell'Expert |//+------------------------------------------------------------------+voidOnDeinit(constint reason) { //--- scrivi le stringhe rimanenti se count<n WriteData(count); } //+------------------------------------------------------------------+//| Funzione tick dell'Expert |//+------------------------------------------------------------------+voidOnTick() { //--- 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(constint 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