FileReadDouble

Liest die Zahl der doppelten Genauigkeit mit dem Fliesspunkt (double) aus der Binärdatei von der laufenden Position des Dateianzeigers.

double  FileReadDouble(
   int  file_handle      // Datei-Handle
   );

Parameter

file_handle

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

Rückgabewert

Wert des Typs double.

Hinweis

Für die Erhlatung der fehlerbezogenen Information muss die Funktion GetLastError() aufgerufen werden.

Beispiel (die Datei wird verwendet, die infolge der Arbeit des Beispiels für die Funktion FileWriteDouble bekommen ist)

//+------------------------------------------------------------------+
//|                                          Demo_FileReadDouble.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"
#property indicator_chart_window
#property indicator_buffers 1
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "MA"
#property indicator_type1   DRAW_LINE
#property indicator_color1  clrGreen
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
#property indicator_separate_window
//--- Parameter zum Lesen von Daten
input string InpFileName="MA.csv";    // der Dateiname
input string InpDirectoryName="Data"// der Verzeichnisname
//--- globale Variablen
int      ind=0;
int      size=0;
double   ma_buff[];
datetime time_buff[];
//--- Indikator Buffer
double   buff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- öffnen Sie die Datei
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|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));
      //--- lesen Sie zuerst wie viele Daten im Datei sind
      size=(int)FileReadDouble(file_handle);
      //--- trennen Sie den Speichern für den Arrays
      ArrayResize(ma_buff,size);
      ArrayResize(time_buff,size);
      //--- lesen Sie den Dateidaten
      for(int i=0;i<size;i++)
        {
         time_buff[i]=(datetime)FileReadDouble(file_handle);
         ma_buff[i]=FileReadDouble(file_handle);
        }
      //--- schließen Sie die Datei 
      FileClose(file_handle);
      PrintFormat("Die Daten werden gelesen, %s Datei geschlossen",InpFileName);
     }
   else
     {
      PrintFormat("Fehler beim Öffnen der Datei %s, Fehlercode = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- Array-Bindung zum Indikator Puffer mit 0 Index
   SetIndexBuffer(0,buff,INDICATOR_DATA);
//---- erstellen Sie die Indikatorwerte, die im Diagramm nicht sichtbar sein werden
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Custom indicator iteration function                              |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   ArraySetAsSeries(time,false);
//--- der Zyklus für noch unbearbeiteten Bars
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- die Voreinstellung 0
      buff[i]=0;
      //--- prüfen Sie, ob es noch Daten gibt
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- wenn die Daten identisch sind, dann verwenden Sie den Wert aus einer Datei
            if(time[i]==time_buff[j])
              {
               buff[i]=ma_buff[j];
               //--- vergrößern Sie den Zähler
               ind=j+1;
               break;
              }
           }
        }
     }
//--- den Wert prev_calculated für den nächsten Anruf zurückgeben
   return(rates_total);
  }

Sehen Sie auch

Realtypen (double, float), StringToDouble, DoubleToString, FileWriteDouble