FileWrite

Escritura de datos convertidos a texto en un archivo CSV o TXT; el delimitador entre los datos se inserta automáticamente si no es igual a 0. Después de la escritura se agrega al archivo el carácter de fin de línea "\r\n".

Escritura de los datos tal cual, sin conversión, en un archivo BIN.

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

Valor devuelto

Número de bytes escritos.

Nota

Como parámetros solo pueden utilizarse variables de tipos básicos; no se permiten matrices, estructuras ni clases.

Al escribir en CSV o TXT:

Los datos numéricos se convierten al formato de texto (véase la función Print()). Los datos de los tipos double, float, complex y complexf se muestran con 16 dígitos decimales. Según cuál representación sea más compacta, los datos pueden mostrarse en formato tradicional o científico. Los números complejos se muestran en el formato "(<real>,<imag>)". Para mostrar números reales con otra precisión o en un formato explícitamente indicado, use DoubleToString().

Los valores del tipo bool se muestran como cadenas "true" o "false".

Los valores del tipo datetime se muestran en el formato "YYYY.MM.DD HH:MI:SS".

Al escribir en un archivo BIN, los datos se escriben tal cual, sin conversión. Los datos de tipo string se escriben sin el cero final, tal como se implementa en la función FileWriteString().

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