FileWriteDouble

Schreibt den Wert des Parameters vom Typ double ab der aktuellen Position des Dateizeigers in eine Binärdatei.

Schreibt den in Text umgewandelten Wert des Parameters vom Typ double ab der aktuellen Position des Dateizeigers in eine CSV- oder Textdatei.

uint  FileWriteDouble(
   int     file_handle,     // Datei-Handle
   double  value            // Werte für Aufzeichnung 
   );

Parameter

file_handle

[in]  Dateiattribut, das durch die Funktion FileOpen() zurückgegeben wird.

value

[in]  Wert des Typs double.

Rückgabewert

Bei Erfolg gibt die Funktion die Anzahl der geschriebenen Bytes zurück (beim Schreiben in eine Binärdatei — sizeof(double)=8). Der Dateizeiger wird um dieselbe Anzahl von Bytes verschoben.

Hinweis

Beim Schreiben in eine Binärdatei entspricht dies dem Aufruf der Funktion FileWrite mit einem Parameter vom Typ double

double double_value;
FileWrite(file_handle,double_value);

Beispiel:

//+------------------------------------------------------------------+
//|                                         Demo_FileWriteDouble.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="EURJPY";           // Währungspaar
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_M15;       // Zeitspanne
input int                InpMAPeriod=10;                   // die Glätten Periode
input int                InpMAShift=0;                     // die Absetzung des Indikators
input ENUM_MA_METHOD     InpMAMethod=MODE_SMA;             // der Glätten Typ
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // der Typ des Preises
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="MA.csv";    // der Dateiname
input string             InpDirectoryName="Data"; // der Verzeichnisname
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish=TimeCurrent();
   double   ma_buff[];
   datetime time_buff[];
   int      size;
//--- bekommen Sie die Handle des Indikators MA
   ResetLastError();
   int ma_handle=iMA(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpMAShift,InpMAMethod,InpAppliedPrice);
   if(ma_handle==INVALID_HANDLE)
     {
      //--- Es misslang, die Handle des Indikators zu bekommen
      PrintFormat("Fehler beim Erhalten der Handle des Indikators. Fehlercode = %d",GetLastError());
      return;
     }
//--- befinden Sie sich im Zyklus, bis der Indikator alle Werten rechnen wird
   while(BarsCalculated(ma_handle)==-1)
      Sleep(20); // die Verzögerungszeit, damit der Indikator dazugekommen ist die Werten auszurechnen
   PrintFormat("die Werte des Indikators, da seit %s beginnen, werden in die Datei aufgezeichnet sein",TimeToString(InpDateStart));
//--- Kopieren Sie die Werte eines Indikators
   ResetLastError();
   if(CopyBuffer(ma_handle,0,InpDateStart,date_finish,ma_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren der Werte des Indikators. Fehlercode = %d",GetLastError());
      return;
     }
//--- Kopieren Sie die Zeit des Erscheinens der entsprechenden Bars
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,time_buff)==-1)
     {
      PrintFormat("Fehler beim Kopieren von Zeitwerte. Fehlercode = %d",GetLastError());
      return;
     }
//--- erhalten Sie die Größe des Buffers
   size=ArraySize(ma_buff);
//--- befreien Sie das Gedächtnis, das mit dem Indikator eingenommen wird
   IndicatorRelease(ma_handle);
//--- öffnen Sie die Datei zum Schreiben die Indikatorwerte (wenn nicht, dann sie automatisch erstellt werden wird)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s Datei ist zum Lesen geöffnet",InpFileName);
      PrintFormat("Pfad zur Datei: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- schreiben Sie zuerst die Große der Beispieldaten
      FileWriteDouble(file_handle,(double)size);
      //--- schreiben Sie die Zeit und die Indikatorwerte in der Datei
      for(int i=0;i<size;i++)
        {
         FileWriteDouble(file_handle,(double)time_buff[i]);
         FileWriteDouble(file_handle,ma_buff[i]);
        }
      //--- 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());
  }

Sehen Sie auch

Realtypen (double, float)