Trabalhando com arquivos. Um exemplo de visualização de eventos de mercado importantes
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
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1382
- Aplicativos de negociação gratuitos
- 8 000+ sinais para cópia
- Notícias econômicas para análise dos mercados financeiros
Você concorda com a política do site e com os termos de uso