CalendarValueLast

Ottiene l'array di valori per tutti gli eventi con la possibilità di ordinare per Paese e/o valuta dallo stato del database del calendario con un change_id specificato.

int  CalendarValueLast(
   ulong&               change_id,             // change ID 
   MqlCalendarValue&    values[],              // array per le descrizioni dei valori 
   const string         country_code=NULL,     // nome codice Paese (ISO 3166-1 alpha-2)
   const string         currency=NULL          // nome del codice valuta del Paese 
   );

Parametri

change_id

[in][out]  Change ID.

values[]

[out] MqlCalendarValue: è il tipo di array per ricevere i valori degli eventi

country_code=NULL

[in] Nome codice Paese (ISO 3166-1 alpha-2)

currency=NULL

[in] Nome del codice valuta del Paese.

Valore di ritorno

Numero di valori di eventi ricevuti. Per ottenere informazioni su un errore, chiamare la funzione GetLastError(). Possibili errori:

  • 4001 – ERR_INTERNAL_ERROR  (errore di runtime generale),
  • 4004 – ERR_NOT_ENOUGH_MEMORY (memoria insufficiente per l'esecuzione di una richiesta),
  • 5401 – ERR_CALENDAR_TIMEOUT (tempo limite della richiesta ecceduto),
  • 5400 – ERR_CALENDAR_MORE_DATA (la dimensione dell'array è insufficiente per la ricezione delle descrizioni di tutti i valori, solo quelli che sono riusciti a rientrare sono stati ricevuti),

Nota

Tutte le funzioni per lavorare con il calendario economico utilizzano l'ora del trade server (TimeTradeServer). Ciò significa che il tempo nella struttura MqlCalendarValue e gli input di tempo nelle funzioni CalendarValueHistoryByEvent/CalendarValueHistory sono impostate nel fuso orario del trade server, piuttosto che nell'ora locale dell' utente.

Se l'array events[] di lunghezza fissa è stato passato alla funzione e non c'era spazio sufficiente per salvare l'intero risultato, l'errore ERR_CALENDAR_MORE_DATA (5400) viene attivato.

Se change_id = 0 viene passato alla funzione, si otterrà il corrente change_id del database del calendario su quel parametro; e la funzione restituisce 0

Per i filtri country_code e currency, i valori NULL e "" sono equivalenti e significano l'assenza del filtro.

Per country_code, deve essere utilizzato il campo code della struttura MqlCalendarCountry, ad esempio "US", "RU" o "EU".

Per currency, deve essere utilizzato il campo currency della struttura MqlCalendarCountry, ad esempio "USD", "RUB" o "EUR".

I filtri sono applicati per congiunzione, es. l' 'AND' logico viene utilizzato per selezionare solo i valori degli eventi per cui vengono soddisfatte contemporaneamente entrambe le condizioni (paese e valuta)

La funzione restituisce l'array per una notizia specificata ed un nuovo change_id che può essere utilizzato per le chiamate successive della funzione per ricevere i nuovi valori della notizia. Pertanto, è possibile aggiornare i valori per una notizia specificata chiamando questa funzione con l'ultimo change_id noto.

Se un valore di un evento non ha nessuno dei campi specificati di seguito

struct MqlCalendarValue
  {
   ...
   long              actual_value;              // valore attuale dell'evento
   long              prev_value;                // valore precedente dell'evento
   long              revised_prev_value;        // valore rivisto dell'evento precedente
   long              forecast_value;            // valore di previsione dell'evento
   ...
  };

quindi il valore del campo mancante viene restituito come INT64_MIN (-9223372036854775808).

L' EA di esempio che ascolta gli eventi del calendario economico:

#property description "Esempio di utilizzo della funzione CalendarValueLast"
#property description " per sviluppare l'ascoltatore di eventi del calendario economico"
#property description "Per ottenere ciò, ottieni l'ID della modifica corrente"
#property description " del database del Calendario. Quindi, usa questo ID per ricevere "
#property description " solo nuovi eventi tramite il sondaggio del timer"
//+------------------------------------------------------------------+
//| Funzione di inizializzazione dell' Expert                        |
//+------------------------------------------------------------------+
int OnInit()
  {
//--- crea il timer
   EventSetTimer(60);
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Funzione di deinitializzazione dell' Expert                      | 
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//--- distruggi il timer
   EventKillTimer();
  }
//+------------------------------------------------------------------+
//| Funzione tick dell' Expert                                       |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
 
  }
//+------------------------------------------------------------------+
//| Funzione del timer                                               |
//+------------------------------------------------------------------+
void OnTimer()
  {
//--- Cambia ID del database del calendario
   static ulong calendar_change_id=0;
//--- primo attributo di lancio
   static bool first=true;
//--- arra del valore di evento
   MqlCalendarValue values[];
//--- esegue l'inizializzazione - ottiene l'attuale calendar_change_id
   if(first)
    {
// --- ottiene l'ID di modifica del database del Calendario 
      if(CalendarValueLast(calendar_change_id,values)>0)
        {
         //--- questo blocco di codice non può essere eseguito durante il primo avvio, ma aggiungiamolo comunque
         PrintFormat("%s: Ricevuto l'ID corrente del database del calendario: change_id=%d",
                     __FUNCTION__,calendar_change_id);
         //--- imposta la flag ed esce prima del prossimo evento del timer
         first=false;
         return;
        }
      else
        {
         //--- i dati non vengono ricevuti (questo è normale per il primo avvio), controllare per un errore
         int error_code=GetLastError();
         if(error_code==0)
          {
            PrintFormat("%s: Ricevuto l'ID corrente del database del calendario: change_id=%d",
                        __FUNCTION__,calendar_change_id);
            //--- imposta la flag ed esce prima del prossimo evento del timer
            first=false;
            //--- ora abbiamo il valore calendar_change_id
            return;
           }
         else
          {
            //--- e questo è davvero un errore            
            PrintFormat("%s: impossibile ottenere eventi in CalendarValueLast. Codice di errore: %d",
                        __FUNCTION__,error_code);
            //--- operazione completata in caso di errore, reinizializzazione durante la successiva chiamata del timer         
            return;
           }
        }
     }
 
// --- abbiamo l'ultimo valore conosciuto del change ID del calendario (change_id)
   ulong old_change_id=calendar_change_id;
//--- controlla se ci sono nuovi eventi del calendario
   if(CalendarValueLast(calendar_change_id,values)>0)
    {
      PrintFormat("%s: nuovi eventi del calendario ricevuti: %d",
                  __FUNCTION__,ArraySize(values));
      //--- visualizza i dati dall' arra 'values' nel Journal 
      ArrayPrint(values);
      //--- mostra i valori del precedente e del nuovo ID del diario
      PrintFormat("%s: Precedente change_id=%d, nuovo change_id=%d",
                  __FUNCTION__,old_change_id,calendar_change_id);
      //--- mostra nuovi eventi nel Journal
      ArrayPrint(values);
      /* 
     scrivi il tuo codice per gestire il verificarsi di eventi qui
      */
     }
//---     
  }
/*
  Esempio dell'operazione listener(di ascolto):
  OnTimer: ha ricevuto l'ID corrente del database del calendario: change_id=33281792
  On Timer: Ricevuti nuovi eventi per il calendario: 1
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91040   76020013 2019.03.20 15:30:00 1970.01.01 00:00:00          0       -5077000     -1913000 -9223372036854775808         -4077000             2          0
  OnTimer: Previous change_id=33281792, new change_id=33282048
        [id] [event_id]              [time]            [period] [revision] [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91040   76020013 2019.03.20 15:30:00 1970.01.01 00:00:00          0       -5077000     -1913000 -9223372036854775808         -4077000             2          0
  On Timer: Ricevuti nuovi eventi per il calendario: 1
        [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91041   76020013 2019.03.27 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -5077000 -9223372036854775808         -7292000             0          0
  OnTimer: Previous change_id=33282048, new change_id=33282560
        [id] [event_id]              [time]            [period] [revision]       [actual_value] [prev_value] [revised_prev_value] [forecast_value] [impact_type] [reserved]
   [0] 91041   76020013 2019.03.27 15:30:00 1970.01.01 00:00:00          0 -9223372036854775808     -5077000 -9223372036854775808         -7292000             0          0
 
*/  

Guarda anche

CalendarValueLast, CalendarValueHistory, CalendarValueHistoryByEvent, CalendarValueById