CopyRates

Ottiene la serie storica della struttura MqlRates del periodo-simbolo specificato nella quantità specificata in una matrice o un vettore. Gli elementi sono contati dal presente al passato, il che significa che la posizione di partenza uguale a 0 significa la barra corrente.

I dati vengono copiati in modo che l'elemento più vecchio sia posto all'inizio della matrice/vettore. Ci sono tre opzioni di funzione.

Accesso tramite posizione iniziale e numero di elementi richiesti

bool  CopyRates(
   string           symbol,       // nome del simbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinazione di flag per specificare la serie richiesta
   ulong            start,        // indice della barra iniziale da cui inizia la copia 
   ulong            count         // quantità da copiare
   );

Accesso tramite data iniziale e numero di elementi richiesti

bool  CopyRates(
   string           symbol,       // nome del simbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinazione di flag per specificare la serie richiesta
   datetime         from,         // data d'inizio
   ulong            count         // quantità da copiare
   );

Accesso tramite data iniziale e finale dell'intervallo di tempo richiesto

bool  CopyRates(
   string           symbol,       // nome del simbolo
   ENUM_TIMEFRAMES  period,       // periodo
   ulong            rates_mask,   // combinazione di flag per specificare la serie richiesta
   datetime         from,         // data d'inizio
   datetime         to            // data di fine
   );

Parametri

symbol

[in]  Simbolo.

period

[in]  Periodo.

rates_mask

[in] L'enumerazione ENUM_COPY_RATES combinazione di flag specificando il tipo di serie richieste. Quando si copia un vettore, può essere specificato un solo valore dall'enumerazione ENUM_COPY_RATES, altrimenti si verifica un errore.

start

[in] Indice del primo elemento copiato.

count

[in] Numero degli elementi copiati.

from

[in] Ora della barra corrispondente al primo elemento. 

to

[in] Ora della barra corrispondente all'ultimo elemento. 

Valore Restituito

Restituisce true in caso di successo, altrimenti false in caso di errore.

Note

Se l'intervallo dei dati richiesti è completamente fuori dai dati disponibili sul server, la funzione restituisce false. Se i dati al di fuori TERMINAL_MAXBARS (numero massimo di barre sul grafico) vengono richiesti, la funzione restituisce ugualmente false.

Quando si richiedono dati da un'EA o da uno script, viene 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 dalla cronologia locale, ma non sono ancora pronti. La funzione restituisce la quantità che sarà pronta entro la scadenza del timeout, tuttavia il download della cronologia continua e la funzione restituisce più dati durante la successiva richiesta simile.

Quando si richiedono dati tramite data d'inizio e numero di elementi richiesti, vengono restituiti solo dati la cui data è inferiore a (prima) o uguale a quella specificata. L'intervallo è impostato e considerato fino a un secondo. In altre parole, la data di apertura di qualsiasi barra per cui viene restituito il valore (volume, spread, Apertura, Massimo, Minimo, Chiusura o Tempo) è sempre uguale o inferiore a quella specificata.

Quando si richiedono dati in un determinato intervallo di date, vengono restituiti solo i dati che rientrano nell'intervallo richiesto. L'intervallo è impostato e considerato fino a un secondo. In altre parole, il tempo di apertura di qualsiasi barra per cui viene restituito il valore (volume, spread, valore del buffer dell'indicatore, Apertura, Massimo, Minimo, Chiusura o Tempo) si trova sempre nell'intervallo richiesto.

Ad esempio, se il giorno corrente della settimana è Sabato, la funzione restituisce 0 quando si tenta di copiare i dati sull'intervallo di tempo settimanale impostando start_time=Last_Tuesday e stop_time=Last_Friday perché l'orario di apertura settimanale cade sempre di domenica, ma nessuna singola barra settimanale rientra nell'intervallo specificato.

Se è necessario ottenere il valore corrispondente della barra incompleta corrente, è possibile utilizzare il primo modulo di chiamata che indica start_pos=0 e count=1.

ENUM_COPY_RATES

L'enumerazione ENUM_COPY_RATES contiene i flag per specificare il tipo di dati da passare alla matrice o all'array. La combinazione di flag consente di ottenere diverse serie dalla cronologia in una richiesta. L'ordine delle righe nella matrice corrisponderà all'ordine dei valori nell'enumerazione ENUM_COPY_RATES. In altre parole, la riga con i dati dei Massimi sarà sempre più alta nella matrice rispetto alla riga con i dati dei Minimi.

ID

Valore

Descrizione

COPY_RATES_OPEN

1

Serie dei prezzi d'Apertura

COPY_RATES_HIGH

2

Serie dei prezzi Massimi

COPY_RATES_LOW

4

Serie dei prezzi Minimi

COPY_RATES_CLOSE

8

Serie dei prezzi di Chiusura

COPY_RATES_TIME

16

Serie Temporali (ora di apertura della barra)

 

Mettere il tempo nel vettore e nella matrice float (vectord e matrixf) causa perdite di ~100 secondi dato che la precisione di float la precisione è decisamente limitata e i numeri interi maggiori di 1<<24 non possono essere rappresentati esattamente in float.

COPY_RATES_VOLUME_TICK

32

Tick Volume

COPY_RATES_VOLUME_REAL

64

Volumi degli scambi

COPY_RATES_SPREAD

128

Spread

Combinazione

 

 

COPY_RATES_OHLC

15

Serie Apertura, Massimo, Minimo e Chiusura

COPY_RATES_OHLCT

31

Serie Apertura, Massimo, Minimo, Chiusura e Ora

Disposizione dei dati

 

 

COPY_RATES_VERTICAL

32768

Le serie vengono copiate nella matrice lungo l'asse verticale. I valori delle serie ricevute saranno disposti verticalmente nella matrice, cioè i dati più vecchi saranno nella prima riga, mentre i dati più recenti saranno nell'ultima riga della matrice.

 

Con la copia predefinita, le serie vengono aggiunte in una matrice lungo l'asse orizzontale.

 

Il flag è applicabile solo quando si copia in una matrice.

Esempio:

//+------------------------------------------------------------------+
//| Script program start function                                    |
//+------------------------------------------------------------------+
void OnStart()
 {
//--- ottenere le quotazioni nella matrice
  matrix matrix_rates;
  if(matrix_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLCT110))
    Print("matrix rates: \n"matrix_rates);
  else
    Print("matrix_rates.CopyRates failed. Error "GetLastError());
//--- controllo
  MqlRates mql_rates[];
  if(CopyRates(Symbol(), PERIOD_CURRENT110mql_rates)>0)
   {
    Print("mql_rates array:");
    ArrayPrint(mql_rates);
   }
  else
    Print("CopyRates(Symbol(), PERIOD_CURRENT,1, 10, mql_rates). Error "GetLastError());
//--- ottenere le quotazioni nel vettore = chiamata non valida 
  vector vector_rates;
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_OHLC115))
    Print("vector_rates COPY_RATES_OHLC: \n"vector_rates);
  else
    Print("vector_rates.CopyRates COPY_RATES_OHLC failed. Error "GetLastError());
/--- ottenere i prezzi di chiusura nel vettore
  if(vector_rates.CopyRates(Symbol(), PERIOD_CURRENTCOPY_RATES_CLOSE115))
    Print("vector_rates COPY_RATES_CLOSE: \n"vector_rates);
  else
    Print("vector_rates.CopyRates failed. Error "GetLastError());
 };
/*
   matrix rates:
   [[0.99686,0.99638,0.99588,0.99441,0.99464,0.99594,0.99698,0.99758,0.99581,0.9952800000000001]
    [0.99708,0.99643,0.99591,0.9955000000000001,0.99652,0.99795,0.99865,0.99764,0.99604,0.9957]
    [0.9961100000000001,0.99491,0.99426,0.99441,0.99448,0.99494,0.9964499999999999,0.99472,0.9936,0.9922]
    [0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
    [1662436800,1662440400,1662444000,1662447600,1662451200,1662454800,1662458400,1662462000,1662465600,1662469200]]
   mql_rates array:
                    [time]  [open]  [high]   [low] [close] [tick_volume] [spread] [real_volume]
   [02022.09.06 04:00:00 0.99686 0.99708 0.99611 0.99641          4463        0             0
   [12022.09.06 05:00:00 0.99638 0.99643 0.99491 0.99588          4519        0             0
   [22022.09.06 06:00:00 0.99588 0.99591 0.99426 0.99441          3060        0             0
   [32022.09.06 07:00:00 0.99441 0.99550 0.99441 0.99464          3867        0             0
   [42022.09.06 08:00:00 0.99464 0.99652 0.99448 0.99594          5280        0             0
   [52022.09.06 09:00:00 0.99594 0.99795 0.99494 0.99697          7227        0             0
   [62022.09.06 10:00:00 0.99698 0.99865 0.99645 0.99758         10130        0             0
   [72022.09.06 11:00:00 0.99758 0.99764 0.99472 0.99581          7012        0             0
   [82022.09.06 12:00:00 0.99581 0.99604 0.99360 0.99528          6166        0             0
   [92022.09.06 13:00:00 0.99528 0.99570 0.99220 0.99259          6950        0             0
   vector_rates.CopyRates COPY_RATES_OHLC failedError 4003
   vector_rates COPY_RATES_CLOSE:
   [0.9931,0.99293,0.99417,0.99504,0.9968399999999999,0.99641,0.99588,0.99441,0.99464,0.99594,0.99697,0.99758,0.99581,0.9952800000000001,0.99259]
*/

Vedi anche

Accesso alle Timeseries e Indicatori, CopyRates