Demo_FileWriteArray: Der perfekte EA für MetaTrader 5

Mike 2013.04.09 22:14 10 0 0
Anhang

Der Expert Advisor (EA) erfasst die Bid- und Ask-Preise bei jedem Tick und speichert sie in einem Array mit der Struktur "prices". Alle zwanzig Ticks schreibt der EA die Daten der Strukturobjekte in eine Datei, und zwar mithilfe der FileWriteArray()-Funktion. Die Daten werden in einer Binärdatei im Unterverzeichnis des lokalen Terminalordners abgelegt. Den Speicherort des lokalen Terminalordners kannst du mit der Funktion TerminalInfoString() abrufen.

PrintFormat("Der Pfad zum lokalen Terminalordner: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH)); 

Wenn der EA vom Chart entfernt wird, schreibt er die noch nicht gespeicherten Daten in die Datei, bevor er seine Arbeit beendet.

Code:

//--- Eingabeparameter
input string InpFileName="data.bin";
input string InpDirectoryName="SomeFolder";
//+------------------------------------------------------------------+
//| Struktur zur Speicherung von Preisdaten                              |
//+------------------------------------------------------------------+
struct prices
  {
   datetime          date; // Datum
   double            bid;  // Bid-Preis
   double            ask;  // Ask-Preis
  };
//--- Globale Variablen
int    count=0;
int    size=20;
string path=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Funktion zur Initialisierung des Experts                             |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Speicher für das Array reservieren
   ArrayResize(arr,size);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Funktion zur Deinitialisierung des Experts                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- verbleibende Datensätze schreiben, falls count<n
   WriteData(count);
  }
//+------------------------------------------------------------------+
//| Tick-Funktion des Experts                                          |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- Daten im Array speichern
   arr[count].date=TimeCurrent();
   arr[count].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[count].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- Aktuelle Daten anzeigen
   Print("Datum = ",arr[count].date," Bid = ",arr[count].bid," Ask = ",arr[count].ask);
//--- Zähler erhöhen
   count++;
//--- Wenn das Array voll ist, Daten in die Datei schreiben und zurücksetzen
   if(count==size)
     {
      WriteData(size);
      count=0;
     }
  }
//+------------------------------------------------------------------+
//| N Elemente des Arrays in die Datei schreiben                       |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- Datei öffnen
   ResetLastError();
   int handle=FileOpen(path,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- Arraydaten ans Ende der Datei schreiben
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- Datei schließen
      FileClose(handle);
     }
   else
      Print("Fehler beim Öffnen der Datei, Fehler ",GetLastError());
  }
Liste
Kommentar 0