English Русский 中文 Español Deutsch 日本語
Gráficos Off-line no Novo MQL4

Gráficos Off-line no Novo MQL4

MetaTrader 4Exemplos | 5 outubro 2015, 09:24
2 673 0
MetaQuotes
MetaQuotes

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.


Assim, o velho script compilado pela versão mais antiga opera com sucesso no novo terminal, ativando toda a funcionalidade construída.

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,


Assim, nós testamos o funcionamento com o formato de armazenamento de dados históricos anteriores e nos certificamos de que tudo funciona como antes.


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.


Como você pode ver, todas as três versões do script estão trabalhando de forma semelhante. Todos os traders que trabalham com gráficos de símbolos personalizados ou com timeframes fora do padrão do terminal poderão usar a nova versão do terminal MetaTrader 4, bem como melhorar os códigos fonte existentes e desenvolver novos, sem alterações significativas ou dificuldades na mudança à nova versão.


Conclusão

  1. 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.
  2. Os antigos arquivos executáveis (EX4) preservam a sua funcionalidade no novo terminal.
  3. Comece a desenvolver novos aplicativoss MQL4 usando todos os novos recursos da linguagem e revele todo o seu potencial.

Artigos relacionados:

  1. Testando os Expert Advisors nos Timeframe Fora de Padrão do Terminal
  2. Princípios da Transformação de Tempo em Negociação Intraday
  3. Gráfico Equivolume Revisado
  4. Barras sintéticas - Uma nova Dimensão para Exibição de Informações Gráficas nos Preços
  5. Gráficos "Livre-de-Furos"

Traduzido do russo pela MetaQuotes Ltd.
Artigo original: https://www.mql5.com/ru/articles/1387

Estrutura de Dados no Terminal MetaTrader 4 Versão 600 e Superior Estrutura de Dados no Terminal MetaTrader 4 Versão 600 e Superior
MetaTarder 4 Versão 600 apresenta a nova estrutura e localização dos arquivos no terminal do cliente. Os aplicativos MQL4 são colocados em diretórios separados de acordo com o tipo de programa (Expert Advisors, indicadores ou scripts). Na maioria dos casos, os dados do terminal estão agora armazenados numa pasta especial separada do local da instalação do terminal. Neste artigo vamos descrever em detalhes como os dados são transferidos, bem como as razões para a introdução do novo sistema de armazenamento.
Teste e Otimização de Expert Advisors Teste e Otimização de Expert Advisors
O artigo fornece uma descrição detalhada do processo de teste e otimização de Expert Advisors no Testador de Estratégia MetaTrader 4, a importância de tais informações e a necessidade desta publicação não pode ser subestimada. Um monte de usuários que iniciam com a plataforma de negociação MetaTrader 4 tem apenas uma idéia muito vaga do como e o que precisa ser feito quando se trabalha com os Expert Advisors. O artigo proposto dá respostas simples e claras para todas essas perguntas e fornece uma abordagem mais profissional para lidar com esses problemas usando um exemplo específico.
Atualização do Terminal MetaTrader 4 Versão 600 e Superior Atualização do Terminal MetaTrader 4 Versão 600 e Superior
A nova versão do terminal MetaTrader 4 apresenta ao usuário uma estrutura atualizada do armazenamento de dados. Nas versões anteriores todos os programas, templates, perfis, etc, foram armazenados diretamente na pasta de instalação do terminal. Agora todos os dados necessários para um determinado usuário são armazenados numa pasta separada chamada Pasta de Dados. Leia este artigo para encontrar respostas às perguntas mais frequentes.
Lite_EXPERT2.mqh: Exemplos da implementação do Expert Advisor Lite_EXPERT2.mqh: Exemplos da implementação do Expert Advisor
Neste artigo, o autor continua a familiarizar os leitores com as funções do Lite_EXPERT2.mqh, usando exemplos reais da aplicação do Expert Advisor. O artigo lida com a idéia de usar ordens pendentes flutuantes e ordens pendentes que variam dinamicamente de negócio para negócio, determinados com base nos valores do indicador Average True Range (ATR).