Saltar a contenido

Cómo trabajar con WebSockets en cTrader Algo

La API de cTrader Algo permite a los operadores y desarrolladores acceder a varios servicios web y recursos a través de una conexión WebSocket. El protocolo WebSocket es más eficiente que HTTP para el acceso a la red porque es más rápido y admite la transferencia de datos en tiempo real.

En este artículo y su vídeo correspondiente, aprenderá a enviar y recibir mensajes a través de WebSockets.

Crear un cBot

En nuestro ejemplo, pretendemos conectarnos a un feed de TraderMade y luego imprimir la información entrante en nuestro registro de cBot.

Primero, navegamos a la aplicación Algo para crear un nuevo cBot. En la pestaña cBots, haga clic en el botón Nuevo. Escriba un nombre para el cBot, como Ejemplo de Web Sockets, y luego haga clic en Crear.

Ahora podemos modificar el código del cBot para nuestros propósitos. Empecemos definiendo un nuevo WebSocketClient.

1
private WebSocketClient _webSocketClient = new WebSocketClient();

Luego inicializamos nuestro Uri de punto final, que es la ubicación a la que nos conectaremos.

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

Necesitamos editar el método OnStart(), usar Uri para conectarnos al servicio de streaming y suscribirnos al evento TextReceived. Este evento se activa cada vez que el texto llega a nuestra aplicación a través de la conexión.

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

Queremos imprimir el mensaje recibido en TextReceived.

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

Puede copiar el código completo a continuación:

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

Haga clic en el botón Construir o use el atajo Ctrl+B para construir el cBot.

Haga clic en el botón Añadir instancia para el cBot. Seleccione la opción Localmente, elija un símbolo y una cuenta, y luego haga clic en el botón Añadir instancia.

Navegue a la pestaña Registros. Debería ver algunos mensajes del cBot que confirman la conexión.

Suscribirse a un feed de precios de símbolo

Volvemos al editor de código de nuestro Ejemplo de Web Sockets cBot en la aplicación Algo. Aquí, queremos suscribirnos a un feed de precios de símbolo utilizando el servicio al que nos hemos conectado recientemente.

Escriba el código para enviar un mensaje de suscripción al servicio en nuestro método OnStart().

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

_webSocketClient.Send(data);

Nota

Obtuvimos el ejemplo de código y el token del sitio web de TraderMade.

Modifique el comando Print para reemplazar los corchetes, que no se pueden usar en el método Print() de la API.

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

Finalmente, cierre la conexión en el método OnStop().

1
_webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);

Puede copiar el código completo a continuación:

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

Reconstruya el cBot y luego inícielo de nuevo.

Navegue a la pestaña Registros como lo hizo antes. Ahora, debería ver el precio del símbolo transmitido en tiempo real.

Este artículo le mostró cómo usar WebSockets para enviar y recibir información o mensajes en cTrader.