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