Zum Inhalt

So arbeiten Sie mit WebSockets in cTrader Algo

Die cTrader Algo API ermöglicht es Händlern und Entwicklern, über eine WebSocket-Verbindung auf verschiedene Webdienste und Ressourcen zuzugreifen. Das WebSocket-Protokoll ist effizienter als HTTP für den Netzwerkzugriff, da es schneller ist und Echtzeit-Datenübertragung unterstützt.

In diesem Artikel und dem dazugehörigen Video erfahren Sie, wie Sie Nachrichten über WebSockets senden und empfangen.

cBot erstellen

In unserem Beispiel beabsichtigen wir, eine Verbindung zu einem TraderMade-Feed herzustellen und dann die eingehenden Informationen in unserem cBot-Protokoll auszugeben.

Zuerst navigieren wir zur Algo-App, um einen neuen cBot zu erstellen. Klicken Sie auf der Registerkarte cBots auf die Schaltfläche Neu. Geben Sie einen Namen für den cBot ein, z. B. Web Sockets Example, und klicken Sie dann auf Erstellen.

Wir können jetzt den cBot-Code für unsere Zwecke ändern. Beginnen wir mit der Definition eines neuen WebSocketClient.

1
private WebSocketClient _webSocketClient = new WebSocketClient();

Dann initialisieren wir unseren Endpunkt Uri, der der Ort ist, mit dem wir uns verbinden werden.

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

Wir müssen die Methode OnStart() bearbeiten, Uri verwenden, um eine Verbindung zum Streaming-Dienst herzustellen, und das Ereignis TextReceived abonnieren. Dieses Ereignis wird ausgelöst, wenn Text über die Verbindung unsere Anwendung erreicht.

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

Wir möchten die empfangene Nachricht in TextReceived ausgeben.

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

Sie können den vollständigen Code unten kopieren:

 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
        }
    }
}

Klicken Sie auf die Schaltfläche Build oder verwenden Sie die Tastenkombination Ctrl+B, um den cBot zu erstellen.

Klicken Sie auf die Schaltfläche Instanz hinzufügen für den cBot. Wählen Sie die Option Lokal, wählen Sie ein Symbol und ein Konto aus und klicken Sie dann auf die Schaltfläche Instanz hinzufügen.

Navigieren Sie zur Registerkarte Logs. Sie sollten einige cBot-Nachrichten sehen, die die Verbindung bestätigen.

Symbol-Kursfeed abonnieren

Wir kehren zum Code-Editor für unseren Web Sockets Example cBot in der Algo-App zurück. Hier möchten wir einen Symbol-Kursfeed über den Dienst abonnieren, mit dem wir uns kürzlich verbunden haben.

Schreiben Sie den Code, um eine Abonnementnachricht an den Dienst in unserer Methode OnStart() zu senden.

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

_webSocketClient.Send(data);

Hinweis

Wir haben das Codebeispiel und den Token von der TraderMade-Website erhalten.

Ändern Sie den Befehl Print, um Klammern zu ersetzen, die in der API-Methode Print() nicht verwendet werden können.

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

Schließen Sie abschließend die Verbindung in der Methode OnStop().

1
_webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);

Sie können den vollständigen Code unten kopieren:

 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);
        }
    }
}

Erstellen Sie den cBot neu und starten Sie ihn dann erneut.

Navigieren Sie wie zuvor zur Registerkarte Logs. Jetzt sollten Sie den Symbol-Kurs in Echtzeit gestreamt sehen.

Dieser Artikel hat Ihnen gezeigt, wie Sie WebSockets verwenden, um Informationen oder Nachrichten in cTrader zu senden und zu empfangen.