MetaTrader 5 herunterladen

FileReadNumber

Liest aus der Datei des Typs CSV die Zeile von der laufenden Position bis zum Begrenzer (oder bis zum Ende der Textzeile) und wandelt die gelesene Zeile in den Wert des Typs double um.

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

Parameter

file_handle

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

Rückgabewert

Wert des Typs double.

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

//+------------------------------------------------------------------+
//|                                          Demo_FileReadNumber.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 5
#property indicator_plots   1
//---- plot Label1
#property indicator_label1  "Overbought & Oversold"
#property indicator_type1   DRAW_COLOR_BARS
#property indicator_color1  clrRedclrBlue
#property indicator_style1  STYLE_SOLID
#property indicator_width1  2
//--- Parameter zum Lesen von Daten
input string InpFileName="RSI.csv";   // der Dateiname
input string InpDirectoryName="Data"// der Verzeichnisname
//--- die Indikator-Buffers
double   open_buff[];
double   high_buff[];
double   low_buff[];
double   close_buff[];
double   color_buff[];
//--- überkauft Variablen
int      ovb_ind=0;
int      ovb_size=0;
datetime ovb_time[];
//--- überverkauft Variablen
int      ovs_ind=0;
int      ovs_size=0;
datetime ovs_time[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- Die standartmäßige Variable Größe von Arrays 
   int ovb_def_size=100;
   int ovs_def_size=100;
//--- trennen Sie den Speichern für den Arrays
   ArrayResize(ovb_time,ovb_def_size);
   ArrayResize(ovs_time,ovs_def_size);
//--- öffnen Sie die Datei
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV|FILE_ANSI);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat(" %s Datei ist zum Lesen geöffnet",InpFileName);
      PrintFormat("Pfad zur Datei: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      double value;
      //--- lesen Sie die Dateidaten
      while(!FileIsEnding(file_handle))
        {
         //--- lesen Sie den ersten Wert in eine Zeichenfolge 
         value=FileReadNumber(file_handle);
         //--- lesen Sie die verschiedenen Arrays, abhängig vom Ergebnis der Funktion
         if(value>=70)
            ReadData(file_handle,ovb_time,ovb_size,ovb_def_size);
         else
            ReadData(file_handle,ovs_time,ovs_size,ovs_def_size);
        }
      //--- schließen Sie die Datei
      FileClose(file_handle);
      PrintFormat("Die Daten werden gelesen, die Datei %s geschlossen",InpFileName);
     }
   else
     {
      PrintFormat("Fehler beim Öffnen der Datei %s, Fehlercode = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- Arrays-Bindung 
   SetIndexBuffer(0,open_buff,INDICATOR_DATA);
   SetIndexBuffer(1,high_buff,INDICATOR_DATA);
   SetIndexBuffer(2,low_buff,INDICATOR_DATA);
   SetIndexBuffer(3,close_buff,INDICATOR_DATA);
   SetIndexBuffer(4,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);
  }
//+------------------------------------------------------------------+
//| Lesen Sie die Zeilen einer Datei                                 |
//+------------------------------------------------------------------+
void ReadData(const int file_handle,datetime &arr[],int &size,int &def_size)
  {
   bool flag=false;
//--- Lesen Sie, bis das Ende der Zeichenfolge oder Datei erreichen
   while(!FileIsLineEnding(file_handle) && !FileIsEnding(file_handle))
     {
      //--- bewegen Sie den Wagen, nach dem Lesen der Anzahl
      if(flag)
         FileReadNumber(file_handle);
      //--- das aktuelle Datum speichern
      arr[size]=FileReadDatetime(file_handle);
      size++;
      //--- Falls erforderlich, vergrößern Sie die Größe des Arrays
      if(size==def_size)
        {
         def_size+=100;
         ArrayResize(arr,def_size);
        }
      //--- übergeben die erste iteration
      flag=true;
     }
  }
//+------------------------------------------------------------------+
//| 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);
   ArraySetAsSeries(open,false);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
   ArraySetAsSeries(close,false);
//--- der Zyklus für die noch unbearbeiteten Bars
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- die Voreinstellung 0 
      open_buff[i]=0;
      high_buff[i]=0;
      low_buff[i]=0;
      close_buff[i]=0;
      color_buff[i]=0;
      //--- prüfen Sie, ob es noch Daten gibt
      if(ovb_ind<ovb_size)
         for(int j=ovb_ind;j<ovb_size;j++)
           {
            //--- wenn die Daten identisch sind, ist die Bar in überkauft Zone
            if(time[i]==ovb_time[j])
              {
               open_buff[i]=open[i];
               high_buff[i]=high[i];
               low_buff[i]=low[i];
               close_buff[i]=close[i];
               //--- 0 - die rote Farbe
               color_buff[i]=0;
               //--- vergrössern Sie den Zähler
               ovb_ind=j+1;
               break;
              }
           }
      //--- prüfen Sie, ob es noch Daten gibt
      if(ovs_ind<ovs_size)
         for(int j=ovs_ind;j<ovs_size;j++)
           {
            //--- wenn die Daten identisch sind, ist die Bar in überverkauft Zone
            if(time[i]==ovs_time[j])
              {
               open_buff[i]=open[i];
               high_buff[i]=high[i];
               low_buff[i]=low[i];
               close_buff[i]=close[i];
               //--- 1 - die blau Farbe
               color_buff[i]=1;
               //--- vergrössern Sie den Zähler
               ovs_ind=j+1;
               break;
              }
           }
     }
//--- den Wert prev_calculated für den nächsten Anruf zurückgeben
   return(rates_total);
  }
//+------------------------------------------------------------------+
//| Der Bearbeiter des Ereignisses ChartEvent                        |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam
                  )
  {
//--- ändern Sie die Breite des Indikators je nach dem Ausmaß
   if(ChartGetInteger(0,CHART_SCALE)>3)
      PlotIndexSetInteger(0,PLOT_LINE_WIDTH,2);
   else
      PlotIndexSetInteger(0,PLOT_LINE_WIDTH,1);
  }

Sehen Sie auch

FileWriteString