FileWrite

Écriture de données converties en texte dans un fichier CSV ou TXT ; le délimiteur entre les données est inséré automatiquement s'il n'est pas égal à 0. Après l'écriture, le caractère de fin de ligne "\r\n" est ajouté au fichier.

Écriture des données telles quelles, sans conversion, dans un fichier BIN.

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  256.

La valeur rendue

Le nombre de bytes écrits.

Note

Seules les variables des types fondamentaux peuvent être utilisées comme paramètres ; les tableaux, structures et classes ne sont pas autorisés.

Lors de l'écriture dans un fichier CSV ou TXT :

Les données numériques sont converties au format texte (voir la fonction Print()). Les données des types double, float, complex et complexf sont affichées avec 16 chiffres après la virgule. Selon la représentation la plus compacte, les données peuvent être affichées au format traditionnel ou scientifique. Les nombres complexes sont affichés au format "(<real>,<imag>)". Pour afficher des nombres réels avec une autre précision ou dans un format explicitement indiqué, utilisez DoubleToString().

Les valeurs de type bool sont affichées sous forme de chaînes "true" ou "false".

Les valeurs de type datetime sont affichées au format "YYYY.MM.DD HH:MI:SS".

Lors de l'écriture dans un fichier BIN, les données sont écrites telles quelles, sans conversion. Les données de type string sont écrites sans zéro terminal, comme dans la fonction FileWriteString().

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