Calendário econômico. Perguntas, discussões.

 

Quero entender como funciona o calendário econômico da MQL5, mas algo não está se movendo muito rápido. Passei a maior parte de ontem e o início de hoje, mas ainda não entendo porque o CalendarValueHistory não retorna todos os eventos. Ou talvez eu os confunda, esses eventos um pouco...

Ontem eu estava recebendo 4 eventos às xx:45 como escrito no calendário. Estou escrevendo o horário do evento como "xx" porque o tempo recebido não é o mesmo que o da mesa. Mas pelo menos se podia entender que isto se deve à diferença entre o tempo especificado e o tempo do terminal ou servidor de onde os dados foram obtidos. Mas agora eu tenho apenas 3 eventos com tempo :45 e não consigo entender por quê.

E pergunta aos desenvolvedores: Por que na primeira data da matriz 2019.07.25 00:00 e as próximas filas são ordenadas em ordem ascendente. Veja a lista resultante.

2019.07.24 10:12:22.297 !00 (EURUSD,H1)        [id] [event_id]              [time]            [period] [revision]       [actual_value]         [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 0]  96782   76020005 2019.07.25 00:00:00 1970.01.01 00:00:00          0 -9223372036854775808 -9223372036854775808 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 1]  96840   76030003 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808             88500000 -9223372036854775808             91600000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 2] 100501  484020006 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808                10000 -9223372036854775808               110000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [ 3] 100502  484020007 2019.07.24 11:00:00 2019.07.01 00:00:00          0 -9223372036854775808               160000 -9223372036854775808               130000             0          0
// Пропущено, удалено вручную.
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [59]  93627  410010001 2019.07.25 21:00:00 2019.07.01 00:00:00          0 -9223372036854775808             97500000 -9223372036854775808             97000000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [60]  87322  392030006 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808               900000 -9223372036854775808               900000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [61]  87323  392030004 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808              1100000 -9223372036854775808              1100000             0          0
2019.07.24 10:12:22.297 !00 (EURUSD,H1) [62]  87324  392030005 2019.07.25 23:30:00 2019.07.01 00:00:00          0 -9223372036854775808               800000 -9223372036854775808               800000             0          0
 

Algumas perguntas caíram por terra. O tempo foi resolvido. Acabou sendo simples. A hora é GMT, e o site foi representado por GMT+3, daí todos os meus mal-entendidos somados.

Aqui está o primeiro resultado: Descrição do evento recebido, primeira linha da foto


2019.07.24 11:29:03.972 !00 (EURUSD,H1) время и дата события - 2019.07.24 13:45:00
2019.07.24 11:29:03.972 !00 (EURUSD,H1) идентификатор события - 840500001
2019.07.24 11:29:03.972 !00 (EURUSD,H1) тип события из перечисления ENUM_CALENDAR_EVENT_TYPE - CALENDAR_TYPE_INDICATOR
2019.07.24 11:29:03.972 !00 (EURUSD,H1) сектор, к которому относится событие - CALENDAR_SECTOR_BUSINESS
2019.07.24 11:29:03.972 !00 (EURUSD,H1) частота (периодичность) события - CALENDAR_FREQUENCY_MONTH
2019.07.24 11:29:03.972 !00 (EURUSD,H1) режим времени события - CALENDAR_TIMEMODE_DATETIME
2019.07.24 11:29:03.972 !00 (EURUSD,H1) идентификатор страны - 840
2019.07.24 11:29:03.972 !00 (EURUSD,H1) текстовое имя страны (в текущей кодировке терминала) - Соединенные Штаты
2019.07.24 11:29:03.972 !00 (EURUSD,H1) единица измерения значения экономического индикатора - CALENDAR_UNIT_NONE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) важность события - CALENDAR_IMPORTANCE_MODERATE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) множитель значения экономического индикатора - CALENDAR_MULTIPLIER_NONE
2019.07.24 11:29:03.972 !00 (EURUSD,H1) количество знаков после запятой - 1
2019.07.24 11:29:03.972 !00 (EURUSD,H1) URL источника, где публикуется событие - https://www.markiteconomics.com
2019.07.24 11:29:03.972 !00 (EURUSD,H1) код события - markit-manufacturing-pmi
2019.07.24 11:29:03.972 !00 (EURUSD,H1) текстовое имя события на языке терминала (в текущей кодировке терминала) - Индекс менеджеров по закупкам в производственном секторе от Markit
 

Pergunta para os desenvolvedores:

Por que este código da documentação, com pequenas modificações

void OnStart()
{
   MqlCalendarValue values[]; 

//--- запросим историю событий от текущего времени до конца сегодняшнего дня.
   if(CalendarValueHistory(values,TimeCurrent(),iTime(_Symbol, PERIOD_D1, 0)+PeriodSeconds(PERIOD_D1))) 
     { 
      PrintFormat("Получены значения событий по country_code=%s: %d", ArraySize(values)); 
//--- выведем значения событий в Журнал 
      ArrayPrint(values);
      
     } 
   else 
     { 
      PrintFormat("Ошибка! Не удалось получить события по стране country_code=%s"); 
      PrintFormat("Код ошибки: %d",GetLastError()); 
     } 
//---
}

mostra que o tamanho da matriz de valores é zero, mas mesmo assim imprime tudo no calendário. Ou seja, todos os eventos são recebidos.

2019.07.24 15:20:33.131 !00 (EURUSD,H1) Получены значения событий по country_code=(non-string passed): 0
2019.07.24 15:20:33.131 !00 (EURUSD,H1)      [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value]     [forecast_value] [impact_type] [reserved]
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [0] 97265   76020013 2019.07.24 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -1227000 -9223372036854775808             -2405000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [1] 87842  840220012 2019.07.24 17:00:00 1970.01.01 00:00:00          0 -9223372036854775808      1791000 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [2] 93625  410010011 2019.07.24 23:00:00 2019.04.01 00:00:00          1 -9223372036854775808      -400000 -9223372036854775808               400000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [3] 93626  410010012 2019.07.24 23:00:00 2019.04.01 00:00:00          1 -9223372036854775808      1700000 -9223372036854775808              2900000             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [4] 87394  392060016 2019.07.24 23:50:00 2019.06.01 00:00:00          0 -9223372036854775808       800000 -9223372036854775808                    0             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [5] 97012  392070003 2019.07.24 23:50:00 2019.07.20 00:00:00          0 -9223372036854775808    950000000 -9223372036854775808 -9223372036854775808             0          0
2019.07.24 15:20:33.131 !00 (EURUSD,H1) [6] 97013  392070004 2019.07.24 23:50:00 2019.07.20 00:00:00          0 -9223372036854775808    -93100000 -9223372036854775808 -9223372036854775808             0          0

Onde, o que não tem tempo para trabalhar?

 
Na linha de formato %s é supérfluo
 
Renat Fatkhullin:
No formato da cadeia %s é redundante

Sim, obrigado. Eu já resolvi isso. Eu fiz asneira ao corrigir o exemplo da documentação.

 

@Renat Fatkhullin Renat, podemos esperar que um dia uma função como TimeGMTOffset() seja feita, apenas pelo tempo do servidor e não pelo tempo local? Porque as funções do calendário econômico utilizam a hora GMT e a hora local muitas vezes não coincide com a hora do servidor. Portanto, quando tenho tempo para notícias, tenho que traduzi-lo para o tempo terminal. Entendo que pode haver problemas ao chamar esta função no fim de semana, mas ela pode detectar algum tipo de erro, que esta função não está disponível neste momento, ou o que quer que seja.

Até agora eu fiz assim: no OnInit() a diferença de tempo é calculada e escrita em variável global. Mas eu não gosto muito disso. Na minha opinião, seria melhor chamar a função integrada e ajustar o tempo de notícias ao tempo do servidor. Especialmente o terminal provavelmente tem tempo de servidor disponível também nos fins de semana.

 
Alexey Viktorov:

@Renat Fatkhullin Renat, podemos esperar que um dia uma função como TimeGMTOffset() seja feita, apenas pelo tempo do servidor e não pelo tempo local? Porque as funções do calendário econômico utilizam a hora GMT e a hora local muitas vezes não coincide com a hora do servidor. Portanto, quando tenho tempo para notícias, preciso traduzi-lo para o tempo terminal. Entendo que pode haver problemas ao chamar esta função nos fins de semana, mas é possível determinar algum tipo de erro, que esta função não está disponível no momento ou algo mais.

Até agora eu o fiz: em OnInit() a diferença de tempo é calculada e escrita em variável global. Mas eu não gosto muito disso. Na minha opinião, seria melhor chamar a função integrada e ajustar o tempo de notícias ao tempo do servidor. Especialmente o terminal provavelmente tem tempo de servidor disponível também nos fins de semana.

É claro que está disponível, isto já foi solicitado.

 
Vitaly Muzichenko:

É claro que está disponível, isto já foi solicitado.

Vitaly, qualquer pedido precisa ser justificado. Espero ter fornecido argumentos suficientes para a necessidade de tal função. Agora depende da carga de trabalho dos programadores da empresa e de como os argumentos são compreendidos e aceitos. Espero que sim.

 

Que informações podem ser extraídas do calendário: (Valores que são usados pelo software e que são de pouca informação para o ser humano não estão listados aqui)

  • Nome do país
  • Moeda dos países
  • tipo de evento

Evento (comício, discurso, etc.)

Indicador

Férias


  • Setor ao qual o evento pertence

Mercado, bolsa de valores

Produto interno bruto (PIB)

Mercado de trabalho

Preços

Dinheiro

Comércio

Governo

Negócios

Consumo

Moradia

Impostos

Feriados


  • nome de texto do evento no idioma do terminal (na codificação atual do terminal)
  • hora e data do evento
  • período do relatório do evento
  • valor atual do parâmetro
  • valor anterior do parâmetro
  • valor anterior revisto do indicador
  • valor previsto do indicador
  • impacto potencial sobre a taxa de câmbio

Nenhum impacto indicado

Impacto positivo

Impacto negativo


Infelizmente, exceto pela proibição de abrir posições antes dos comunicados à imprensa, não encontrei outras soluções. Quero descobrir quais deles podem ser usados e como reagir a eles.

Como eu entendo, os valores destacados são muito importantes para decidir como reagir às notícias, mas não entendo como. Convido à discussão.

 
Alexey Viktorov:

Que informações podem ser obtidas do calendário: (Valores que são usados pelo programa e que são de pouca informação para os seres humanos não estão listados aqui)

  • Nome do país
  • Moeda dos países
  • tipo de evento

Evento (comício, discurso, etc.)

Indicador

Férias


  • Setor ao qual o evento pertence

Mercado, bolsa de valores

Produto interno bruto (PIB)

Mercado de trabalho

Preços

Dinheiro

Comércio

Governo

Negócios

Consumo

Moradia

Impostos

Feriados


  • nome de texto do evento no idioma do terminal (na codificação atual do terminal)
  • hora e data do evento
  • período do relatório do evento
  • valor atual do parâmetro
  • valor anterior do parâmetro
  • valor anterior revisto do indicador
  • valor previsto de um indicador
  • impacto potencial sobre a taxa de câmbio

Nenhum impacto indicado

Impacto positivo

Impacto negativo


Infelizmente, exceto pela proibição de abrir posições antes dos comunicados à imprensa, não encontrei outras soluções. Quero descobrir quais deles podem ser usados e como reagir a eles.

Como eu entendo, os valores destacados são muito importantes para decidir como reagir às notícias, mas não entendo como. Convido à discussão.

Aqui está a minha variante do indicador de notícias. O terminal fornece informações sobre o tempo de divulgação de notícias por moedas, o grau de importância também é selecionado. A informação é mostrada como uma linha vertical na tabela de preços. Na subjanela você pode ver o histograma dos últimos valores dos dados, em ordem cronológica, em relação à previsão das notícias, que foi categorizada como importante. Dependendo do tipo de notícia (taxas de juros, taxa de desemprego, índice de preços ao consumidor, PIB, etc.), os valores podem ser plotados em ordem cronológica. A tabela obtida deve ser sincronizada em tempo e escala com a tabela de preços ao mudar o período de tempo. Também estou interessado na velocidade de obtenção de dados reais.

 
Vladimir Kononenko:

Aqui está minha versão do indicador de notícias. Ele alimenta o terminal com horários de lançamento de notícias para as moedas de sua escolha, o grau de importância também é selecionável. A informação é exibida com uma linha vertical na tabela de preços. Na subjanela desenhamos, na ordem cronológica, um histograma dos últimos valores dos dados das notícias, que são atribuídos à classe-importante. A tabela obtida deve ser sincronizada em tempo com a tabela de preços ao trocar a TF. A velocidade de obtenção de dados reais também é de interesse.

Você quer dizer histogramas para toda a profundidade da história disponível no gráfico?

Mas não dá nenhuma informação para aplicação em tempo real. Ou será que eu entendi completamente mal? Bem, a previsão e o valor atual foram obtidos, estabelecemos o histograma, e então... Tomar uma decisão apenas manualmente?

Não verifiquei a velocidade de atualização dos dados no calendário, e a velocidade de recebimento de dados prontos deve ser medida, mas não tenho tal desejo, porque a velocidade é bastante alta.