FileReadDouble

Lit le nombre de l'exactitude double avec une virgule flottante (double) du fichier binaire de la position courante de l'indicateur de fichier.

double  FileReadDouble(
   int  file_handle      // handle du fichier
   );

Paramètres

file_handle

[in]  Le descripteur de fichier rendu par la fonction FileOpen().

La valeur rendue

La valeur du type double.

Note

Pour recevoir l'information sur l'erreur, il est nécessaire d'appeler la fonction GetLastError().

Exemple (on utilise le fichier reçu à la suite du travail de l'exemple pour la fonction FileWriteDouble)

//+------------------------------------------------------------------+
//|                                          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
//--- les paramètres pour la lecture des données
input string InpFileName="MA.csv";    // le nom du fichier
input string InpDirectoryName="Data"// le nom du répertoire
//--- les variables globales
int      ind=0;
int      size=0;
double   ma_buff[];
datetime time_buff[];
//--- indicator buffer
double   buff[];
//+------------------------------------------------------------------+
//| Custom indicator initialization function                         |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- ouvrons le fichier
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_BIN);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Le fichier %s est ouvert pour la lecture",InpFileName);
      PrintFormat("La voie vers le fichier: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- lisons d'abord combien de données sont dans le fichier
      size=(int)FileReadDouble(file_handle);
      //--- allouons la mémoire pour les tableaux
      ArrayResize(ma_buff,size);
      ArrayResize(time_buff,size);
      //--- lisons les données du fichier
      for(int i=0;i<size;i++)
        {
         time_buff[i]=(datetime)FileReadDouble(file_handle);
         ma_buff[i]=FileReadDouble(file_handle);
        }
      //--- fermons le fichier
      FileClose(file_handle);
      PrintFormat("Les données sont lues, le fichier %s est fermé",InpFileName);
     }
   else
     {
      PrintFormat("On n' a pas réussi à ouvrir le fichier %s, le code de l'erreur = %d",InpFileName,GetLastError());
      return(INIT_FAILED);
     }
//--- Le rattachement du tableau au tampon d'indicateur avec l'indice 0
   SetIndexBuffer(0,buff,INDICATOR_DATA);
//---- l'établissement des valeurs de l'indicateur qui ne seront pas visibles sur le graphique
   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);
//--- le cycle pour les barres non-traitées
   for(int i=prev_calculated;i<rates_total;i++)
     {
      //--- par défaut 0
      buff[i]=0;
      //--- la vérification s'il y a encore des données
      if(ind<size)
        {
         for(int j=ind;j<size;j++)
           {
            //--- si les dates correspondent, utilisons la valeur du fichier
            if(time[i]==time_buff[j])
              {
               buff[i]=ma_buff[j];
               //---augmentons le compteur
               ind=j+1;
               break;
              }
           }
        }
     }
//--- return value of prev_calculated for next call
   return(rates_total);
  }

Voir aussi

Les types réels (double, float), StringToDouble, DoubleToString, FileWriteDouble