Demo_FileWriteArray: Un Expert Advisor per MetaTrader 5

Mike 2013.04.09 22:14 14 0 0
Allegato

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