Trabalhando com arquivos. Um exemplo de visualização de eventos de mercado importantes

Andrey Opeyda | 18 fevereiro, 2016


Todo trader sabe que é bastante arriscado abrir uma posição usando apenas a análise técnica (TA). Seria mais adequado abrir a posição usando tanto a análise fundamental quanto a técnica. Muito frequentemente, traders que trabalham com TA usam um calendário de eventos para considerar a possível volatilidade do mercado e não expor as suas posições a riscos desnecessários. Seria bastante conveniente se todos os eventos chave do dia de negociações fossem exibidos no gráfico de preços. Por exemplo:


15.05.2006;9:00; Produção industrial M.M ;Japão;Março;3,40%;1,00%;
15.05.2006;16:30; Nova Iorque Pesquisa do FED ;EUA;Maio;15,8;15;
15.05.2006;17:00; Fluxo de capital Netto ;EUA;Março;86,9 bilhões;80,0 bilhões;
16.05.2006;12:30; HICP Y.Y ;Reino Unido;Abril;1,80%;2,00%;
16.05.2006;13:00; Sentimento econômico ZEW ;Alemanha;Maio;62,7;65;
16.05.2006;16:00; Relatório de lojas Wal-Mart;EUA;1 trimestre.;-0,61;-;
16.05.2006;16:30; PPI M.M ;EUA;Abril;0,50%;0,70%;
16.05.2006;16:30; PPI ex. Hipoteca e energia M.M;EUA;Abril;0,10%;0,20%;
16.05.2006;16:30; Inícios de habitação ;EUA;Abril;1,960 milhão;1,960 milhão;
16.05.2006;16:30; Licenças de construção ;EUA;Abril;2,094 milhões;2,050 milhões;
16.05.2006;17:15; Produção industrial M.M;EUA;Abril;0,60%;0,40%;
16.05.2006;17:15; Utilização da capacidade ;EUA;Abril;81,30%;81,50%;
17.05.2006;8:30; Produção industrial (rev.) M.M ;Japão;Março;0,20%;0,20%;
17.05.2006;12:30; Desemprego M.M ;Reino Unido;Abril;+12.600;+5.000;
17.05.2006;12:30; Minutos BoE 4,05 ;Reino Unido;-;-;-;
17.05.2006;13:00; Produção industrial M.M; Zona do Euro;Março;0,00%;-0,20%;
17.05.2006;13:00; Produção industrial Y.Y ;Zona do Euro;Março;3,20%;2,80%;
17.05.2006;13:00; HICP (rev.) Y.Y ;Zona do Euro;Abril;2,40%;2,40%;
17.05.2006;16:30; CPI M.M;EUA;Abril;0,40%;0,50%;
17.05.2006;16:30; CPI ex. Hipoteca e energia M.M ;EUA;Abril;0,30%;0,20%;
18.05.2006;12:30; Vendas do varejo M.M ;Reino Unido;Abril;0,70%;0,20%;
18.05.2006;12:30; Vendas do varejo Y.Y;Reino Unido;Abril;2,60%;2,60%;
18.05.2006;16:30; Pedidos iniciais de desemprego ;EUA;8-14,05;324.000;320.000;
18.05.2006;17:30; Presidente do FED Bernanke discursa ;EUA;-;-;-;
18.05.2006;8:00; Principais indicadores econômicos M.M ;EUA;Abril;-0,10%;0,10%;
18.05.2006;20:00; Pesquisa do FED na Filadélfia ;EUA;Maio;13,2;12;
19.05.2006;1:30; Greenspen discursa;EUA;-;-;-;
19.05.2006;3:50; Produto interno bruto (PIB) Q.Q ;Japão;1 trimestre.;1,30%;0,20%;
19.05.2006;8:00; Reunião do Banco do Japão ;Japão;-;-;-;
19.05.2006;13:00; Conta atual ;Zona do Euro;Março;-4,5 bilhões;-3,0 bilhões;


Para ler estes dados a partir do arquivo, é necessário primeiro conectar-se a ele, ou seja, abri-lo para leitura. Há um operador usado para este fim no MQL4:

int FileOpen( string filename, int mode, int delimiter=';')


cujos parâmetros são: nome do arquivo, tipo (um ARQUIVO-BIN binário ou um ARQUIVO_CSV orientado a linhas com separadores), método de acesso (escrever ARQUIVO_LER ou ler ARQUIVO_ESCREVER), e caractere delimitador entre os dados de linha. Caso o arquivo for aberto com sucesso, será atribuído ao identificador um valor único, ou então será atribuído um valor de -1 ao identificador de arquivo. Para refinar os dados de erro, pode-se usar a função GetLastError(). A variável "nome de arquivo" é colocada no cabeçalho do script.

#property show_inputs
extern string FileName = "week.txt";
 
…
 
   int handle;
   handle=FileOpen(FileName,FILE_CSV|FILE_READ,';');
   if(handle<1)
    {
     Print("File was not found: ", GetLastError());
     return(false);
    }


É assim que nos conectamos ao arquivo. O próximo passo é a leitura de todos os dados. Nós iremos ler as linhas, e então convertê-las nos tipos necessários. Em seguida nós tentaremos escrever o filtro de eventos exibido. Para fazer isso, nós precisamos apenas colocar as variáveis no cabeçalho do script. As variáveis vão mostrar se o evento deste país deve ser exibido no gráfico de preços.

    while(!FileIsEnding(handle))
   {
    string sDate=FileReadString(handle); // Date
    string sTime=FileReadString(handle); // Time
    string sCountry=FileReadString(handle); // Country
    string sPeriod=FileReadString(handle); // Period
    string sDescription=FileReadString(handle); // Description
    string sPrev=FileReadString(handle); // Prev    
    string sForecast=FileReadString(handle); // Expected 
    string sCurrent=FileReadString(handle); // Current value
    
    FileReadString(handle); // null
    
    
    Print(
      sDate+" "
      ,sTime+" "
      ,sCountry+" "
      ,sPeriod+" "
      ,sDescription+" "
      ,sForecast+" "
      ,sCurrent+" ");
      
    i++;
    datetime dt = StrToTime(sDate+" "+sTime);
    
         color c = Red;
 
         if (sCountry == "Japan") c = Yellow;
         if (sCountry == "USA") c = Brown;
         if (sCountry == "Germany") c = Green;
         if (sCountry == "Eurozone") c = Blue;
         if (sCountry == "U.K.") c = Orange;
         if (sCountry == "Canada") c = Gray;
         if (sCountry == "Australia") c = DarkViolet;
         if (sCountry == "Sweden") c = FireBrick;
         if (sCountry == "South African Republic")
             c = DodgerBlue;
         if (sCountry == "Denmark") c = RosyBrown;
         if (sCountry == "Norway") c = HotPink;
         
 
 
         if ((sCountry == "Japan") && (!Japan)) continue;
         if ((sCountry == "USA") && (!USA)) continue;
         if ((sCountry == "Germany") && (!Germany)) continue;
         if ((sCountry == "Eurozone") && (!ES)) continue;
         if ((sCountry == "U.K.") && (!GB)) continue;
         if ((sCountry == "Canada") && (!Canada)) continue;
         if ((sCountry == "Australia") && (!Australia)) 
              continue;
         if ((sCountry == "Sweden") && (!Shweden)) continue;
         if ((sCountry == "South African Republic")&& (!UAR))
               continue;
         if ((sCountry == "Denmark") && (!Dania)) continue;
         if ((sCountry == "Norway") && (!Norvegia)) continue;
         
 
            
            
          if (DisplayText)
          {
          ObjectCreate("x"+i, OBJ_TEXT, 0, dt, Close[0]);
          ObjectSet("x"+i, OBJPROP_COLOR, c);
          ObjectSetText("x"+i, 
            sDescription + " "
            + sCountry + " "
            + sPeriod + " "
            + sCurrent + " "
            + sForecast,
            8);          
          ObjectSet("x"+i, OBJPROP_ANGLE, 90);
          }
          
                   
          ObjectCreate(sCountry+" "+i, OBJ_VLINE, 0, dt,
                       Close[0]);
          ObjectSet(sCountry+" "+i, OBJPROP_COLOR, c);
          ObjectSet(sCountry+" "+i, OBJPROP_STYLE, STYLE_DOT);
          ObjectSet(sCountry+" "+i, OBJPROP_BACK, true);
          ObjectSetText(sCountry+" "+i,
            sDescription + " · "
            + sPeriod + " · "
            + sCurrent + " · "
            + sForecast,
            8);
 
   }

Assim você sempre poderá ver os próximos eventos e o seu impacto no mercado. O código pronto do script e os arquivos de dados estão anexados a este artigo. Por favor, não se esqueça que os script devem ser colocados no diretório Experts/Scripts, e os arquivos de dados no diretório Experts/Arquivos. O formato das datas (AAAA.MM.DD HH:MM) e os delimitadores não devem ser esquecidos. O trabalho do script é ilustrado abaixo.









Trabalhar com arquivos no MQL4 oferece aos usuários um leque de oportunidades: tanto a conexão do terminal a fontes de dados externas quanto a simplificação e otimização do trabalho com o terminal de negociação. Exemplos são tanto o suporte de logs quanto a possibilidade de exibição de níveis de suporte/resistência obtendo dados diretamente da internet. Isso significa que o usuário não tem opções restritas na escolha dos métodos de trabalho com os arquivos. A abertura automática e o gerenciamento de posições deve contribuir para a diminuição das preocupações do trader e, em consequência, permitir que eles analisem mais fatores que influenciam as transações. De fato, este é o objetivo do MQL4.

Abaixo estão todas as funções do MQL4 usadas no trabalho com arquivos. Mais detalhes estão disponíveis na documentação do MQL4.

FileClose 
FileDelete 
FileFlush 
FileIsEnding 
FileIsLineEnding 
FileOpen 
FileOpenHistory 
FileReadArray 
FileReadDouble 
FileReadInteger 
FileReadNumber 
FileReadString 
FileSeek 
FileSize 
FileTell 
FileWrite 
FileWriteArray 
FileWriteDouble 
FileWriteInteger 
FileWriteString