Aller au contenu

Comment utiliser les WebSockets dans cTrader Algo

L'API cTrader Algo permet aux traders et aux développeurs d'accéder à divers services web et ressources via une connexion WebSocket. Le protocole WebSocket est plus efficace que HTTP pour l'accès réseau car il est plus rapide et prend en charge le transfert de données en temps réel.

Dans cet article et la vidéo correspondante, vous apprendrez à envoyer et recevoir des messages via WebSockets.

Créer un cBot

Dans notre exemple, nous avons l'intention de nous connecter à un flux TraderMade, puis d'imprimer les informations entrantes dans notre journal de cBot.

Tout d'abord, nous naviguons vers l'application Algo pour créer un nouveau cBot. Dans l'onglet cBots, cliquez sur le bouton Nouveau. Saisissez un nom pour le cBot, tel que Web Sockets Example, puis cliquez sur Créer.

Nous pouvons maintenant modifier le code du cBot pour nos besoins. Commençons par définir un nouveau WebSocketClient.

1
private WebSocketClient _webSocketClient = new WebSocketClient();

Ensuite, nous initialisons notre point de terminaison Uri, qui est l'emplacement auquel nous allons nous connecter.

1
private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");

Nous devons modifier la méthode OnStart(), utiliser Uri pour nous connecter au service de streaming et nous abonner à l'événement TextReceived. Cet événement est déclenché chaque fois qu'un texte atteint notre application via la connexion.

1
2
3
4
5
protected override void OnStart()
{
    _webSocketClient.Connect(_targetUri);
    _webSocketClient.TextReceived += _webSocketClient_TextReceived;
}

Nous voulons imprimer le message reçu dans TextReceived.

1
2
3
4
private void TextReceived(WebSocketClientTextReceivedEventArgs obj)
{
    Print(obj.Text);
}

Vous pouvez copier le code complet 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
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class WebSocketsExample : Robot
    {
        private WebSocketClient _webSocketClient = new WebSocketClient();
        private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");

        protected override void OnStart()
        {
            _webSocketClient.Connect(_targetUri);

            _webSocketClient.TextReceived += _webSocketClient_TextReceived;
        }

        private void _webSocketClient_TextReceived(WebSocketClientTextReceivedEventArgs obj)
        {
            Print(obj.Text);
        }

        protected override void OnTick()
        {
            // Handle price updates here
        }

        protected override void OnStop()
        {
            // Handle cBot stop here
        }
    }
}

Cliquez sur le bouton Build ou utilisez le raccourci Ctrl+B pour créer le cBot.

Cliquez sur le bouton Ajouter une instance pour le cBot. Sélectionnez l'option Localement, choisissez un symbole et un compte, puis cliquez sur le bouton Ajouter une instance.

Accédez à l'onglet Journaux. Vous devriez voir quelques messages du cBot qui confirment la connexion.

S'abonner à un flux de prix de symbole

Nous retournons à l'éditeur de code pour notre cBot Web Sockets Example dans l'application Algo. Ici, nous voulons nous abonner à un flux de prix de symbole en utilisant le service auquel nous venons de nous connecter.

Écrivez le code pour envoyer un message d'abonnement au service dans notre méthode OnStart().

1
2
3
var data = "{\"userKey\":\"wsI4foSciCjMyCuoc2xw\", \"symbol\":\"EURUSD\"}";

_webSocketClient.Send(data);

Remarque

Nous avons obtenu l'exemple de code et le jeton sur le site web de TraderMade.

Modifiez la commande Print pour remplacer les crochets, qui ne peuvent pas être utilisés dans la méthode Print() de l'API.

1
Print(obj.Text.Replace("{", "").Replace("}","").ToString()); 

Enfin, fermez la connexion dans la méthode OnStop().

1
_webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);

Vous pouvez copier le code complet 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
41
using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None, AddIndicators = true)]
    public class WebSocketsExample : Robot
    {
        private WebSocketClient _webSocketClient = new WebSocketClient();
        private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");

        protected override void OnStart()
        {
            _webSocketClient.Connect(_targetUri);

            _webSocketClient.TextReceived += _webSocketClient_TextReceived;

            var data = "{\"userKey\":\"wsI4foSciCjMyCuoc2xw\", \"symbol\":\"EURUSD\"}";

            _webSocketClient.Send(data);
        }

        private void _webSocketClient_TextReceived(WebSocketClientTextReceivedEventArgs obj)
        {
            Print(obj.Text.Replace("{", "").Replace("}", "").ToString());
        }

        protected override void OnTick()
        {
            // Handle price updates here
        }

        protected override void OnStop()
        {
            _webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);
        }
    }
}

Reconstruisez le cBot, puis redémarrez-le.

Accédez à l'onglet Journaux comme vous l'avez fait précédemment. Maintenant, vous devriez voir le prix du symbole diffusé en temps réel.

Cet article vous a montré comment utiliser les WebSockets pour envoyer et recevoir des informations ou des messages dans cTrader.