Descargar MetaTrader 5

FileWriteString

Esta función escribe el valor del parámetro del tipo string en un archivo del tipo BIN, CSV o TXT desde la posición actual del puntero de archivos. En el caso de la escritura en los archivos del tipo CSV o TXT: si en la cadena se encuentra el símbolo '\n' (LF) sin el símbolo '\r' (CR) que le precede, entonces antes del símbolo '\n' se añade el correspondiente símbolo '\r'.

uint  FileWriteString(
   int           file_handle,    // manejador del archivo
   const string  text_string,    // cadena para escribir
   int           length=-1       // número de símbolos
   );

Parámetros

file_handle

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

text_string

[in]  Cadena.

length=-1

[in]  Número de símbolos que hay que escribir. Este parámetro es necesario para escribir una cadena en el archivo del tipo BIN. Si el tamaño no está especificado, se escribe la cadena entera sin el 0 final. Si el tamaño especificado es menos que longitud de la cadena, se escribe una parte de la cadena sin 0 final. Si el tamaño especificado es más que longitud de la cadena, entonces la cadena se complementa con la cantidad de ceros correspondiente. Este parámetro se ignora para los archivos CSV y TXT y la cadena se escribe en su totalidad.

Valor devuelto

En caso del éxito la función devuelve el número de bytes escritos. El puntero de archivos se mueve a esta misma cantidad de bytes.

Nota

Hay que tener en cuenta que cuando escribimos en un archivo abierto con la bandera FILE_UNICODE (o sin bandera FILE_ANSI), el número de bytes escritos será doble del número de caracteres de cadena escritos. Cuando escribimos en un archivo abierto con la bandera FILE_ANSI, el número de bytes escritos va a coincidir con el número de símbolos de cadena que han sido escritos.

Ejemplo:

//+------------------------------------------------------------------+
//|                                         Demo_FileWriteString.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 obtener datos desde el terminal
input string             InpSymbolName="EURUSD";           // par de divisas
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // período de tiempo
input int                InpMAPeriod=14;                   // período de la media móvil
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // tipo del precio
input datetime           InpDateStart=D'2013.01.01 00:00'; // fecha de inicio del copiado de datos
//--- parámetros para la escritura de datos en el archivo
input string             InpFileName="RSI.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
   double   rsi_buff[];  // array de los valores del indicador
   datetime date_buff[]; // array de las fechas del indicador
   int      rsi_size=0;  // tamaño de arrays del indicador
//--- tiempo de finalización - actual
   date_finish=TimeCurrent();
//--- obtenemos el manejador del indicador RSI
   ResetLastError();
   int rsi_handle=iRSI(InpSymbolName,InpSymbolPeriod,InpMAPeriod,InpAppliedPrice);
   if(rsi_handle==INVALID_HANDLE)
     {
      //--- fallo al obtener el manejador del indicador
      PrintFormat("Error al 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(rsi_handle)==-1)
      Sleep(10); // retardo para que al indicador le de tiempo a calcular sus valores
//--- copiamos los valores del indicador de un período determinado
   ResetLastError();
   if(CopyBuffer(rsi_handle,0,InpDateStart,date_finish,rsi_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(rsi_handle);
//--- obtenemos el tamaño del búfer
   rsi_size=ArraySize(rsi_buff);
//--- 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|FILE_ANSI);
   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));
      //--- preparamos variables auxiliares
      string str="";
      bool   is_formed=false;
      //--- escribimos las fechas de formación de las zonas de sobrecompra y sobreventa
      for(int i=0;i<rsi_size;i++)
        {
         //--- prueba de los valores del indicador
         if(rsi_buff[i]>=70 || rsi_buff[i]<=30)
           {
            //--- si es el primer valor en esta área
            if(!is_formed)
              {
               //--- añadimos el valor y la fecha
               str=(string)rsi_buff[i]+"\t"+(string)date_buff[i];
               is_formed=true;
              }
            else
               str+="\t"+(string)rsi_buff[i]+"\t"+(string)date_buff[i];
            //--- paso a la siguiente iteración del ciclo
            continue;
           }
         //--- prueba de la bandera
         if(is_formed)
           {
            //--- la cadena está formada, la escribimos en el archivo
            FileWriteString(file_handle,str+"\r\n");
            is_formed=false;
           }
        }
      //--- 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

Tip string, StringFormat


Actualizado: 2015.12.03