Vai al contenuto

Come lavorare con i WebSocket in cTrader Algo

L'API di cTrader Algo consente a trader e sviluppatori di accedere a vari servizi web e risorse tramite una connessione WebSocket. Il protocollo WebSocket è più efficiente di HTTP per l'accesso alla rete perché è più veloce e supporta il trasferimento di dati in tempo reale.

In questo articolo e nel video corrispondente, imparerai come inviare e ricevere messaggi tramite WebSocket.

Creare un cBot

Nel nostro esempio, intendiamo connetterci a un feed TraderMade e quindi stampare le informazioni in arrivo nel log del nostro cBot.

Per prima cosa, andiamo sull'app Algo per creare un nuovo cBot. Nella scheda cBot, fai clic sul pulsante Nuovo. Digita un nome per il cBot, come Web Sockets Example, quindi fai clic su Crea.

Ora possiamo modificare il codice del cBot per i nostri scopi. Iniziamo definendo un nuovo WebSocketClient.

1
private WebSocketClient _webSocketClient = new WebSocketClient();

Quindi inizializziamo il nostro endpoint Uri, che è la posizione a cui ci connetteremo.

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

Dobbiamo modificare il metodo OnStart(), usare Uri per connetterci al servizio di streaming e sottoscrivere l'evento TextReceived. Questo evento viene generato ogni volta che il testo raggiunge la nostra applicazione tramite la connessione.

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

Vogliamo stampare il messaggio ricevuto in TextReceived.

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

Puoi copiare il codice completo qui sotto:

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

Fai clic sul pulsante Compila o usa la scorciatoia Ctrl+B per compilare il cBot.

Fai clic sul pulsante Aggiungi istanza per il cBot. Seleziona l'opzione Localmente, scegli un simbolo e un conto, quindi fai clic sul pulsante Aggiungi istanza.

Vai alla scheda Log. Dovresti vedere alcuni messaggi del cBot che confermano la connessione.

Iscriviti a un feed di prezzo del simbolo

Torniamo all'editor di codice per il nostro cBot Web Sockets Example nell'app Algo. Qui vogliamo iscriverci a un feed di prezzo del simbolo utilizzando il servizio a cui ci siamo appena connessi.

Scrivi il codice per inviare un messaggio di iscrizione al servizio nel nostro metodo OnStart().

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

_webSocketClient.Send(data);

Nota

Abbiamo ottenuto il codice di esempio e il token dal sito web TraderMade.

Modifica il comando Print per sostituire le parentesi, che non possono essere utilizzate nel metodo API Print().

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

Infine, chiudi la connessione nel metodo OnStop().

1
_webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);

Puoi copiare il codice completo qui sotto:

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

Ricompila il cBot e poi avvialo di nuovo.

Vai alla scheda Log come hai fatto prima. Adesso dovresti vedere il prezzo del simbolo trasmesso in tempo reale.

Questo articolo ti ha mostrato come utilizzare i WebSocket per inviare e ricevere informazioni o messaggi in cTrader.