Accesso alle Timeseries e ad i dati degli Indicatori
Si tratta di funzioni per lavorare con le serie temporali (_* Timeseries) e con gli indicatori. Una timeseries si differenzia dal consueto array di dati, per via del suo ordinamento inverso - elementi delle timeseries sono indicizzati a partire dalla fine di un array fino al suo inizio (a partire dai dati più recenti a quelli più vecchi). Per copiare i valori delle time-series degli indicatori e dei dati, si consiglia di utilizzare solo array dinamici, perché le funzioni di copiatura sono progettate per assegnare la grandezza necessaria degli array che ricevono i valori.
C'è un' importante eccezione a questa regola: se i valori delle timeseries e degli indicatori devono essere copiati spesso, ad esempio ad ogni chiamata di OnTick() negli Expert Advisors o ad ogni chiamata di OnCalculate() negli indicatori, in questo caso sarebbe meglio utilizzare gli array staticamente distribuiti, perché operazioni di allocazione di memoria per gli array dinamici richiedono più tempo, e ciò avrà un effetto durante il testing e l'ottimizzazione.
Quando si utilizzano funzioni che accedono ai valori di timeseries e indicatori, la direzione di indicizzazione dovrebbe essere presa in considerazione. Questo è descritto nella sezione Direzione di indicizzazione negli e nelle timeseries.
L'accesso ai dati dell' indicatore e timeseries è implementato indipendentemente dal fatto se i dati richiesti sono pronti (il cosiddetto accesso asincrono). Questo è estremamente importante per il calcolo dell' indicatore personalizzato, quindi se non vi sono dati, funzioni di tipo Copy...() restituiscono immediatamente un errore. Tuttavia, quando si accede da Expert Advisor e script, diversi tentativi di ricezione dei dati vengono realizzati in una piccola pausa, che è volta a fornire un po' di tempo necessario per scaricare TimeSeries richieste per calcolare i valori degli indicatori.
La sezione Organizzare l' Accesso ai Dati descrive i dettagli di ricezione, archiviazione e richiede i dati sui prezzi nel terminale client MetaTrader 5.

È storicamente accettato che un accesso ai dati dei prezzi in un array viene eseguito a partire dalla fine dei dati. Fisicamente, i nuovi dati vengono sempre scritti alla fine dell'array, ma l'indice della matrice è sempre uguale a zero. L'indice 0 nell'array timeseries denota i dati della barra corrente, cioè la barra che corrisponde all'intervallo di tempo non-finito in questo timeframe.
Un timeframe è il periodo di tempo, durante il quale viene formata una barra di prezzo unico. Ci sono 21 timeframes standard predefiniti.
Funzione | Azione |
|---|---|
Restituisce le informazioni sullo stato dei dati storici | |
Restituisce il numero di barre dello storico di un simbolo e periodo specificati | |
Restituisce il numero di dati calcolati in un buffer indicatore, oppure -1 in caso di errore (dati non sono stati ancora calcolati) | |
Restituisce l'handle per l'indicatore tecnico specificato creato da una serie di parametri di tipo MqlParam | |
Basato sull' handler specificato, restituisce il numero di parametri di input dell'indicatore, nonché i valori e tipi dei parametri | |
Rimuove un handle indicatore e rilascia il blocco di calcolo dell'indicatore, se non è usato da nessun altro | |
Mette in un array i dati di un buffer specificato da un indicatore specificato | |
Mette in un array i dati storici della struttura Rates per un simbolo e periodo specificati | |
Ottiene le Timeseries sincronizzate dalla struttura MqlRates per il simbolo-periodo specificato e la quantità specificata. I dati vengono ricevuti nella serie di array indicati | |
Mette in un array i dati storici dell'orario di apertura della barra per un simbolo e periodo specificati | |
Mette in un array i dati storici sul prezzo di apertura della barra per un simbolo e periodo specificati | |
Mette in un array i dati storici sul prezzo massimo della barra per un periodo e simbolo specificati | |
Mette in un array i dati storici sul prezzo minimo della barra per un simbolo e periodo specificati | |
Mette in un array i dati storici sul prezzo di chiusura della barra per un simbolo e periodo specificati | |
Mette in un array i dati storici relativi ai volumi tick per un simbolo e periodo specificati | |
Mette in un array i dati storici sui volumi trade per un simbolo e periodo specificati | |
Mette in un array i dati storici sugli spread per un simbolo e periodo specificati | |
La funzione riceve ticks nel formato MqlTick in ticks_array | |
La funzione riceve ticks in formato MqlTick nell'intervallo di date specificato in ticks_array | |
Restituisce il numero di barre di un simbolo e di un periodo corrispondenti, disponibili nello storico | |
Restituisce l'indice della barra corrispondente al tempo/orario specificato | |
Restituisce il prezzo Close (di chiusura) della barra (indicato dal parametro 'shift') sul chart corrispondente | |
Restituisce il prezzo High della barra (indicata dal parametro 'shift') sul chart corrispondente | |
Restituisce l'indice del valore più alto trovato sul chart corrispondente (spostamento relativo alla barra corrente) | |
Restituisce il prezzo Low della barra (indicato dal parametro 'shift') sul chart corrispondente | |
Restituisce l'indice del valore più piccolo trovato sul chart corrispondente (slittamento relativo alla barra corrente) | |
Restituisce il prezzo Open della barra (indicata dal parametro 'shift') sul chart corrispondente | |
Restituisce il tempo di apertura della barra (indicato dal parametro 'shift') sul chart corrispondente | |
Restituisce il volume tick della barra (indicato dal parametro 'shift') sul chart corrispondente | |
Restituisce il volume reale della barra (indicato dal parametro 'shift') sul chart corrispondente | |
Restituisce il volume tick della barra (indicato dal parametro 'shift') sul chart corrispondente | |
Restituisce il valore di spread della barra (indicato dal parametro 'shift') sul chart corrispondente |
Nonostante il fatto che con la funzione ArraySetAsSeries() è possibile impostare negli array l'accesso agli elementi come quelli nelle timeseries, va ricordato che gli elementi dell'array vengono fisicamente memorizzati in un solo e medesimo ordine - solo la direzione di indicizzazione cambia. Per dimostrare questo fatto cerchiamo di fare un esempio:
datetime TimeAsSeries[]; |
Come risultato si otterrà un output come questo:
TimeCurrent = 2009.06.11 14:16:23 |
Come si vede dall' output, così come aumenta l'indice dell'array TimeAsSeries, il valore temporale dell'indice diminuisce, cioè si passa dal presente al passato. Per l'array comune ArrayNotSeries il risultato è diverso - cos come indice cresce, si passa dal passato al presente.
Vedere anche
ArrayIsDynamic, ArrayGetAsSeries, ArraySetAsSeries, ArrayIsSeries
- Direzione di Indicizzazione negli Array, Buffers e TimeSeries
- Organizzazione di Accesso ai Dati
- SeriesInfoInteger
- Bars
- BarsCalculated
- IndicatorCreate
- IndicatorParameters
- IndicatorRelease
- CopyBuffer
- CopyRates
- CopySeries
- CopyTime
- CopyOpen
- CopyHigh
- CopyLow
- CopyClose
- CopyTickVolume
- CopyRealVolume
- CopySpread
- CopyTicks
- CopyTicksRange
- iBars
- iBarShift
- iClose
- iHigh
- iHighest
- iLow
- iLowest
- iOpen
- iTime
- iTickVolume
- iRealVolume
- iVolume
- iSpread