Como Usar o Expert Advisor Demo_FileWriteArray no MetaTrader 5

Mike 2013.04.09 22:14 11 0 0
Anexo

Hoje, vou falar sobre como utilizar o Expert Advisor Demo_FileWriteArray no MetaTrader 5. Este EA é super útil para quem quer registrar os preços de Bid e Ask a cada tick e armazená-los em um arquivo. Vamos entender como isso funciona!

O Expert Advisor captura os valores de Bid e Ask em cada tick e armazena essas informações em um array chamado prices. A cada vigésimo tick, ele escreve esses dados em um arquivo utilizando a função FileWriteArray(). Esses dados serão gravados em um arquivo binário na subpasta do diretório local do terminal. Para encontrar a localização da pasta do terminal, você pode usar a função TerminalInfoString().

PrintFormat("O caminho para a pasta local do terminal: %s\Files\",TerminalInfoString(TERMINAL_DATA_PATH)); 

Quando você remove o Expert Advisor do gráfico, ele escreve os dados não gravados no arquivo e, em seguida, encerra suas atividades.

Código:

//--- parâmetros de entrada
input string InpFileName="data.bin";
input string InpDirectoryName="AlgumaPasta";
//+------------------------------------------------------------------+
//| Estrutura para armazenar dados de preços                                 |
//+------------------------------------------------------------------+
struct prices
  {
   datetime          data; // data
   double            bid;  // Preço Bid
   double            ask;  // Preço Ask
  };
//--- variáveis globais
int    contagem=0;
int    tamanho=20;
string caminho=InpDirectoryName+"//"+InpFileName;
prices arr[];
//+------------------------------------------------------------------+
//| Função de inicialização do Expert                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- alocar memória para o array
   ArrayResize(arr,tamanho);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Função de desinicialização do Expert                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int motivo)
  {
//--- escrever as strings restantes se contagem<n
   WriteData(contagem);
  }
//+------------------------------------------------------------------+
//| Função de tick do Expert                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//--- salvar dados no array
   arr[contagem].data=TimeCurrent();
   arr[contagem].bid=SymbolInfoDouble(Symbol(),SYMBOL_BID);
   arr[contagem].ask=SymbolInfoDouble(Symbol(),SYMBOL_ASK);
//--- mostrar dados atuais
   Print("Data = ",arr[contagem].data," Bid = ",arr[contagem].bid," Ask = ",arr[contagem].ask);
//--- aumentar a contagem
   contagem++;
//--- se o array estiver cheio, escrever dados no arquivo e zerar
   if(contagem==tamanho)
     {
      WriteData(tamanho);
      contagem=0;
     }
  }
//+------------------------------------------------------------------+
//| Escrever n elementos do array no arquivo                        |
//+------------------------------------------------------------------+
void WriteData(const int n)
  {
//--- abrir o arquivo
   ResetLastError();
   int handle=FileOpen(caminho,FILE_READ|FILE_WRITE|FILE_BIN);
   if(handle!=INVALID_HANDLE)
     {
      //--- escrever dados do array no final do arquivo
      FileSeek(handle,0,SEEK_END);
      FileWriteArray(handle,arr,0,n);
      //--- fechar o arquivo
      FileClose(handle);
     }
   else
      Print("Falha ao abrir o arquivo, erro ",GetLastError());
  }
Lista
Comentário 0