MetaTrader 5 herunterladen

FileReadFloat

Liest Zahl mit einfacher Genauigkeit mit dem Fliesspunkt von der laufenden Position der binaeren Datei.

float  FileReadFloat(
   int  file_handle      // Datei-Handle
   );

Parameter

file_handle

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

Rückgabewert

Wert des Typs float.

Bemerkung

für die Erhaltung der fehlerbezogenen Information muss die Funktion GetLastError() aufgerufen werden.

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

//+------------------------------------------------------------------+
//|                                           Demo_FileReadFloat.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_separate_window
#property indicator_buffers 2
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "CloseLine"
#property indicator_type1   DRAW_COLOR_LINE
#property indicator_color1  clrRed,clrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- Parameter zum Lesen von Daten
input string InpFileName="Close.bin"// der Dateiname
input string InpDirectoryName="Data"// der Verzeichnisname
//--- globale Variablen
int      ind=0;
int      size=0;
double   close_buff[];
datetime time_buff[];
//--- Indicator Buffers
double   buff[];
double   color_buff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
   int def_size=100;
//--- trennen Sie den Speichern für den Arrays
   ArrayResize(close_buff,def_size);
   ArrayResize(time_buff,def_size);
//--- ö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 die Dateidaten
      while(!FileIsEnding(file_handle))
        {
         //--- lesen Sie die Zeitwert und Preisewert
         time_buff[size]=(datetime)FileReadDouble(file_handle);
         close_buff[size]=(double)FileReadFloat(file_handle);
         size++;
         //--- die Größe des Arrays zu erhöhen, wenn sie überfüllt sind
         if(size==def_size)
           {
            def_size+=100;
            ArrayResize(close_buff,def_size);
            ArrayResize(time_buff,def_size);
           }
        }
      //--- 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);
     }
//--- Arrays-Bindung zum Indikator Puffers
   SetIndexBuffer(0,buff,INDICATOR_DATA);
   SetIndexBuffer(1,color_buff,INDICATOR_COLOR_INDEX);
//---- erstellen Sie die Anzeige-Werte, 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 die noch unbearbeiteten Bars
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- die Voreinstellung 0
      buff[i]=0;
      color_buff[i]=0; // die rote Farbe als Voreinstellung
      //--- 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])
              {
               //--- erhalten Sie einen Preis
               buff[i]=close_buff[j];
               //--- wenn der aktuelle Preis größer als die vorherige, so Farbe blau ist
               if(buff[i-1]>buff[i])
                  color_buff[i]=1;
               //--- 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), FileReadDouble, FileWriteFloat