Gráficos Off-line no Novo MQL4
A atualização MQL4 tem um novo formato para armazenar dados históricos e fornecer a estrutura MqlRates apropriada para o armazenamento conveniente dos valores Time, Open, Low, High, Close e Volume. Por muitos anos, os traders têm desenvolvido seus aplicativos MQL4 que coletam e armazenam seus dados em arquivos HST para gerar gráficos off-line e nós garantimos que todos os arquivos compilados anteriormente (EX4) irão trabalhar no novo terminal MetaTrader 4 da mesma forma que antes.
Todos os Programas Antigos (EX4) Funcionam no Novo Terminal MetaTrader 4
Como já mencionado, nenhum arquivo executável personalizado (EX4) escrito no compilador antigo será eliminado ou alterado quando da atualização do terminal. Isto significa que todos os seus aplicativos em uso e testados, que não foram incluídos na entrega padrão do terminal, serão automaticamente copiados para a nova localização e permanecerão disponíveis ao trabalho.
Gráficos Off-line no Terminal MetaTrader 4
O novo terminal do cliente contém o script PeriodConverter atualizado e que gera arquivos HST no novo formato, se você tem programas baseados no script period_converter antigo e compilados no compilador da versão antiga, eles vão trabalhar normalmente.
Suponha que temos compilado o script period_converter_509.ex4, desenvolvido pela versão mais antiga. Durante a atualização, ele automaticamente é copiado para o novo local de armazenamento e está disponível para ser anexado na janela "Navegador". Como exemplo, vamos utilizar o gráfico EURUSD M1 na criação do histórico personalizado EURUSD M2.
O multiplicador está definido para 3 por padrão, vamos mudá-lo para 2. Também não se esqueça de ativar a chamada DLL para gerar o gráfico off-line EURUSD M2, o qual vamos abrir após a histórico adequado ser formado.
Logo que o script pública o arquivo de dados nas mensagens da aba "Experts" (localizada caixa de ferramenta "Terminal"), vá ao menu "Arquivo" > "Abrir Off-line" e na janela que se abrirá, encontre a linha EURUSD M2, ou seja, os dados elaborados pelo nosso script.
Após o gráfico off-line ser aberto, o script continua trabalhando com EURUSD M1 e processando em tempo real os ticks que estão chegando. Depois de aberto o gráfico off-line no timeframe especificado, o script começa a enviar comandos de atualização para esse gráfico uma vez a cada dois segundos.
Realizar todas as etapas descritas: fazer o download do arquivo executável period_converter_509.ex4 e colocá-lo na pasta <data folder>\MQL4\Scripts.
Atualizando o Script da Versão Antiga ao Novo Compilador
Em algum momento, você pode precisar alterar o código-fonte do seu aplicativo e compilá-lo no novo MetaEditor. Aqui vamos mostrar como considerar as mudanças na linguagem MQL4 através de duas pequenas correções, utilizando o script period_converter_509 como exemplo. Como já afirmamos, podemos compilar o código fonte de period_conveter_509.mq4 sem quaisquer alterações, e ele vai funcionar, mas seria melhor fazer as correções menores no código na nova versão.
Modo de acesso compartilhado deve ser especificado explicitamente ao abrir o arquivo
Como você pode lembrar, no antigo MQL4, todos os arquivos foram abertos no modo de acesso compartilhado. No novo MQL4, as flags FILE_SHARE_WRITE e FILE_SHARE_READ devem ser explicitamente especificadas para uso compartilhado ao abrir arquivos. Se as flags estão ausentes, o arquivo é aberto no modo exclusivo e não pode ser aberto por qualquer outra pessoa, até que seja fechado pelo usuário que o abriu. Isso é exatamente o comportamento que precisamos, uma vez que queremos abrir o arquivo de dados históricos gerado pelo script no terminal MetaTrader 4 como um gráfico off-line. Assim, nós simplesmente adicionamos essas duas flags na chamada da função FileOpenHistory():
// 1ª mudança - adicionar flags de compartilhamento ExtHandle=FileOpenHistory(c_symbol+i_period+".hst",FILE_BIN|FILE_WRITE|FILE_SHARE_WRITE|FILE_SHARE_READ);
Agora, FileFlush() nivela os dados armazenados no disco imediatamente
A função FileFlush() é usada com muita freqüência no nosso velho script, não há necessidade de chamá-la depois de cada gravação dos dados da barra durante a primeira geração do arquivo. Seria o suficiente fazer isto no final, quando todos os dados preparados num símbolo fora do padrão do terminal e/ou timeframe são gravados. O fato é que a função FileFlush() implementada foi alterada na nova versão da linguagem MQL4 para permitir descarga instantânea de dados para a unidade física. A versão antiga usava o sistema write-back de dados, e várias chamadas não conduziam a desaceleração da operação do script.
last_fpos=FileTell(ExtHandle); last_volume=Volume[i]; //--- escrita gerada nos dados da barra FileWriteInteger(ExtHandle, i_time, LONG_VALUE); FileWriteDouble(ExtHandle, d_open, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_low, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_high, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_close, DOUBLE_VALUE); FileWriteDouble(ExtHandle, d_volume, DOUBLE_VALUE); // 2ª mudança - remover o FileFlush a partir daqui //FileFlush(ExtHandle);
Vamos salvar o arquivo obtido após essas duas correções como period_converter_580.mq4 e fazer a compilação, Este arquivo está a disposição, anexado neste artigo. Agora, vamos abrir outro gráfico EURUSD M1 e executar o script com o parâmetro 3, a fim de criar um gráfico fora do padrão do terminal EURUSD M3.
Após o arquivo de dados ser gerado, abriremos como um gráfico off-line URUSD M3
Como esperado, após o gráfico off-line ser aberto, o script period_converter_580 foi reconhecido e enviado uma mensagem na aba Experts, na caixa de ferrametna "Terminal". De agora em diante,o script começa a enviar comandos de atualização ao gráfico off-line não mais do que uma vez a cada dois segundos,
Novo Script PeriodConverter
A entrega padrão da nova versão do terminal do cliente MetaTrader 4 também contém o script PeriodConverter que executa as mesmas tarefas do seu antecessor, No entanto tem algumas pequenas diferenças em relação ao antigo, uma vez que foi desenvolvido usando um novo estilo de código fonte, além do que também apresenta as novas possibilidades da linguagem MQL4.
A diferença mais importante da versão anterior é o uso da nova estrutura MqlRates, esta nova estrutura foi desenvolvido para trabalhar com dados da barra de preço no novo formato:
if(time0>=rate.time+periodseconds || i==0) { if(i==0 && time0<rate.time+periodseconds) { rate.tick_volume+=(long)Volume[0]; if(rate.low>Low[0]) rate.low=Low[0]; if(rate.high<High[0]) rate.high=High[0]; rate.close=Close[0]; } last_fpos=FileTell(ExtHandle); last_volume=(long)Volume[i]; FileWriteStruct(ExtHandle,rate); cnt++; if(time0>=rate.time+periodseconds) { rate.time=time0/periodseconds; rate.time*=periodseconds; rate.open=Open[i]; rate.low=Low[i]; rate.high=High[i]; rate.close=Close[i]; rate.tick_volume=last_volume; } }
Os desenvolvedores MQL4, que usam ativamente gráficos off-line, vão gostar da praticidade da nova abordagem.
Estrutura para armazenar informações sobre preços, volumes e spread
struct MqlRates { datetime time; // Período da hora de início double open; // Abertura de preço double high; // Máxima do preço ao período double low; // Mínima do preço ao período double close; // Fechamento do preço long tick_volume; // Volume de tick int spread; // spread long real_volume; // Volume de negociação };
Vamos compilar o novo script PeriodConverter e anexá-lo no novo gráfico EURUSD M1, tal como os anteriores.
Neste momento, estamos preparando os dados ao gráfico off-line EURUSD M4. Assim, o multiplicador é igual a 4.
Após os dados terem sido preparados, estamos abrindo o gráfico off-line da mesma maneira como já fizemos acima.
Conclusão
- Os gráficos off-line no novo terminal funcionam da mesma forma que antes. Ambos os formatos, novos e anteriores, dos dados históricos são suportados.
- Os antigos arquivos executáveis (EX4) preservam a sua funcionalidade no novo terminal.
- Comece a desenvolver novos aplicativoss MQL4 usando todos os novos recursos da linguagem e revele todo o seu potencial.
Artigos relacionados:
- Testando os Expert Advisors nos Timeframe Fora de Padrão do Terminal
- Princípios da Transformação de Tempo em Negociação Intraday
- Gráfico Equivolume Revisado
- Barras sintéticas - Uma nova Dimensão para Exibição de Informações Gráficas nos Preços
- Gráficos "Livre-de-Furos"
Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1387
- 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