- 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
CopySeries
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. Gli elementi sono conteggiati dal presente al passato, il che significa che la posizione di partenza uguale a 0 significa la barra corrente.
Se la quantità di dati da copiare è sconosciuta, si consiglia di utilizzare gli array dinamici come array riceventi, poichè se la quantità di dati eccede ciò che un array può contenere, questo può causare il tentativo di ridistribuire l'array per adattarsi a tutti i dati richiesti.
Se si ha la necessità di copiare una quantità predeterminata di dati, si consiglia di utilizzare un buffer allocato staticamente per evitare riallocazioni di memoria inutili.
La proprietà dell'array ricevente — as_series=true or as_series=false — verrà ignorato: durante la copia, l'elemento Timeseries più vecchio verrà copiato all'inizio della memoria fisica allocata per l'array.
int CopySeries(
|
Parametri
symbol_name
[in] Simbolo.
timeframe
[in] Periodo.
start_pos
[in] Indice del primo elemento copiato.
count
[in] Numero di elementi copiati.
rates_mask
[in] Una Combinazione di flag dell'enumerazione ENUM_COPY_RATES.
array1, array2,...
[out] Array del tipo appropriato per ricevere le Timeseries dalla struttura MqlRates. L'ordine degli array passati alla funzione deve corrispondere all'ordine dei campi nella struttura MqlRates.
Valore Restituito
Il numero degli elementi copiati o -1 in caso di errore.
Nota
Se l'intero intervallo dei dati richiesti è fuori dai dati disponibili sul server, la funzione restituisce -1. Se i dati richiesti sono oltre TERMINAL_MAXBARS (il numero massimo di barre sul grafico), la funzione restituisce ugualmente -1.
Quando si richiedono dati da un indicatore, la funzione restituisce immediatamente -1 se le Timeseries richieste non sono ancora costruite o devono essere scaricate dal server. Tuttavia, questo avvierà il download/costruzione dei dati.
Quando si richiedono dati da un Expert Advisor o uno script, verrà avviato il download dal server se il terminale non dispone dei dati appropriati localmente, o la costruzione delle timeseries necessarie inizia se i dati possono essere costruiti dallo storico locale, ma non sono ancora pronti. La funzione restituisce la quantità di dati che è pronta nel momento in cui scade il timeout, tuttavia il download dello storico continua e la funzione restituisce più dati durante la successiva identica richiesta.
Differenza tra CopySeries e CopyRates
La funzione CopySeries consente di ottenere solo le timeseries necessarie in diversi array specificati durante una chiamata, mentre tutti i dati timeseries saranno sincronizzati. Ciò significa che tutti i valori negli array risultanti ad un determinato indice N apparterranno alla stessa barra sulla coppia Simbolo/Timeframe specificati. Pertanto, non è necessario che il programmatore si assicuri della sincronizzazione di tutte le Timeserie ricevute dall'orario di apertura della barra.
A differenza di CopyRates, che restituisce il set completo di timeseries come array MqlRates, la funzione CopySeries consente al programmatore di ottenere solo le timeseries richieste come array separati. Questo può essere fatto specificando una combinazione di flag per selezionare il tipo di timeseries. L'ordine degli array passati alla funzione deve corrispondere all'ordine dei campi nella struttura MqlRates:
struct MqlRates
|
Pertanto, se è necessario ottenere i valori delle timeseries di time, close ereal_volume per le ultime 100 barre del Simbolo/Timeframe corrente, è necessario utilizzare la seguente chiamata:
datetime time[];
|
Attenzione all'ordine degli array "time, close, volume" — deve corrispondere al l'ordine dei campi della struttura MqlRates. L'ordine dei valori nel rates_mask non ha importanza. La maschera potrebbe essere la seguente:
COPY_RATES_VOLUME_REAL|COPY_RATES_TIME|COPY_RATES_CLOSE |
Esempio:
//--- parametri di input
|
Vedere anche