//+------------------------------------------------------------------+ //| Demo_FileWiteStruct.mq5 | //| Copyright 2013, MetaQuotes Software Corp. | //| https://www.mql5.com | //+------------------------------------------------------------------+ #property copyright "Copyright 2013, MetaQuotes Software Corp." #property link "https://www.mql5.com" #property version "1.00" //--- Beim Starten des Scripts zeigen Sie den Fenster mit den Eingabeparametern an #property script_show_inputs //--- die Parameter für das Erhalten der Daten aus dem Terminal input string InpSymbolName="EURUSD"; // Währungspaar input ENUM_TIMEFRAMES InpSymbolPeriod=PERIOD_H1; // Zeitspanne input datetime InpDateStart=D'2013.01.01 00:00'; // das Anfangsdatum zum Kopieren von Daten //--- die Parameter für die Aufzeichnung der Daten in die Datei input string InpFileName="EURUSD.txt"; // der Dateiname input string InpDirectoryName="Data"; // der Verzeichnisname //+------------------------------------------------------------------+ //| Struktur für die Speicherung von Daten-Kerzen | //+------------------------------------------------------------------+ struct candlesticks { double open; // Eröffnungspreis double close; // Schlußpreis double high; // der maximale Preis double low; // der minimale Preis datetime date; // Datum }; //+------------------------------------------------------------------+ //| Script program start function | //+------------------------------------------------------------------+ void OnStart() { datetime date_finish=TimeCurrent(); int size; datetime time_buff[]; double open_buff[]; double close_buff[]; double high_buff[]; double low_buff[]; candlesticks cand_buff[]; //--- stürzen Sie den Fehlerwert ResetLastError(); //---erhalten Sie die Zeit des Erscheinens der Bars aus dem Umfang if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1) { PrintFormat("Fehler beim Kopieren der Zeitwerte. Fehlercode = %d",GetLastError()); return; } //--- erhalten Sie die maximalen Preise der Bars aus dem Umfang if(CopyHigh(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,high_buff)==-1) { PrintFormat("Fehler beim Lopieren der maximalen Preise. Fehlercode = %d",GetLastError()); return; } //--- erhalten Sie die minimalen Preise der Bars aus dem Umfang if(CopyLow(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,low_buff)==-1) { PrintFormat("Fehler beim Lopieren der minimalen Preise. Fehlercode = %d",GetLastError()); return; } //--- erhalten Sie die Eröffnungspreise der Bars aus dem Umfang if(CopyOpen(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,open_buff)==-1) { PrintFormat("Fehler beim Kopieren von Werte des Eröffnungspreises. Fehlercode = %d",GetLastError()); return; } //--- erhalten Sie die Schlüßpreise der Bars aus dem Umfang if(CopyClose(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,close_buff)==-1) { PrintFormat("Fehler beim Kopieren von Werte des Schlußpreises. Fehlercode = %d",GetLastError()); return; } //--- bestimmen Sie die Dimension des Arrays size=ArraySize(time_buff); //--- Speichern Sie alle Daten in der Arraystruktur ArrayResize(cand_buff,size); for(int i=0;i<size;i++) { cand_buff[i].open=open_buff[i]; cand_buff[i].close=close_buff[i]; cand_buff[i].high=high_buff[i]; cand_buff[i].low=low_buff[i]; cand_buff[i].date=time_buff[i]; } //--- öffnen Sie die Datei zum Schreiben des Arrays der Struktur in die Datei (wenn nicht, dann sie automatisch erstellt werden wird) ResetLastError(); int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN|FILE_COMMON); if(file_handle!=INVALID_HANDLE) { PrintFormat("%s Datei ist zum Lesen geöffnet",InpFileName); PrintFormat("Pfad zur Datei: %s\\Files\\",TerminalInfoString(TERMINAL_COMMONDATA_PATH)); //--- bereiten Sie den Zähler der Zahl das Byte vor uint counter=0; //--- zeichnen Sie die Werte des Arrays im Zyklus for(int i=0;i<size;i++) counter+=FileWriteStruct(file_handle,cand_buff[i]); PrintFormat("In die Datei %s ist es %d das Byte der Informationen aufgezeichnet",InpFileName,counter); PrintFormat("Die Gesamtanzahl der Bytes: %d * %d * %d = %d, %s",size,5,8,size*5*8,size*5*8==counter ? "Treu" : "Fehler"); //--- schließen Sie die Datei FileClose(file_handle); PrintFormat("Die Daten sind aufgezeichnet, die Datei %s geschlossen",InpFileName); } else PrintFormat("Fehler beim Öffnen der Datei %s, Fehlercode = %d",InpFileName,GetLastError()); } |