Schau, wie man Roboter kostenlos herunterladen kann
Finden Sie uns auf Twitter!
und werden Sie Mitglied unserer Fangruppe
Interessantes Skript?
Veröffentliche einen Link auf das Skript, damit die anderen ihn auch nutzen können
Hat Ihnen das Skript gefallen?
Bewerten Sie es im Terminal MetaTrader 5
Skripte

Demo_FileWriteDouble - Skript für den MetaTrader 5

Ansichten:
623
Rating:
(33)
Veröffentlicht:
2016.06.20 13:21
Aktualisiert:
2016.11.22 07:34
Benötigen Sie einen Roboter oder Indikator, der auf diesem Code basiert? Bestellen Sie ihn im Freelance-Bereich Zum Freelance

Das Skript holt die Werte des Moving Average Indikators und schreibt diese in die Binärdatei im "Data" Unterverzeichnis des lokalen Terminalordners. In den Skript Eingabeparametern können Parameter für die MA Indikator Berechnung, den Namen des Währungspaares, TimeFrame und das Datum für das wir die Indikatordaten berechnen wollen, angeben werden.

Neben den MA-Indikator Werten, führten die entsprechenden Werte der Zeit vorläufig zu einem double -Typ der auch in die Datei geschrieben wird.

Code:

//--- zeige das Fesnter mit den Eingabeparametern beim Aufruf des Skripts
#property script_show_inputs
//--- Parameter für das Beziehen von Daten vom Terminal
input string             InpSymbolName="EURJPY";           // Währungspaar
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_M15;       // TimeFrame
input int                InpMAPeriod=10;                  // Glättungsperiode
input int                InpMAShift=0;                    // Indikator Verschiebung
input ENUM_MA_METHOD     InpMAMethod=MODE_SMA;             // Glättungsart
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // Preistyp
input datetime           InpDateStart=D'2013.01.01 00:00'; // Daten kopieren Startdatum
//--- Parameter für das Schreien von Daten in die Datei
input string             InpFileName="MA.csv";    // Dateiname
input string InpDirectoryName="Data";   // Verzeichnisname
//+------------------------------------------------------------------+
//| Skript Programmstart Funktion                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish=TimeCurrent();
   double   ma_buff[];
   datetime time_buff[];
   int      size;
//--- Hole MA Indikator handle
   ResetLastError();
   int ma_handle=iMA(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpMAShift,InpMAMethod,InpAppliedPrice);
   if(ma_handle==INVALID_HANDLE)
     {
      //--- Fehler beim Holen des Indikator Handle
      PrintFormat("Fehler beim Holen des Indikator-Handles. Fehlercode = %d",GetLastError());
      return;
     }
//--- in der Schleife bleiben, bis der Indikator alle Werte berechnet hat
   while(BarsCalculated(ma_handle)==-1)
      Sleep(20); // Pause um dem Indikator Zeit zu geben alle Werte zu berechnen
   PrintFormat("Indikatorwerte beginnend mit %s werden in die Datei geschrieben",TimeToString(InpDateStart));
//--- kopiere Indikatorwerte
   ResetLastError();
   if(CopyBuffer(ma_handle,0,InpDateStart,date_finish,ma_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren der Indikatorwerte. Fehlercode = %d",GetLastError());
      return;
     }
//--- Kopieren der entsprechenden Balken Ankunftszeit
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren der Zeitwerte. Fehlercode = %d",GetLastError());
      return;
     }
//--- Buffergröße beziehen
   size=ArraySize(ma_buff);
//--- vom Indikator belegten Speicher freigeben
   IndicatorRelease(ma_handle);
//--- Datei zum Schreiben derIndikatorwerte öffnen (wenn die Datei nicht existiert, wird sie automatisch erstellt)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s Datei ist bereit zum Schreiben",InpFileName);
      PrintFormat("Dateipfad: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- zuerst Größe des Datensamples schreiben
      FileWriteDouble(file_handle,(double)size);
      //--- Indikatorzeit und -wert in Datei schreiben
      for(int i=0;i<size;i++)
        {
         FileWriteDouble(file_handle,(double)time_buff[i]);
         FileWriteDouble(file_handle,ma_buff[i]);
        }
      //--- Datei schließen
      FileClose(file_handle);
      PrintFormat("Daten geschrieben, %s Datei wurde geschlossen",InpFileName);
     }
   else
      PrintFormat("Fehler beim Öffnen der Datei %s , Fehlercode = %d",InpFileName,GetLastError());
  }

Übersetzt aus dem Russischen von MetaQuotes Ltd.
Originalpublikation: https://www.mql5.com/ru/code/1629

Demo_FileReadDatetime Demo_FileReadDatetime

Der Indikator demonstriert ein Beispiel für die Verwendung der FileReadDatetime() Funktion

Demo_FileWrite Demo_FileWrite

Das Skript demonstriert ein Beispiel für die Verwendung der FileWrite() Funktion

Demo_FileReadDouble Demo_FileReadDouble

Der Indikator demonstriert ein Beispiel für die Verwendung der FileReadDouble() Funktion

Demo_FileSize Demo_FileSize

Das Skript demonstriert ein Beispiel für die Verwendung der FileSize() Funktion