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.
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.
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.
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.
- www.mql5.com
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.
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.
- 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
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).
Fig. 2. Dados não agrícolas dos EUA (2016-2021)
Autor: Denis Kirichenko