Discussão do artigo "Receitas MQL5: Calendário Econômico"

 

Novo artigo Receitas MQL5: Calendário Econômico foi publicado:

Este artigo se trata das funcionalidades programáticas usadas ao trabalhar usando o calendário econômico. Para implementá-las, criaremos uma classe para facilitar o acesso às propriedades do calendário e receber valores de eventos. Como exemplo prático, programaremos um indicador que utiliza dados da CFTC sobre as posições líquidas de especuladores.

Vamos trabalhar usando a estrutura de série temporal no exemplo a seguir. O script Teste_TS.mq5 obtém dados não agrícolas dos EUA de 1º de janeiro de 2016 a 1º de novembro de 2021 e os exibe em um gráfico. Vamos fazer com que haja duas curvas no gráfico - valores reais e previstos. Vamos considerar o período de relatório do evento como uma escala de tempo.

Após executar o script, obteremos, primeiramente, a exibição dos valores da série temporal no log e, em segundo lugar, o desenho do diagrama no gráfico (Fig. 2).


Nonfarm data (2016-2021)

Fig. 2. Dados não agrícolas dos EUA (2016-2021)

Autor: Denis Kirichenko

 

De fato, as funções padrão do Calendar são difíceis de entender. É ótimo que o autor tenha descoberto isso e fornecido exemplos no artigo.

Entretanto, a simplicidade da API de calendário de alto nível proposta não parece óbvia. É difícil.


Provavelmente, deveríamos fazer uma lista de alguns dos cenários mais exigidos do aplicativo Calendário. E tentar implementá-los.

 
fxsaber #:

De fato, as funções padrão do Calendar são difíceis de entender. É ótimo que o autor tenha descoberto isso e fornecido exemplos.

Entretanto, a simplicidade da API de calendário de alto nível proposta não parece óbvia. É difícil.


Provavelmente, deveríamos designar uma lista de alguns cenários mais exigidos do aplicativo Calendário. E tentar implementá-los.

Eu gostaria de ter uma maneira de fornecer cem por cento de garantia de sincronização de notícias com cotações a qualquer momento.

 
fxsaber #:

De fato, as funções padrão do Calendar são difíceis de entender. É ótimo que o autor tenha descoberto isso e fornecido exemplos.

Entretanto, a simplicidade da API de calendário de alto nível proposta não parece óbvia. É difícil.

Provavelmente, deveríamos fazer uma lista de alguns dos cenários mais exigidos do aplicativo Calendário. E tentar implementá-los.

Obrigado por sua opinião :-)

Na minha opinião, alguma dificuldade de percepção se deve ao fato de que a classe CiCalendarInfo lida com três entidades: países, eventos e valores. Se compararmos, por exemplo, com as classes de comércio SB CAccountInfo, CSymbolInfo, etc., há um objeto em cada classe - conta, símbolo, etc. Talvez valesse a pena criar uma hierarquia de classes, por exemplo, a seguinte: classe base - CiCalendarBaseInfo, descendentes - CiCalendarCountryInfo, CiCalendarEventInfo e CiCalendarValueInfo. Mas os três últimos têm seus análogos na forma de estruturas. Por isso, desisti da ideia.

Provavelmente, precisamos definir uma lista de alguns dos cenários mais populares de uso do Calendar. E tentar implementá-los.

Pode haver tantos cenários quanto houver ideias em termos de uso dos dados do calendário. Você pode criar um simples informante sobre o lançamento de eventos, um painel de calendário, um Expert Advisor que negocie ou leve em consideração o horário do lançamento de notícias e assim por diante. É possível obter dados de indicadores macroeconômicos e estudar seu impacto sobre as taxas usando redes neurais. Big data em uma palavra...

A conveniência é que você não precisa ir a outra fonte. Tudo pode ser feito no ambiente MQL5.

 
Denis Kirichenko #:

A conveniência é que você não precisa ir a outra fonte em algum lugar. Tudo pode ser feito no ambiente MQL5.

Deve ser uma grande arte escrever um wrapper intuitivo. Um calendário é difícil de ser usado para tal coisa. Uma vez, eu mesmo publiquei minha versão.

 
fxsaber #:

Deve ser uma grande arte escrever um wrapper intuitivo....

100%.

 
Aqui está o que não está claro no calendário - consultas por change_id. Onde obtê-las?
 
Dmitry Fedoseev #:
Aqui está o que não está claro no calendário - consultas por change_id. Onde posso obtê-las?

Dmitry, aqui está, por exemplo, uma função padrão.

int  CalendarValueLast(
   ulong&               change_id,             // alterar identificador 
   MqlCalendarValue&    values[],              // matriz para obter descrições de valores 
   const string         country_code=NULL,     // nome do código do país de acordo com a ISO 3166-1 alfa-2
   const string         currency=NULL          // nome do código da moeda do país 
   );

Ela mostra que change_id é um parâmetro por referência. Ou seja, o servidor o retorna para nós. Essa é uma constante do servidor. Quando o valor é alterado, isso significa que o estado do banco de dados do calendário foi alterado. Há um exemplo de EA na documentação.

Sim, também podemos enviar o último valor conhecido de change_id. Se o estado do banco de dados mudar, a função CalendarValueLast() retornará o número de novos eventos e substituirá nosso change_id enviado pelo novo.

Документация по MQL5: Экономический календарь / CalendarValueLast
Документация по MQL5: Экономический календарь / CalendarValueLast
  • www.mql5.com
CalendarValueLast - Экономический календарь - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Denis Kirichenko #:

Dimitri, aqui está um exemplo de uma função padrão.

Nele, você pode ver que change_id é um parâmetro por referência. Ou seja, o servidor o retorna para nós. Essa é uma constante do servidor. Quando o valor muda, significa que o estado do banco de dados do calendário foi alterado. Há um exemplo de um EA na documentação.

Isso faz sentido. Muito obrigado.

Encontrei isso na ajuda:

CalendarValueLast.

Se change_id = 0 for passado para a função, a função sempre retornará zero, mas o estado atual da base do Calendar será retornado em change_id.

 
Dmitry Fedoseev #:

Encontrei-o na ajuda:

CalendarValueLast

Se change_id = 0 for passado para a função, a função sempre retornará zero, mas o estado atual da base do Calendar será retornado em change_id.

Sim, isso existe.

Eu tenho essas linhas no exemplo do indicador quando prev_calculated == 0:

//--- apenas para obter um ID de alteração
MqlCalendarValue values[];
gPtrValuesInfo.ValueLastSelectByEvent(gChangeId, values);

E aqui gChangeId=0. Ele é zerado no bloco de inicialização. Embora provavelmente seja mais correto redefinir gChangeId sempre que prev_calculated == 0. E tornar essa variável local.

 
Pelo que entendi, as funções de calendário não funcionam no testador? Como ele deve ser testado? Ao inicializar, baixar uma lista de eventos e depois trabalhar com essas listas? Ou salvar em um arquivo e ler a partir do arquivo.