FileWrite

Inscrit les données au fichier comme CSV ou TXT, le délimiteur entre les données est inséré automatiquement, s'il n'est pas égal à 0. Après avoir écrit dans le fichier, le caractère de la fin de la ligne "\r\n" sera ajouté.

uint  FileWrite(
   int  file_handle,     // handle du fichier
   ...                   // liste des paramètres inscrits
   );

Paramètres

file_handle

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

...

[in]  La liste des paramètres divisés par les virgules, pour l'enregistrement au fichier. Le nombre de paramètres entrés au fichier ne doit pas excéder  63.

La valeur rendue

Le nombre de bytes écrits.

Note

A la sortie les données numériques seront transformées au format de texte (regarde la fonction Print()). Les données du type double sont sorties à près de 16 chiffres décimaux après le point, en cela les données peuvent être sortis aux formats traditionnel ou scientifique — en fonction de que l'enregistrement sera plus compact. Les données du type float sont sorties avec 5 chiffres décimaux après le point. Pour la sortie des nombres matériels avec une autre exactitude ou dans le format évidemment indiqué il est nécessaire d'utiliser la fonction DoubleToString().

Les nombres du type bool sont sorties en forme des lignes  "true" ou "false". Les nombres du type datetime sont sorties au format "YYYY.MM.DD HH:MI:SS".

Exemple:

//+------------------------------------------------------------------+
//|                                               Demo_FileWrite.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"
//--- montrons la fenêtre des paramètres d'entrée au lancement du script
#property script_show_inputs
//--- les paramètres pour la réception des données du terminal
input string             InpSymbolName="EURUSD";           // la paire de devise
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // le temps trame
input int                InpFastEMAPeriod=12;              // la période de la moyenne rapide
input int                InpSlowEMAPeriod=26;              // la période de la moyenne lente
input int                InpSignalPeriod=9;                // la période de la prise de moyenne de la différence
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // le type du prix
input datetime           InpDateStart=D'2012.01.01 00:00'; // la date de commencement du copiage des données
//--- les paramètres pour l'enregistrement des données au fichier
input string             InpFileName="MACD.csv";  // le nom du fichier
input string             InpDirectoryName="Data"// le nom du répertoire
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // la date de la fin du copiage des données
   bool     sign_buff[]; // le tableau des signaux (true - l'achat, false - la vente)
   datetime time_buff[]; // le tableau du temps de l'arrivée des signaux
   int      sign_size=0; // la taille des tableaux des signaux
   double   macd_buff[]; // le tableau des valeurs de l'indicateur
   datetime date_buff[]; // le tableau des dates de l'indicateur
   int      macd_size=0; // la taille des tableaux de l'indicateur
//--- le temps de la fin - courant
   date_finish=TimeCurrent();
//--- recevrons le handle de l'indicateur MACD
   ResetLastError();
   int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice);
   if(macd_handle==INVALID_HANDLE)
     {
      //--- on n'a pas réussi de recevoir le hadle de l'indicateur
      PrintFormat("L'erreur de la réception du handle de l'indicateur. Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- on se trouve dans le cycle, pendant que l'indicateur ne compte pas toutes les valeurs
   while(BarsCalculated(macd_handle)==-1)
      Sleep(10); // le retard pour que l'indicateur puisse de calculer les valeurs
//---copions les valeurs de l'indicateur pour la période définie
   ResetLastError();
   if(CopyBuffer(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1)
     {
      PrintFormat("On n'a pas réussi de copier les valeurs de l'indicateur. Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- copions le temps correspondant pour les valeurs de l'indicateur
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("On n'a pas réussi de copier les valeurs du temps Le code de l'erreur = %d",GetLastError());
      return;
     }
//--- désallouons la mémoire occupée par l'indicateur
   IndicatorRelease(macd_handle);
//---recevrons la taille du tampon
   macd_size=ArraySize(macd_buff);
//--- analyserons les données et sauvegardons les signaux de l'indicateur aux tableaux
   ArrayResize(sign_buff,macd_size-1);
   ArrayResize(time_buff,macd_size-1);
   for(int i=1;i<macd_size;i++)
     {
      //--- le signal à l'achat
      if(macd_buff[i-1]<0 && macd_buff[i]>=0)
        {
         sign_buff[sign_size]=true;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
      //--- le signal à la vente
      if(macd_buff[i-1]>0 && macd_buff[i]<=0)
        {
         sign_buff[sign_size]=false;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
     }
//--- ouvrirons le fichier pour l'enregistrement des valeurs de l'indicateur (s'il n'existe pas, il sera créé automatiquement)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("Le fichier %s est ouvert pour l'enregistrement",InpFileName);
      PrintFormat("La voie vers le fichier: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- d'abord enregistrons la quantité de signaux
      FileWrite(file_handle,sign_size);
      //--- enregistrons le temps des signaux et leurs valeurs au fichier
      for(int i=0;i<sign_size;i++)
         FileWrite(file_handle,time_buff[i],sign_buff[i]);
      //--- fermons le fichier
      FileClose(file_handle);
      PrintFormat("Les données sont enregistrés, le fichier %s est fermé",InpFileName);
     }
   else
      PrintFormat("On n'a pas réussi d'ouvrir le fichier %s, Le code de l'erreur = %d",InpFileName,GetLastError());
  }

Voir aussi

Comment, Print, StringFormat