FileWrite

A função destina-se a gravação de dados em um arquivo CSV, delimitador sendo inserido automaticamente a menos que seja igual a 0. Depois de escrever dentro do arquivo, o caractere de final de linha "\r\n" será adicionado.

uint  FileWrite(
   int  file_handle,   // manipular arquivo
   ...                 // Lista de parâmetros gravados
   );

Parâmetros

file_handle

[in]  Descritor de arquivo retornado pelo FileOpen().

...

[in] A lista de parâmetros separados por vírgulas, para escrever no arquivo. O número de parâmetros escritos pode ser de até 63.

Valor do Retorno

Número de bytes escritos.

Observação

Os números serão convertidos dentro de um texto na saída (veja a print() função). Dados do tipo double são emitidos com a precisão de 16 dígitos depois do ponto decimal, e os dados podem ser exibidos quer no formato tradicional ou no formato científico - dependendo de qual formato será o mais compacto. Os dados do tipo float são mostrados com cinco dígitos depois do ponto decimal. Para emitir números reais com precisão diferente ou em um formato claramente especificado, use DoubleToString().

Números do tipo bool são exibidos como "true" ou "false" strings. Números do tipo datetime são apresentados como "YYYY.MM.DD HH:MI:SS".

Exemplo:

//+------------------------------------------------------------------+
//|                                               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"
//--- mostrar a janela de parâmetros de entrada quando do lançamento do script
#property script_show_inputs
//--- parâmetros para a recepção de dados a partir do terminal
input string             InpSymbolName="EURUSD";           // par de moedas
input ENUM_TIMEFRAMES    InpSymbolPeriod=PERIOD_H1;        // período de tempo
input int                InpFastEMAPeriod=12;              // período rápido EMA
input int                InpSlowEMAPeriod=26;              // período lento EMA
input int                InpSignalPeriod=9;                // diferença de período médio
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_CLOSE;      // tipo de preço
input datetime           InpDateStart=D'2012.01.01 00:00'; // data de início da cópia dos dados
//--- parâmetros para a gravação de dados ao arquivo
input string             InpFileName="MACD.csv";  // nome do arquivo
input string             InpDirectoryName="Data"// nome do diretório
//+------------------------------------------------------------------+
//| Programa Script da função start (iniciar)                        |
//+------------------------------------------------------------------+
void OnStart()
  {
   datetime date_finish; // copiando dados com a data final
   bool     sign_buff[]; // sinal array (verdadeiro - comprar, falso - vender)
   datetime time_buff[]; // array de chegada de tempo de sinais
   int      sign_size=0; // tamanho de array
   double   macd_buff[]; // array do valor do indicador
   datetime date_buff[]; // array da data do indicador
   int      macd_size=0; // tamanho de arrays de indicadores
//--- tempo final é o tempo corrente
   date_finish=TimeCurrent();
//--- receber a manipulação do indicador MACD
   ResetLastError();
   int macd_handle=iMACD(InpSymbolName,InpSymbolPeriod,InpFastEMAPeriod,InpSlowEMAPeriod,InpSignalPeriod,InpAppliedPrice);
   if(macd_handle==INVALID_HANDLE)
     {
      //--- falha para receber a manipulação do indicador
      PrintFormat("Erro quando recebe a manipulação do indicador. Código de erro = %d",GetLastError());
      return;
     }
//--- estando no loop até que o indicador calcula todos os seus valores
   while(BarsCalculated(macd_handle)==-1)
      Sleep(10); // pausa para permitir que o indicador calcule os respectivos valores
//--- copiar os valores do indicador para um determinado período de tempo
   ResetLastError();
   if(CopyBuffer(macd_handle,0,InpDateStart,date_finish,macd_buff)==-1)
     {
      PrintFormat("Falha para copiar valores do indicador. Código de erro = %d",GetLastError());
      return;
     }
//--- copiar o tempo apropriado para os valores do indicador
   ResetLastError();
   if(CopyTime(InpSymbolName,InpSymbolPeriod,InpDateStart,date_finish,date_buff)==-1)
     {
      PrintFormat("Falha para copiar valores de tempo. Código de erro = %d",GetLastError());
      return;
     }
//--- libera a memória ocupada pelo indicador
   IndicatorRelease(macd_handle);
//--- receber o tamanho do buffer
   macd_size=ArraySize(macd_buff);
//--- analisar os dados e salva os sinais do indicador para arrays
   ArrayResize(sign_buff,macd_size-1);
   ArrayResize(time_buff,macd_size-1);
   for(int i=1;i<macd_size;i++)
     {
      //--- sinal comprar
      if(macd_buff[i-1]<0 && macd_buff[i]>=0)
        {
         sign_buff[sign_size]=true;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
      //--- sinal vender
      if(macd_buff[i-1]>0 && macd_buff[i]<=0)
        {
         sign_buff[sign_size]=false;
         time_buff[sign_size]=date_buff[i];
         sign_size++;
        }
     }
//--- abrir o arquivo para escrever os valores do indicador (se o arquivo estiver ausente, ele será criado automaticamente)
   ResetLastError();
   int file_handle=FileOpen(InpDirectoryName+"//"+InpFileName,FILE_READ|FILE_WRITE|FILE_CSV);
   if(file_handle!=INVALID_HANDLE)
     {
      PrintFormat("%s arquivo está disponível para ser escrito",InpFileName);
      PrintFormat("Caminho do arquivo: %s\\Files\\",TerminalInfoString(TERMINAL_DATA_PATH));
      //--- primeiro, escreva o número de sinais
      FileWrite(file_handle,sign_size);
      //--- escrever o tempo e os valores de sinais para o arquivo
      for(int i=0;i<sign_size;i++)
         FileWrite(file_handle,time_buff[i],sign_buff[i]);
      //--- fechar o arquivo
      FileClose(file_handle);
      PrintFormat("Os dados são escritos, %s arquivo esta fechado",InpFileName);
     }
   else
      PrintFormat("Falha para abrir %s arquivo, Código de erro = %d",InpFileName,GetLastError());
  }

Também Veja

Comment, Print, StringFormat