Ottenere i dati del simbolo¶
Ottenere e interpretare i dati del simbolo (ad esempio, i prezzi di apertura e chiusura di tutte le barre per un periodo specifico) è essenziale in qualsiasi applicazione che abbia una delle seguenti funzionalità:
- Grafici – per costruire grafici a barre o a linee, è necessario conoscere i dati storici e in tempo reale delle barre e delle quotazioni.
- Statistiche di mercato – se si desidera visualizzare le statistiche di mercato (come le variazioni giornaliere dei prezzi per i singoli simboli), è necessario ottenere sia i prezzi storici che quelli in tempo reale.
- Replay – nella vostra applicazione, potreste consentire ai trader di tornare a un periodo precedente e fare trading sui dati storici. Per farlo, sarebbe necessario ottenere ed elaborare i dati passati delle barre e dei tick.
In questo tutorial, mostreremo come ottenere ed elaborare i dati storici e in tempo reale delle barre e dei tick, e le quotazioni di profondità in tempo reale.
Si noti che il tutorial fornisce solo uno snippet di codice per ottenere i dati storici delle barre. Poiché la logica di base rimane la stessa indipendentemente dall'azione che si sta eseguendo, è possibile adattare questo snippet per ottenere altri tipi di dati.
Operare con JSON
Quando si opera con JSON, è comunque possibile riutilizzare il codice di questo tutorial; tuttavia, sarà necessario modificarlo leggermente a seconda dell'approccio alla serializzazione e deserializzazione.
Ottenere dati storici delle barre ¶
Per ricevere i dati storici delle barre, eseguire le seguenti azioni:
- Inizializzare un oggetto che rappresenta il messaggio
ProtoOAGetTrendbarsReq. - Compilare le proprietà dell'oggetto con il
ctidTraderAccountIdrichiesto, losymbolId, ilProtoOATrendbarPeriod, ilcountdelle trendbars da restituire e i timestamp UnixtoTimestampefromTimestamp.
Vincoli dei timestamp
Si noti che ci sono alcuni vincoli sulla distanza massima possibile tra il toTimestamp e il fromTimestamp. Questi vincoli dipendono dal ProtoOATrendPeriod specificato. Per saperne di più, clicca qui.
- Inviare il messaggio appena creato e ricevere una risposta di tipo
ProtoOAGetTrendbarsRes. Accedere al suo campotrendbarper ottenere un elenco di barre di tendenza. - Trasformare i dati dal formato relativo al prezzo effettivo del simbolo. Per farlo, prima ottenere il prezzo basso di una trendbar e dividerlo per 100000. Quindi, arrotondare il risultato alle cifre del simbolo (ad esempio, due numeri dopo il delimitatore). Per ottenere i prezzi alto, di apertura e di chiusura di una trendbar, aggiungere il delta della trendbar di ciascuno di questi prezzi al prezzo basso della trendbar. Successivamente, dividere ciascun numero per 100000 e arrotondare il risultato alle cifre del simbolo.
È possibile completare queste azioni riutilizzando il codice sottostante.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | |
Ottenere dati storici dei tick ¶
Per ricevere i dati storici dei tick, eseguire le seguenti azioni:
- Inizializzare un oggetto che rappresenta il messaggio
ProtoOAGetTickDataReq. - Compilare le proprietà dell'oggetto con il
ctidTraderAccountIdrichiesto, losymbolId, iltypedi quotazione, nonché ilfromTimestampe iltoTimestamp.
Vincoli dei timestamp
È impossibile richiedere dati storici dei tick per un periodo superiore a una settimana. Pertanto, la differenza tra il toTimestamp e il fromTimestamp specificati non deve essere superiore a 604800000.
- Inviare il messaggio appena creato e ricevere una risposta di tipo
ProtoOAGetTickDataRes. Accedere al suo campotickDataper ottenere un elenco di elementi di tipoProtoOATickData. - Trasformare i dati dal formato relativo al prezzo effettivo del simbolo. Per farlo, dividere ogni tick per 100000 e arrotondare il risultato alle cifre del simbolo.
Richiesta di un gran numero di tick
Esiste un limite al numero di tick che possono essere restituiti in un messaggio ProtoOAGetTickDataRes. Se questo limite viene superato (ad esempio, c'è stato un numero significativo di tick durante il periodo specificato), il messaggio ProtoOAGetTickDataRes includerà solo i primi X tick, dove X è un numero inferiore al limite dei tick. Il limite esatto dipende dalla configurazione del backend di cTrader.
Per verificare se esistono più tick di quelli restituiti nel messaggio ricevuto, utilizzare il flag hasMore.
Ottenere dati delle barre in tempo reale ¶
Per ricevere le barre in tempo reale, eseguire le seguenti azioni:
- Inizializzare una variabile che rappresenta il messaggio
ProtoOAGetTrendbarsReq. - Compilare le proprietà dell'oggetto con il
ctidTraderAccountIdrichiesto, losymbolId, ilProtoOATrendbarPeriod, ilcountdelle trendbars da restituire, i timestamp UnixtoTimestampefromTimestamp.
Vincoli dei timestamp
Ci sono alcuni vincoli sulla distanza massima possibile tra il toTimestamp e il fromTimestamp. Questi vincoli dipendono dal ProtoOATrendPeriod specificato. Per saperne di più, clicca qui.
-
Inviare il messaggio appena creato e ricevere una risposta di tipo
ProtoOAGetTrendbarsRes. Accedere al suo campotrendbarper ottenere un elenco di barre di tendenza. -
Trasformare i dati dal formato relativo al prezzo effettivo del simbolo. Per farlo, prima ottenere il prezzo basso di una trendbar e dividerlo per 100000. Quindi, arrotondare il risultato alle cifre del simbolo (ad esempio, due numeri dopo il delimitatore). Per ottenere i prezzi alto, di apertura e di chiusura di una trendbar, aggiungere il delta della trendbar di ciascuno di questi prezzi al prezzo basso della trendbar. Successivamente, dividere ciascun numero per 100000 e arrotondare il risultato alle cifre del simbolo.
-
Inizializzare un oggetto che rappresenta il messaggio
ProtoOASubscribeLiveTrendbarReq. -
Compilare le proprietà dell'oggetto con il
ctidTraderAccountIdrichiesto, ilProtoOATrendbarPeriode losymbolId. -
Fare lo stesso per un oggetto che rappresenta il messaggio
ProtoOASubscribeSpotsReq. -
Inviare il messaggio
ProtoOASubscribeSpotsReqe il messaggioProtoOASubscribeLiveTrendbarReqin questo ordine e ricevere risposte di tipoProtoOASubscribeSpotsReseProtoOASubscribeLiveTrenbarsRes. A questo punto, si è abbonati ai dati delle barre in tempo reale e si dovrebbero ricevere messaggi di tipoProtoOASpotEvent.
Abbonamento alle trendbars in tempo reale
Per abbonarsi con successo alle trendbars in tempo reale è necessario prima sottoscrivere gli eventi spot.
- Quando si riceve un nuovo messaggio
ProtoOASpotEvent, utilizzare il suo campotrendbarper ottenere i dati dell'ultima barra chiusa. - Trasformare i dati dal formato relativo ai prezzi effettivi del simbolo. Per farlo, prima ottenere il prezzo basso di una trendbar e dividerlo per 100000. Quindi, arrotondare il risultato alle cifre del simbolo (ad esempio, due numeri dopo il delimitatore). Per ottenere i prezzi alto, di apertura e di chiusura di una trendbar, aggiungere il delta della trendbar di ciascuno di questi prezzi al prezzo basso della trendbar. Successivamente, dividere ciascun numero per 100000 e arrotondare il risultato alle cifre del simbolo.
Per annullare l'abbonamento ai dati delle trendbar in tempo reale, è sempre possibile inviare il messaggio ProtoOAUnsubscribeLiveTrendbarsReq contenente lo symbolId, il period e il proprio ctidTraderAccountId. Se la richiesta ha successo, si dovrebbe ricevere una risposta di tipo ProtoOAUnsubscribeLiveTrenbarRes. L'abbonamento agli eventi spot rimarrà comunque attivo.
Ottenere quotazioni in tempo reale ¶
Per ricevere quotazioni bid e ask in tempo reale per un simbolo, eseguire le seguenti azioni:
- Inizializzare un oggetto che rappresenta il messaggio
ProtoOASubscribeSpotsReq. - Compilare le proprietà dell'oggetto con il
ctidTraderAccountId, losymbolIde, opzionalmente, il boolsubscribeToSpotTimestamp. - Inviare il messaggio appena creato e ricevere una risposta di tipo
ProtoOASubscribeSpotsRes. A questo punto, si è abbonati ai dati delle quotazioni in tempo reale e si dovrebbero ricevere messaggi di tipoProtoOASpotEvent. - Quando si riceve un nuovo messaggio
ProtoOASpotEvent, accedere ai suoi campibideaskper ottenere le ultime quotazioni. Si noti che è ancora necessario trasformare i dati in un valore di prezzo effettivo dividendolo per 100000 e arrotondandolo alle cifre del simbolo.
Campi bid e ask
Poiché i campi bid e ask sono opzionali, è possibile che non si vedano necessariamente messaggi ProtoOASpotEvent in cui entrambi sono specificati.
Per annullare l'iscrizione ai dati delle quotazioni, puoi sempre inviare il messaggio ProtoOAUnsubscribeSpotsReq contenente il symbolId e il tuo ctidTraderAccountId. Se la tua richiesta ha esito positivo, dovresti ricevere una risposta di tipo ProtoOAUnsubscribeSpotsRes. A questo punto, dovresti smettere di ricevere eventi spot.
Quotazioni di profondità ¶
Infine, puoi anche ricevere quotazioni di profondità o di Livello II in tempo reale per un simbolo. Per farlo, esegui le seguenti azioni.
Puoi sottoscrivere e ricevere quotazioni di profondità o di Livello II in tempo reale per un simbolo dall'API.
- Inizializza un oggetto che rappresenta il messaggio
ProtoOASubscribeDepthQuotesReq. - Compila le proprietà dell'oggetto con il
ctidTraderAccountIde ilsymbolId. - Invia il messaggio appena creato e ricevi una risposta di tipo
ProtoOASubscribeDepthQuotesRes. A questo punto, sei iscritto alle quotazioni di profondità, il che significa che dovresti iniziare a ricevere messaggiProtoOADepthEvent. - Quando ricevi un nuovo messaggio
ProtoOADepthEvent, dovrai utilizzare i suoi campinewQuotesedeletedQuotesper ottenere i dati di profondità più recenti. Dovrai anche trasformare i dati in un valore di prezzo effettivo dividendoli per 100000 e arrotondando il risultato alle cifre del simbolo. Dovrai anche trasformare la dimensione della quotazione di profondità in unità dividendola per 100.
Per annullare l'iscrizione agli eventi di profondità, puoi sempre utilizzare il messaggio ProtoOAUnsubscribeDepthQuotesReq specificando il symbolId e il ctidTraderAccountId. Dovresti ricevere un messaggio di tipo ProtoOAUnsubscribeDepthQuotesRes; successivamente, dovresti smettere di ricevere eventi di profondità.