Descargar MetaTrader 5

FileReadBool

Lee de un archivo del tipo CSV una cadena desde la posición actual hasta el separador (o hasta el final de la cadena de caracteres) y convierte la cadena leída al valor del tipo bool.

bool  FileReadBool(
   int  file_handle      // manejador del archivo
   );

Parámetros

file_handle

[in]  Descriptor de archivo devuelto por la función FileOpen().

Valor devuelto

La cadena leída puede tener valores "true", "false" o una representación simbólica de números enteros "0" o "1". El valor no nulo se convierte al lógico true. La función devuelve el valor convertido que se ha obtenido.

Ejemplo (se utiliza el archivo conseguido como resultado de trabajo del ejemplo para la función FileWrite)

//+------------------------------------------------------------------+
//|                                            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
//--- parámetros para la lectura de datos
input string InpFileName="MACD.csv";  // nombre del archivo
input string InpDirectoryName="Data"// nombre de la carpeta
//--- variables globales
int      ind=0;       // índice
double   upbuff[];    // búfer de indicadores de flechas arriba
double   downbuff[];  // búfer de indicadores de flechas abajo
bool     sign_buff[]; // array de señales (true - compra, false - venta)
datetime time_buff[]; // array de la hora de accionamiento de señales
int      size=0;      // tamaño de arrays de señales
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- abrimos el archivo
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Archivo %s abierto para la lectura",InpFileName);
      //--- primero leemos el número de señales
      size=(int)FileReadNumber(file_handle);
      //--- adjudicamos la memoria para los arrays
      ArrayResize(sign_buff,size);
      ArrayResize(time_buff,size);
      //--- leemos los datos desde el archivo
      for(int i=0;i<size;i++)
        {
         //--- tiempo de la señal
         time_buff[i]=FileReadDatetime(file_handle);
         //--- valor de la señal
         sign_buff[i]=FileReadBool(file_handle);
        }
      //--- cerramos el archivo
      FileClose(file_handle);
     }
   else
     {
      PrintFormat("Fallo al abrir el archivo %s, Código del error = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- enlace de los arrays
   SetIndexBuffer(0,upbuff,INDICATOR_DATA);
   SetIndexBuffer(1,downbuff,INDICATOR_DATA);
//--- establecemos el código del símbolo para dibujar en PLOT_ARROW
   PlotIndexSetInteger(0,PLOT_ARROW,241);
   PlotIndexSetInteger(1,PLOT_ARROW,242);
//---- establecimiento de valores del indicador que no van a ser visibles en el gráfico
   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);
//--- ciclo para las barras todavía no procesadas
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- por defecto 0
      upbuff[i]=0;
      downbuff[i]=0;
      //--- prueba de que si hay más datos
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- si las fechas coinciden, utilizamos el valor desde el archivo
            if(time[i]==time_buff[j])
              {
               //--- dibujamos la flecha dependiendo de la señal
               if(sign_buff[j])
                  upbuff[i]=high[i];
               else
                  downbuff[i]=low[i];
               //--- aumentamos el contador
               ind=j+1;
               break;
              }
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Véase también

Tipo bool, FileWrite