Calendario economico. Domande, discussioni.

 

Voglio capire come funziona il calendario economico MQL5, ma qualcosa non si muove molto velocemente. Ho passato la maggior parte di ieri e l'inizio di oggi, ma ancora non capisco perché CalendarValueHistory non restituisce tutti gli eventi. O forse li confondo un po', questi eventi...

Ieri ricevevo 4 eventi alle xx:45 come scritto nel calendario. Sto scrivendo le ore dell'evento come "xx" perché l'ora ricevuta non è la stessa di quella della tabella. Ma almeno si potrebbe capire che questo è dovuto alla differenza tra l'ora specificata e l'ora del terminale o del server da cui i dati sono stati ottenuti. Ma ora ho solo 3 eventi con :45 minuti e non riesco a capire perché.

E domanda agli sviluppatori: perché nell'array la prima data 2019.07.25 00:00 e le righe successive sono ordinate in ordine crescente. Vedere la lista risultante.

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
 

Alcune domande sono cadute. Il tempo è stato risolto. Si è rivelato semplice. L'ora è GMT, e il sito era rappresentato da GMT+3, quindi tutti i miei malintesi si sono sommati.

Ecco il primo risultato: descrizione dell'evento ricevuto, prima riga dell'immagine


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
 

Domanda per gli sviluppatori:

Perché questo codice dalla documentazione, con piccole modifiche

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 che la dimensione dell'array di valori è zero, ma comunque stampa tutto quello che c'è nel calendario. Cioè, tutti gli eventi sono ricevuti.

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

Dove, cosa non ha tempo di lavorare?

 
Nella riga di formato %s è superfluo
 
Renat Fatkhullin:
La stringa di formato %s è ridondante

Sì, grazie. Ho già risolto il problema. Ho fatto un casino quando ho sistemato l'esempio della documentazione.

 

@Renat Fatkhullin Renat, possiamo sperare che un giorno venga fatta una funzione come TimeGMTOffset(), solo per l'ora del server e non per l'ora locale? Perché le funzioni del calendario economico usano l'ora GMT e l'ora locale spesso non coincide con quella del server. Quindi, quando ho il tempo delle notizie, devo tradurlo in tempo terminale. Capisco che ci possono essere problemi quando si chiama questa funzione nel fine settimana, ma può rilevare un qualche tipo di errore, che questa funzione non è disponibile in questo momento, o qualsiasi altra cosa.

Finora ho fatto così: in OnInit() la differenza di tempo viene calcolata e scritta nella variabile globale. Ma non mi piace molto. Secondo me sarebbe meglio chiamare la funzione integrata e adattare l'ora delle notizie all'ora del server. Soprattutto il terminale ha probabilmente il tempo del server disponibile anche nei fine settimana.

 
Alexey Viktorov:

@Renat Fatkhullin Renat, possiamo sperare che un giorno venga fatta una funzione come TimeGMTOffset(), solo per l'ora del server e non per l'ora locale? Perché le funzioni del calendario economico usano l'ora GMT e l'ora locale spesso non coincide con quella del server. Quindi, quando ho il tempo delle notizie, devo tradurlo in tempo terminale. Capisco che ci possono essere problemi quando si chiama questa funzione nei fine settimana, ma è possibile determinare un qualche tipo di errore, che questa funzione non è disponibile al momento o qualcos'altro.

Finora ho fatto così: in OnInit() la differenza di tempo viene calcolata e scritta nella variabile globale. Ma non mi piace molto. Secondo me sarebbe meglio chiamare la funzione integrata e adattare l'ora delle notizie all'ora del server. Soprattutto il terminale ha probabilmente il tempo del server disponibile anche nei fine settimana.

Certo che è disponibile, questo è già stato richiesto.

 
Vitaly Muzichenko:

Certo che è disponibile, questo è già stato richiesto.

Vitaly, ogni richiesta deve essere giustificata. Spero di aver fornito abbastanza argomenti per la necessità di una tale funzione. Ora dipende dal carico di lavoro dei programmatori dell'azienda e da come gli argomenti sono compresi e accettati. Lo spero.

 

Quali informazioni si possono ricavare dal calendario: (I valori che sono usati dal software e che sono di poca informazione per gli esseri umani non sono elencati qui)

  • Nome del paese
  • Valuta dei paesi
  • tipo di evento

Evento (manifestazione, discorso, ecc.)

Indicatore

Vacanze


  • Settore a cui appartiene l'evento

Mercato, borsa valori

Prodotto interno lordo (PIL)

Mercato del lavoro

Prezzi

Soldi

Commercio

Governo

Business

Consumo

Housing

Tasse

Vacanze


  • nome testuale dell'evento nella lingua del terminale (nella codifica corrente del terminale)
  • ora e data dell'evento
  • periodo di riferimento dell'evento
  • valore attuale del parametro
  • valore precedente del parametro
  • valore precedente rivisto dell'indicatore
  • valore previsto di un indicatore
  • impatto potenziale sul tasso di cambio

Nessun impatto indicato

Impatto positivo

Impatto negativo


Purtroppo, a parte il divieto di aprire posizioni prima dei comunicati stampa, non ho trovato altre soluzioni. Voglio scoprire quali di essi possono essere usati e come reagire ad essi.

Da quanto ho capito, i valori evidenziati sono molto importanti per decidere come reagire alla notizia, ma non capisco come. Invito alla discussione.

 
Alexey Viktorov:

Quali informazioni possono essere ottenute dal calendario: (I valori che sono usati dal programma e sono di poca informazione per gli esseri umani non sono elencati qui)

  • Nome del paese
  • Valuta dei paesi
  • tipo di evento

Evento (manifestazione, discorso, ecc.)

Indicatore

Vacanze


  • Settore a cui appartiene l'evento

Mercato, borsa valori

Prodotto interno lordo (PIL)

Mercato del lavoro

Prezzi

Soldi

Commercio

Governo

Business

Consumo

Housing

Tasse

Vacanze


  • nome testuale dell'evento nella lingua del terminale (nella codifica corrente del terminale)
  • ora e data dell'evento
  • periodo di riferimento dell'evento
  • valore corrente del parametro
  • valore precedente del parametro
  • valore precedente rivisto dell'indicatore
  • valore previsto dell'indicatore
  • impatto potenziale sul tasso di cambio

Nessun impatto indicato

Impatto positivo

Impatto negativo


Purtroppo, a parte il divieto di aprire posizioni prima dei comunicati stampa, non ho trovato altre soluzioni. Voglio scoprire quali di essi possono essere usati e come reagire ad essi.

Da quanto ho capito, i valori evidenziati sono molto importanti per decidere come reagire alla notizia, ma non capisco come. Invito alla discussione.

Ecco la mia variante dell'indicatore di notizie. Il terminale fornisce informazioni sul tempo di rilascio delle notizie in base alle valute, il grado di importanza è anche selezionato. L'informazione è mostrata come una linea verticale sul grafico del prezzo. Nella sottofinestra puoi vedere l'istogramma degli ultimi valori dei dati, in ordine cronologico, relativi alla previsione della notizia, che è stata categorizzata come importante. A seconda del tipo di notizia (tassi di interesse, tasso di disoccupazione, indice dei prezzi al consumo, PIL, ecc.), i valori possono essere tracciati in ordine cronologico. Il grafico ottenuto dovrebbe essere sincronizzato nel tempo e nella scala con il grafico del prezzo quando si cambia il timeframe. Inoltre sono interessato alla velocità di ottenere dati reali.

 
Vladimir Kononenko:

Ecco la mia versione dell'indicatore di notizie. Alimenta il terminale con i tempi di rilascio delle notizie per le valute di vostra scelta, il grado di importanza è anche selezionabile. L'informazione viene visualizzata con una linea verticale sul grafico del prezzo. Nella sottofinestra si disegna, in ordine cronologico, un istogramma degli ultimi valori di dati della notizia, che sono attribuiti alla classe-importante. Il grafico ottenuto deve essere sincronizzato in tempo con il grafico del prezzo quando si cambia il TF. Anche la velocità di ottenere i dati effettivi è interessante.

Intendi gli istogrammi per l'intera profondità della storia disponibile sul grafico?

Ma non dà alcuna informazione per l'applicazione in tempo reale. O ho completamente frainteso? Bene, la previsione e il valore attuale sono stati ottenuti, abbiamo impostato l'istogramma, e poi? Prendere una decisione solo manualmente?

Non ho controllato la velocità di aggiornamento dei dati nel calendario, e la velocità di ricezione dei dati pronti dovrebbe essere misurata, ma non ho questo desiderio, perché la velocità è abbastanza alta.