Obtenir les données des symboles¶
L'obtention et l'interprétation des données des symboles (par exemple, les prix d'ouverture et de clôture de toutes les barres pour une période spécifique) sont essentielles dans toute application qui possède l'une des fonctionnalités suivantes :
- Graphiques – pour construire des graphiques en barres ou en lignes, vous devez connaître les données historiques et en temps réel des barres et des cotations.
- Statistiques de marché – si vous souhaitez afficher des statistiques de marché (telles que les variations de prix quotidiennes pour des symboles individuels), vous devez obtenir à la fois les prix historiques et en temps réel.
- Replays – dans votre application, vous pouvez permettre aux traders de revenir à une période précédente et de trader sur des données historiques. Pour ce faire, vous devrez obtenir et traiter les données passées des barres et des ticks.
Dans ce tutoriel, nous vous montrerons comment obtenir et traiter les données historiques et en temps réel des barres et des ticks, ainsi que les cotations de profondeur en temps réel.
Notez que le tutoriel ne fournit qu'un extrait de code pour obtenir des données historiques de barres. Comme la logique de base reste la même quelle que soit l'action que vous effectuez, vous pouvez adapter cet extrait pour obtenir d'autres types de données.
Travailler avec JSON
Lorsque vous opérez avec JSON, vous pouvez toujours réutiliser le code de ce tutoriel ; cependant, vous devrez le modifier légèrement en fonction de votre approche de sérialisation et de désérialisation.
Obtenir des données historiques de barres ¶
Pour recevoir des données historiques de barres, effectuez les actions suivantes :
- Initialisez un objet représentant le message
ProtoOAGetTrendbarsReq. - Remplissez les propriétés de l'objet avec le
ctidTraderAccountIdrequis, lesymbolId, leProtoOATrendbarPeriod, lecountde trendbars à retourner et les horodatages UnixtoTimestampetfromTimestamp.
Contraintes d'horodatage
Notez qu'il existe des contraintes sur la distance maximale possible entre le toTimestamp et le fromTimestamp. Ces contraintes dépendent du ProtoOATrendPeriod spécifié. Pour en savoir plus, cliquez ici.
- Envoyez le message nouvellement créé et recevez une réponse de type
ProtoOAGetTrendbarsRes. Accédez à son champtrendbarpour obtenir une liste de barres de tendance. - Transformez les données du format relatif au prix réel du symbole. Pour ce faire, obtenez d'abord le prix bas d'une trendbar et divisez-le par 100000. Ensuite, arrondissez le résultat aux décimales du symbole (par exemple, deux chiffres après le séparateur). Pour obtenir les prix haut, ouverture et clôture d'une trendbar, ajoutez le delta de la trendbar de chacun de ces prix au prix bas de la trendbar. Ensuite, divisez chaque nombre par 100000 et arrondissez le résultat aux décimales du symbole.
Vous pouvez effectuer ces actions en réutilisant le code ci-dessous.
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 | |
Obtenir des données historiques de ticks ¶
Pour recevoir des données historiques de ticks, effectuez les actions suivantes :
- Initialisez un objet représentant le message
ProtoOAGetTickDataReq. - Remplissez les propriétés de l'objet avec le
ctidTraderAccountIdrequis, lesymbolId, letypede cotation ainsi que lefromTimestampet letoTimestamp.
Contraintes d'horodatage
Il est impossible de demander des données historiques de ticks pour une période supérieure à une semaine. Ainsi, la différence entre le toTimestamp et le fromTimestamp spécifiés ne doit pas être supérieure à 604800000.
- Envoyez le message nouvellement créé et recevez une réponse de type
ProtoOAGetTickDataRes. Accédez à son champtickDatapour obtenir une liste d'éléments de typeProtoOATickData. - Transformez les données du format relatif au prix réel du symbole. Pour ce faire, divisez chaque tick par 100000 et arrondissez le résultat aux décimales du symbole.
Demande d'un grand nombre de ticks
Il existe une limite sur le nombre de ticks qui peuvent être retournés dans un message ProtoOAGetTickDataRes. Si cette limite est dépassée (par exemple, s'il y a eu un nombre important de ticks pendant la période spécifiée), le message ProtoOAGetTickDataRes n'inclura que les X premiers ticks, où X est un nombre inférieur à la limite de ticks. La limite exacte dépend de la configuration du backend cTrader.
Pour vérifier s'il existe plus de ticks que ceux retournés dans le message reçu, utilisez le drapeau hasMore.
Obtenir des données de barres en temps réel ¶
Pour recevoir des barres en temps réel, effectuez les actions suivantes :
- Initialisez une variable représentant le message
ProtoOAGetTrendbarsReq. - Remplissez les propriétés de l'objet avec le
ctidTraderAccountIdrequis, lesymbolId, leProtoOATrendbarPeriod, lecountde trendbars à retourner, les horodatages UnixtoTimestampetfromTimestamp.
Contraintes d'horodatage
Il existe des contraintes sur la distance maximale possible entre le toTimestamp et le fromTimestamp. Ces contraintes dépendent du ProtoOATrendPeriod spécifié. Pour en savoir plus, cliquez ici.
-
Envoyez le message nouvellement créé et recevez une réponse de type
ProtoOAGetTrendbarsRes. Accédez à son champtrendbarpour obtenir une liste de barres de tendance. -
Transformez les données du format relatif au prix réel du symbole. Pour ce faire, obtenez d'abord le prix bas d'une trendbar et divisez-le par 100000. Ensuite, arrondissez le résultat aux décimales du symbole (par exemple, deux chiffres après le séparateur). Pour obtenir les prix haut, ouverture et clôture d'une trendbar, ajoutez le delta de la trendbar de chacun de ces prix au prix bas de la trendbar. Ensuite, divisez chaque nombre par 100000 et arrondissez le résultat aux décimales du symbole.
-
Initialisez un objet représentant le message
ProtoOASubscribeLiveTrendbarReq. -
Remplissez les propriétés de l'objet avec le
ctidTraderAccountIdrequis, leProtoOATrendbarPeriodet lesymbolId. -
Faites de même pour un objet représentant le message
ProtoOASubscribeSpotsReq. -
Envoyez le message
ProtoOASubscribeSpotsReqet le messageProtoOASubscribeLiveTrendbarReqdans cet ordre et recevez des réponses de typesProtoOASubscribeSpotsResetProtoOASubscribeLiveTrenbarsRes. À ce stade, vous êtes abonné aux données de barres en temps réel et vous devriez recevoir des messages de typeProtoOASpotEvent.
S'abonner aux trendbars en temps réel
Pour s'abonner avec succès aux trendbars en temps réel, il faut d'abord s'abonner aux événements spot.
- Lorsque vous recevez un nouveau message
ProtoOASpotEvent, utilisez son champtrendbarpour obtenir les données de la dernière barre fermée. - Transformez les données du format relatif aux prix réels du symbole. Pour ce faire, obtenez d'abord le prix bas d'une trendbar et divisez-le par 100000. Ensuite, arrondissez le résultat aux décimales du symbole (par exemple, deux chiffres après le séparateur). Pour obtenir les prix haut, ouverture et clôture d'une trendbar, ajoutez le delta de la trendbar de chacun de ces prix au prix bas de la trendbar. Ensuite, divisez chaque nombre par 100000 et arrondissez le résultat aux décimales du symbole.
Pour vous désabonner des données de trendbar en temps réel, vous pouvez toujours envoyer le message ProtoOAUnsubscribeLiveTrendbarsReq contenant le symbolId, la period et votre ctidTraderAccountId. Si votre demande est réussie, vous devriez recevoir une réponse de type ProtoOAUnsubscribeLiveTrendbarRes. Votre abonnement aux événements spot restera actif.
Obtenir des cotations en temps réel ¶
Pour recevoir des cotations bid et ask en temps réel pour un symbole, effectuez les actions suivantes :
- Initialisez un objet représentant le message
ProtoOASubscribeSpotsReq. - Remplissez les propriétés de l'objet avec le
ctidTraderAccountId, lesymbolId, et, optionnellement, le booléensubscribeToSpotTimestamp. - Envoyez le message nouvellement créé et recevez une réponse de type
ProtoOASubscribeSpotsRes. À ce stade, vous êtes abonné aux données de cotations en temps réel et vous devriez recevoir des messages de typeProtoOASpotEvent. - Lorsque vous recevez un nouveau message
ProtoOASpotEvent, accédez à ses champsbidetaskpour obtenir les dernières cotations. Notez que vous devez toujours transformer les données en une valeur de prix réelle en les divisant par 100000 et en les arrondissant aux décimales du symbole.
Champs bid et ask
Comme les champs bid et ask sont facultatifs, il est possible que vous ne voyiez pas nécessairement de messages ProtoOASpotEvent où les deux sont spécifiés.
Pour vous désabonner des données de cotation, vous pouvez toujours envoyer le message ProtoOAUnsubscribeSpotsReq contenant le symbolId et votre ctidTraderAccountId. Si votre demande est réussie, vous devriez recevoir une réponse de type ProtoOAUnsubscribeSpotsRes. À ce stade, vous devriez cesser de recevoir des événements spot.
Cotations de profondeur ¶
Enfin, vous pouvez également recevoir des cotations en direct de profondeur ou de niveau II pour un symbole. Pour ce faire, effectuez les actions suivantes.
Vous pouvez vous abonner et recevoir des cotations en direct de profondeur ou de niveau II pour un symbole à partir de l'API.
- Initialisez un objet représentant le message
ProtoOASubscribeDepthQuotesReq. - Remplissez les propriétés de l'objet avec le
ctidTraderAccountIdet lesymbolId. - Envoyez le message nouvellement créé et recevez une réponse de type
ProtoOASubscribeDepthQuotesRes. À ce stade, vous êtes abonné aux cotations de profondeur, ce qui signifie que vous devriez commencer à recevoir des messagesProtoOADepthEvent. - Lorsque vous recevez un nouveau message
ProtoOADepthEvent, vous devrez utiliser ses champsnewQuotesetdeletedQuotespour obtenir les dernières données de profondeur. Vous devrez également transformer les données en une valeur de prix réelle en les divisant par 100000 et en arrondissant le résultat aux décimales du symbole. Vous devrez également transformer la taille de la cotation de profondeur en unités en la divisant par 100.
Pour vous désabonner des événements de profondeur, vous pouvez toujours utiliser le message ProtoOAUnsubscribeDepthQuotesReq en spécifiant le symbolId et le ctidTraderAccountId. Vous devriez recevoir un message de type ProtoOAUnsubscribeDepthQuotesRes ; ensuite, vous devriez cesser de recevoir des événements de profondeur.