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()); }
Comentário 0