FileWrite

Grava dados convertidos em texto em um arquivo CSV ou TXT; o delimitador entre os dados é inserido automaticamente se não for igual a 0. Após a gravação, o caractere de fim de linha "\r\n" é adicionado ao arquivo.

Grava dados como estão, sem conversão, em um arquivo BIN.

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 no arquivo não deve exceder 256.

Valor do Retorno

Número de bytes escritos.

Observação

Somente variáveis de tipos básicos podem ser usadas como parâmetros; arrays, estruturas e classes não são permitidos.

Ao gravar em CSV ou TXT:

Os dados numéricos são convertidos para o formato de texto (veja a função Print()). Os dados dos tipos double, float, complex e complexf são exibidos com precisão de 16 casas decimais. Dependendo de qual representação for mais compacta, os dados podem ser exibidos no formato tradicional ou científico. Números complexos são exibidos no formato "(<real>,<imag>)". Para exibir números reais com precisão diferente ou em um formato explicitamente especificado, use DoubleToString().

Valores do tipo bool são exibidos como as strings "true" ou "false".

Valores do tipo datetime são exibidos no formato "YYYY.MM.DD HH:MI:SS".

Ao gravar em um arquivo BIN, os dados são escritos como estão, sem conversão. Dados do tipo string são gravados sem o zero de terminação, como é implementado na função FileWriteString().

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