Conversion de taux de symbole¶
La conversion de taux de symbole est une action essentielle si vous voulez que votre application inclue des fonctionnalités liées aux calculs de P&P.
Cas d'utilisation
Il est nécessaire d'effectuer des conversions de taux de symbole lors du calcul des commissions, des swaps et des dividendes. Les commissions, les swaps et les dividendes sont généralement libellés en USD. Cependant, selon votre courtier et vos préférences, la devise de dépôt de votre compte peut être dans n'importe quel autre actif que l'USD. Pour définir avec précision les commissions, les swaps et les dividendes, vous devriez connaître le taux de change entre l'USD et la devise de dépôt de votre compte.
Chaînes de conversion
Considérez le prix de chaque symbole individuel comme un taux de conversion entre son actif de base et son actif de cotation. La tâche d'obtenir des taux de conversion devient compliquée s'il n'y a pas de symboles qui relient directement un actif donné à un autre actif. Heureusement, le backend de cTrader peut automatiquement créer des chaînes de conversion qui agissent comme les chemins de conversion les plus courts possibles d'un actif à un autre.
Par exemple, si vous voulez convertir EUR en NZD, et qu'il n'y a pas de symbole EURNZD sur le serveur de trading, cTrader proposera une chaîne qui servira d'étapes intermédiaires dans le processus de conversion. Selon la disponibilité des symboles, une telle chaîne pourrait ressembler à EURUSD-USDCAD-CADNZD, EURCFH-CFHUSD-USDNZD, ou même EURCAD-CADUSD-USDCFH-CFHNZD.
Pour convertir entre deux actifs, votre application doit effectuer les actions suivantes :
- Accéder aux ID des actifs que vous voulez convertir.
- Obtenir une chaîne de conversion qui inclut un ou plusieurs symboles légers.
- S'abonner et gérer les événements spot.
- Suivre la chaîne de conversion et renvoyer le taux de conversion final.
Ci-dessous, nous expliquons chacune de ces actions en détail.
Accéder aux ID des actifs ¶
Les ID des actifs peuvent être accessibles directement en tant que propriétés de l'entité de symbole léger (représentée par le message modèle ProtoOALightSymbol). De plus, vous pouvez obtenir l'ID de la devise de dépôt d'un compte directement à partir de son entité ProtoOaTrader associée.
Notez que l'exemple ci-dessous n'obtient les ID d'actifs que pour un seul symbole. Pour effectuer la même opération pour plusieurs symboles, vous devriez ajouter une boucle ou utiliser une autre solution appropriée (par exemple, une méthode map() ou équivalente).
Travailler avec JSON
Lorsque vous travaillez avec JSON, vous pouvez toujours réutiliser le code ci-dessous et d'autres extraits de code de ce tutoriel. Cependant, assurez-vous de remplacer les noms des classes Proto... par les noms de vos classes personnalisées et faites les modifications nécessaires pour tenir compte de votre client TCP et WebSocket préféré.
symbol est une variable de type ProtoOALightSymbol. Si vous utilisez JSON, elle peut être de n'importe quel type personnalisé représentant le message ProtoOALightSymbol.
1 2 | |
Dans l'exemple ci-dessous, nous obtenons l'ID de la devise de dépôt de l'objet account qui est de type ProtoOATrader.
1 | |
symbol est une variable représentant un message de type ProtoOALightSymbol.
1 2 | |
Dans l'exemple ci-dessous, nous obtenons l'ID de la devise de dépôt de l'objet account qui représente le message modèle ProtoOATrader.
1 | |
Obtenir une chaîne de conversion ¶
Pour obtenir une chaîne de conversion valide, votre application doit envoyer le message ProtoOASymbolsForConversionReq avec ses champs firstAssetId et lastAssetId définis sur les ID des actifs que vous voulez convertir. Lorsque vous recevez une réponse de type ProtoOASymbolsForConversionRes, stockez son champ répété symbol dans une collection.
Voici comment vous pouvez effectuer cette action via les SDK officiels.
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 | |
1 2 3 4 5 | |
Ajoutez également la condition suivante au callback onMessageReceived.
1 2 3 | |
Remarque
Nous recommandons vivement d'obtenir tous les symboles de chaîne de conversion pour chaque actif lorsque vous demandez et recevez pour la première fois les données d'actif du serveur. Sinon, vous devrez envoyer le message ProtoOASymbolsForConversionReq chaque fois que vous aurez besoin de convertir des taux, ce qui, dans certains cas, peut être plusieurs fois par seconde.
Remarque
Comme les entités ProtoOALightSymbol ne contiennent aucun champ représentant les prix bid ou ask, nous recommandons vivement de créer des classes Symbol personnalisées ou équivalentes afin que vous puissiez facilement créer de nouveaux symboles par programmation et mettre à jour leurs propriétés lorsque certains événements sont déclenchés. Vous devrez convertir les symboles légers en objets de cette classe séparément.
S'abonner et gérer les événements spot ¶
Pour suivre la chaîne de conversion du début à la fin, vous devez vous abonner au ProtoOASpotEvent pour tous les symboles inclus dans la chaîne. Voici comment procéder via les SDK officiels.
Avant d'effectuer les opérations listées ci-dessous, créez une classe Symbol ou équivalente afin que vous puissiez facilement créer de nouveaux symboles par programmation et mettre à jour leurs propriétés lorsque certains événements sont déclenchés. Dans les exemples ci-dessous, notre classe Symbol inclut des objets ProtoOASymbol et ProtoOALightSymbol comme propriétés.
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 | |
Nous devons également nous abonner aux événements spot et les gérer. Dans l'exemple ci-dessous, nous accédons à la collection symbols qui stocke nos symboles légers. Nous trouvons l'objet symbole dont l'ID correspond au champ symbolId du ProtoOASpotEvent que nous venons de recevoir. Enfin, nous mettons à jour les propriétés bid et ask du symbol en utilisant la méthode auxiliaire GetPriceFromRelative.
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 | |
Nous pouvons utiliser la fonction suivante pour nous abonner à ProtoOASpotEvent pour un symbole particulier. Notez qu'elle ne s'abonne qu'à un seul symbole, ce qui signifie que vous devriez appeler cette fonction pour chaque symbole léger dans votre collection de symboles de conversion.
1 2 3 4 5 6 7 | |
Pour gérer les événements spot, nous pouvons ajouter les conditions suivantes à notre callback onMessageReceived.
1 2 3 | |
Enfin, voici notre callback onSpotEvent.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | |
Dans notre classe Symbol, la fonction getPipsFromRelative est définie comme suit :
1 2 3 4 | |
Notez que les valeurs des propriétés pipPosition et digits doivent être obtenues séparément.
Suivez la chaîne de conversion et retournez le taux de conversion final ¶
À ce stade, tous les symboles de votre chaîne de conversion devraient recevoir des taux spot et vous devriez pouvoir accéder aux prix acheteur et vendeur précis pour chaque symbole. Il ne reste plus qu'à parcourir la chaîne de conversion et à retourner le taux final. Cela peut être fait comme suit :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 | |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | |