FileWrite

Esta función se utiliza para escribir los datos en un archivo del tipo CSV o TXT. Si el delimitador no es igual a 0, entonces se inserta entre los datos automáticamente. Después de la escritura en el archivo, se añade el salto de línea "\r\n".

uint  FileWrite(
   int  file_handle,     // manejador del archivo
   ...                   // lista de parámetros a escribir
   );

Parámetros

file_handle

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

...

[in]  Lista de parámetros separados por coma para escribirlos en el archivo. El número de parámetros a introducir no puede superar 63.

Valor devuelto

Número de bytes escritos.

Nota

En la salida los datos numéricos se convierten al formato de texto (ver la función Print()). Los datos del tipo double se visualizan con la precisión de hasta 16 dígitos decimales después del punto, además, los datos pueden ser visualizados en el formato tradicional o científico, dependiendo de cuál de ellos va a ser más compacto. Los datos del tipo float se visualizan con 5 dígitos decimales después del punto. Para visualizar los números reales con otra precisión o en un formato explícitamente especificado hay que usar la función DoubleToString().

Los números del tipo bool se visualizan como cadenas "true" o "false". Los números del tipo datetime se visualizan en el formato "YYYY.MM.DD HH:MI:SS".

Ejemplo:

//+------------------------------------------------------------------+
//|                                               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"
//--- mostramos la ventana de parámetros de entrada al iniciar el script
#property script_show_inputs
//--- parámetros para recibir datos desde el terminal
input string             InpSymbolName="EURUSD";           // par de divisas
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // período de tiempo
input int                InpFastEMAPeriod=12;              // período de la EMA rápida
input int                InpSlowEMAPeriod=26;              // período de la EMA lenta
input int                InpSignalPeriod=9;                // período del promedio de diferencia
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // tipo del precio
input datetime           InpDateStart=D'2012.01.01 00:00'; // fecha de inicio del copiado de datos
//--- parámetros para la escritura de datos en el archivo
input string             InpFileName="MACD.csv";  // nombre del archivo
input string             InpDirectoryName="Data"// nombre de la carpeta
//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // fecha del fin de copiado de datos
   bool     sign_buff[]; // array de señales (true - compra, false - venta)
   datetime time_buff[]; // array del tiempo de llegada de señales
   int      sign_size=0; // tamaño de arrays de las señales
   double   macd_buff[]; // array de los valores del indicador
   datetime date_buff[]; // array de las fechas del indicador
   int      macd_size=0; // tamaño de arrays del indicador
//--- tiempo de finalización - actual
   date_finish=TimeCurrent();
//--- obtenemos el manejador del indicador MACD
   ResetLastError();
   int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice);
   if(macd_handle==INVALID_HANDLE)
     {
      //--- fallo al obtener el manejador del indicador
      PrintFormat("Error a la hora de obtener el manejador del indicador. Código del error = %d",GetLastError());
      return;
     }
//--- seguimos en el ciclo hasta que el indicador no termine de calcular todos sus valores
   while(BarsCalculated(macd_handle)==-1)
      Sleep(10); // retardo para que al indicador le de tiempo a calcular sus valores
//--- copiamos los valores del indicador durante un período determinado
   ResetLastError();
   if(CopyBuffer(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1)
     {
      PrintFormat("Fallo al copiar los valores del indicador. Código del error = %d",GetLastError());
      return;
     }
//--- copiamos el tiempo correspondiente para los valores del indicador
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("Fallo al copiar los valores del tiempo. Código del error = %d",GetLastError());
      return;
     }
//--- liberamos la memoria que ocupa el indicador
   IndicatorRelease(macd_handle);
//--- obtenemos el tamaño del búfer
   macd_size=ArraySize(macd_buff);
//--- vamos a analizar los datos y guardar las señales del indicador en los arrays
   ArrayResize(sign_buff,macd_size-1);
   ArrayResize(time_buff,macd_size-1);
   for(int i=1;i<macd_size;i++)
     {
      //--- señales de compra
      if(macd_buff[i-1]<0 && macd_buff[i]>=0)
        {
         sign_buff[sign_size]=true;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
      //--- señales de venta
      if(macd_buff[i-1]>0 && macd_buff[i]<=0)
        {
         sign_buff[sign_size]=false;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
     }
//--- abrimos el archivo para escribir los valores del indicador (si no existe, se crea automáticamente)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("El archivo %s está abierto para la escritura",InpFileName);
      PrintFormat("Ruta del archivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- primero apuntamos el número de señales
      FileWrite(file_handle,sign_size);
      //--- apuntamos en el archivo el tiempo de señales y sus valores
      for(int i=0;i<sign_size;i++)
         FileWrite(file_handle,time_buff[i],sign_buff[i]);
      //--- cerramos el archivo
      FileClose(file_handle);
      PrintFormat("Datos grabados, el archivo %s cerrado",InpFileName);
     }
   else
      PrintFormat("Fallo al abrir el archivo %s, Código del error = %d",InpFileName,GetLastError());
  }

Véase también

Comment, Print, StringFormat