Comment utiliser l'accès réseau
L'accès à Internet est un cas d'utilisation courant pour les plug-ins, les cBots et les indicateurs. Auparavant, les algorithmes devaient demander des autorisations spéciales pour effectuer toute opération liée au réseau, ce qui pouvait susciter certaines inquiétudes de la part des utilisateurs, en particulier si ces algorithmes étaient distribués sans code source. Heureusement, cTrader permet désormais à tous les algorithmes d'accéder aux ressources web sans avoir de droits d'accès élevés.
Dans cet article et la vidéo correspondante, nous allons démontrer comment récupérer des actualités à partir d'une API gratuite qui utilise JSON pour la sérialisation et la désérialisation.
Consommer un point de terminaison d'API
Dans notre exemple, nous utiliserons notre cBot pour lire des informations d'actualités à partir d'une source externe et les imprimer dans le journal. À cette fin, nous utiliserons une API gratuite proposée par NewsData.
Pour voir à quoi ressemble l'API dans un navigateur, nous pouvons simplement accéder à ce lien.
https://newsdata.io/api/1/news?apikey=pub_32606381862bbdf07962c72ae7bc6135d6332&&language=en
Comme nous pouvons le voir, le point de terminaison fournit une séquence de paires clé-valeur que nous pouvons facilement consommer en utilisant un cBot. Nous commencerons par ajouter les espaces de noms contenant plusieurs classes et méthodes pour désérialiser et lire les données au format JSON.
1 2 3 4 5 6 7 8 9 10 11 12 | |
Nous pouvons ensuite déclarer un simple HttpClient() qui accédera à Internet.
1 | |
Ensuite, nous pourrons lire les données dans la méthode OnStart().
1 2 3 4 | |
La requête renverra une réponse brute au format JSON. Nous pouvons voir à quoi elle ressemble en utilisant une MessageBox.
1 2 3 | |
Désérialiser les données JSON
Pour désérialiser nos données JSON, nous utiliserons la classe JsonSerialiser. Cependant, avant de pouvoir le faire, nous devrons définir les classes requises pour la désérialisation.
NewsItem- cette classe représente un seul article d'actualité.News- cette classe contient une collection d'objetsNewsItem.
1 2 3 4 5 6 7 8 9 | |
Si vous souhaitez éviter d'écrire ce code standard, vous pouvez également utiliser un convertisseur en ligne de JSON vers C#.
À l'aide du convertisseur, nous avons défini nos classes 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 25 26 | |
Nous pouvons maintenant écrire notre code de désérialisation.
1 | |
De plus, nous pouvons ajouter le code suivant pour imprimer les titres des actualités dans le journal.
1 2 3 4 5 6 7 | |
Si nous construisons et exécutons notre cBot, nous verrons qu'une exception apparaît dans le journal. Cependant, si nous modifions les droits d'accès du cBot en AccessRights.FullAccess, nous verrons que notre cBot fonctionne comme prévu.
Accéder à Internet sans droits d'accès élevés
Pour éviter une situation où notre cBot doit demander des droits d'accès élevés, nous pouvons modifier notre méthode OnStart() comme suit.
1 2 3 4 | |
Si nous définissons les droits d'accès sur AccessRights.None et reconstruisons notre cBot, nous devrions voir les titres des actualités s'imprimer dans le journal sans aucun problème. Avec un peu plus d'efforts, notre cBot peut être transformé en un lecteur d'actualités sophistiqué disponible directement dans n'importe quel graphique cTrader !