MetaTrader 5 herunterladen

FileReadBool

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 bool um.  

bool  FileReadBool(
   int  file_handle      // Datei-Handle
   );

Parameter

file_handle

[in]  Dateiattribut, das durch die Funktion FileOpen().

Rückgabewert

Die gelesene Zeile kann die Werte "true", "false" oder Symboldarstellung der Ganzzahlen "0" oder "1" haben. Der Nichtnullwert wird in den logischen Wert true umgewandelt. Die Funktion gibt den erhaltenen umgewandelten Wert zurück.

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

//+------------------------------------------------------------------+
//|                                            Demo_FileReadBool.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 2
#property indicator_plots   2
//---- plot Label1
#property indicator_label1  "UpSignal"
#property indicator_type1   DRAW_ARROW
#property indicator_color1  clrRed
#property indicator_style1  STYLE_SOLID
#property indicator_width1  4
//---- plot Label2
#property indicator_label2  "DownSignal"
#property indicator_type2   DRAW_ARROW
#property indicator_color2  clrRed
#property indicator_style2  STYLE_SOLID
#property indicator_width2  4
//--- Parameter zum Lesen von Daten
input string InpFileName="MACD.csv";  // der Dateiname
input string InpDirectoryName="Data"// der Verzeichnisname
//--- globale Variablen
int      ind=0;       // Index
double   upbuff[];    // der Indikator-Puffer der Zeiger nach oben
double   downbuff[];  // der Indikator-Puffer der Zeiger nach unten
bool     sign_buff[]; // ein Array von Signalen (true - kaufen, false - verkaufen)
datetime time_buff[]; // ein Array der Zeit des Eintritts der Signale
int      size=0;      // die Größe der Array von Signalen
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- öffnen Sie die Datei
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s Datei ist zum Lesen geöffnet",InpFileName);
      //--- Lesen Sie zuerst die Anzahl der Signale
      size=(int)FileReadNumber(file_handle);
      //--- trennen Sie den Speichern für den Arrays
      ArrayResize(sign_buff,size);
      ArrayResize(time_buff,size);
      //--- lesen Sie die Dateidaten
      for(int i=0;i<size;i++)
        {
         //--- Die Zeit des Signals
         time_buff[i]=FileReadDatetime(file_handle);
         //--- Der Signalwert
         sign_buff[i]=FileReadBool(file_handle);
        }
      //--- schließen Sie die Datei
      FileClose(file_handle);
     }
   else
     {
      PrintFormat("Fehler beim Öffnen der Datei %s, Fehlercode = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- Arrays-Bindung
   SetIndexBuffer(0,upbuff,INDICATOR_DATA);
   SetIndexBuffer(1,downbuff,INDICATOR_DATA);
//--- geben Sie den Zeichencode für das Rendering in PLOT_ARROW vor
   PlotIndexSetInteger(0,PLOT_ARROW,241);
   PlotIndexSetInteger(1,PLOT_ARROW,242);
//---- erstellen Sie die Indikatorwerte, die im Diagramm nicht sichtbar sein werden
   PlotIndexSetDouble(0,PLOT_EMPTY_VALUE,0);
   PlotIndexSetDouble(1,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);
   ArraySetAsSeries(high,false);
   ArraySetAsSeries(low,false);
//--- der Zyklus für die noch unbearbeiteten Bars
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- die Voreinstellung 0
      upbuff[i]=0;
      downbuff[i]=0;
      //--- prüfen Sie, ob es noch Daten gibt
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- Wenn die Daten übereinstimmen, dann verwenden Sie den Wert aus einer Datei
            if(time[i]==time_buff[j])
              {
               //--- zeichnen Sie den Zeiger je nach dem Signal
               if(sign_buff[j])
                  upbuff[i]=high[i];
               else
                  downbuff[i]=low[i];
               //--- 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

Typ bool, FileWrite