- 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
CopyBuffer
Ottiene dati di un buffer specificato di un certo indicatore nella quantità necessaria.
Il conteggio degli elementi di dati copiati (buffer indicatore con l'indice buffer_num) dalla posizione iniziale viene eseguito dal presente al passato, cioè, la posizione iniziale di 0 significa la barra di corrente (valore indicatore per la barra corrente).
Quando si copia una quantità ancora sconosciuta di dati, si raccomanda di utilizzare un array dinamico come un buffer[] recipient buffer, poiché la funzione CopyBuffer() tenta di allocare la dimensione dell'array di ricezione per la dimensione dei dati copiati. Se un buffer di indicatore (array che è pre-assegnato per memorizzare i valori degli indicatori dalla funzione SetIndexBufer()) viene usato come buffer[] recipient array, la copia parziale è consentita. Un esempio può essere trovato nell' indicatore personalizzato Awesome_Oscillator.mql5 nel pacchetto standard del terminale .
Se avete bisogno di fare una copia parziale dei valori degli indicatori in un altro array (buffer non-indicatore), è necessario utilizzare un array intermedio, al quale il numero desiderato viene copiato. Dopo ciò, condurre la copia dell'elemento del numero richiesto di valori nel posto richiesto se un gruppo ricevente da questo intermedia.
Se si conosce la quantità necessaria di dati da copiare, dovrebbe essere meglio fatto in un buffer allocato in modo statico, al fine di evitare un' allocazione eccessiva di memoria.
Non importa ciò che è di proprietà dell'array di destinazione - as_series=true o as_series=false. I dati verranno copiati in modo che l'elemento più vecchio sarà situato all'inizio della memoria fisica allocata per l'array. Ci sono 3 varianti di chiamate di funzione.
Chiamate dalla prima posizione ed il numero di elementi richiesti
int CopyBuffer(
|
Chiamata dalla data di inizio e il numero di elementi richiesti
int CopyBuffer(
|
Chiamata per le date di inizio e di fine di un intervallo di tempo richiesto
int CopyBuffer(
|
Parametri
indicator_handle
[in] L' handle indicatore, restituito dalla funzione indicatore corrispondente.
buffer_num
[in] In numero di buffer indicatore.
start_pos
[in] La posizione del primo elemento da copiare.
count
[in] Conteggio dati da copiare.
start_time
[in] Tempo Barra, corrispondente al primo elemento.
stop_time
[in] Tempo Barra, corrispondente all'ultimo elemento.
buffer[]
[out] Array of double type.
Valore restituito
Restituisce il numero di dati copiati o -1 in caso di errore.
Nota
Quando si richiedono dati dall'indicatore, se le timeseries richieste non sono ancora costruite o hanno bisogno di essere scaricati dal server, la funzione restituisce immediatamente -1, ma il processo di download/costruzione verrà avviato.
Quando si richiedono dati da un Expert Advisor o uno script, verrà avviato il download dal server, se il terminale non dispone di questi dati a livello locale, o la costruzione delle timeserie richieste avrà inizio, se i dati possono essere costruiti dallo storico locale, ma non sono ancora pronti. La funzione restituisce la quantità di dati che sarà pronta dal momento dell'espirazione del timeout.
Esempio:
//+--------------------------------------------------------------------------------+
|
L'esempio precedente illustra come un buffer indicatore viene riempito con i valori di un altro buffer indicatore, dall'indicatore sullo stesso simbolo/periodo.
Vedere l' esempio dettagliato della richiesta dati dello storico di cui al punto Metodi di Binding Oggetti. Lo script disponibile in questa sezione mostra come ottenere i valori degli indicatori iFractals delle ultime 1000 barre e come visualizzare gli ultimi 10 su e 10 giù frattali sul grafico. Una tecnica simile può essere utilizzata per tutti gli indicatori che hanno dati mancanti e che sono solitamente elaborati utilizzando i seguenti stili:
Vedi anche