Saltar a contenido

Establecer una conexión

Puede conectarse a un proxy de Open API de cTrader utilizando el protocolo TCP o el protocolo WebSocket. Esta guía cubre ambas opciones.

Usando TCP

Uso de SSL

La conexión del cliente TCP debe usar SSL, de lo contrario no podrá conectarse ni interactuar con la API.

Puede establecer una conexión de la siguiente manera utilizando los SDK oficiales de Open API de cTrader.

1
2
_client = new OpenClient("live1.p.ctrader.com", 5035, TimeSpan.FromSeconds(10), useWebSocket: false);
await _client.Connect()

El método OpenClient.Connect() llama al método OpenClient.ConnectTcp().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
private async Task ConnectTcp()
{
    _tcpClient = new TcpClient
    {
        LingerState = new LingerOption(enable: true, 10)
    };
    await _tcpClient.ConnectAsync(Host, Port).ConfigureAwait(continueOnCapturedContext: false);
    _sslStream = new SslStream(_tcpClient.GetStream(), leaveInnerStreamOpen: false);
    await _sslStream.AuthenticateAsClientAsync(Host).ConfigureAwait(continueOnCapturedContext: false);
    Task.Run(delegate
    {
        ReadTcp(_cancellationTokenSource.Token);
    });
}

El cliente de Open API de Python intenta establecer una conexión automáticamente cuando se inicializa.

1
client = Client("live1.p.ctrader.com", 5035, TcpProtocol)

Vía WebSocket

Al conectarse a través del protocolo WebSocket, el host y puerto son los mismos que al conectarse a través del protocolo TCP.

Así es como los SDK oficiales de Open API de cTrader establecen una conexión vía WebSocket.

1
2
_client = new OpenClient("live1.p.ctrader.com", 5035, TimeSpan.FromSeconds(10), useWebSocket: true);
await _client.Connect()

El método OpenClient.Connect() llama al método OpenClient.ConnectWebSocket().

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
private async Task ConnectWebScoket()
{
    DefaultInterpolatedStringHandler defaultInterpolatedStringHandler = new DefaultInterpolatedStringHandler(7, 2);
    defaultInterpolatedStringHandler.AppendLiteral("wss://");
    defaultInterpolatedStringHandler.AppendFormatted(Host);
    defaultInterpolatedStringHandler.AppendLiteral(":");
    defaultInterpolatedStringHandler.AppendFormatted(Port);
    Uri url = new Uri(defaultInterpolatedStringHandler.ToStringAndClear());
    _websocketClient = new WebsocketClient(url, () => new ClientWebSocket())
    {
        IsTextMessageConversionEnabled = false,
        ReconnectTimeout = null,
        IsReconnectionEnabled = false,
        ErrorReconnectTimeout = null
    };
    _webSocketMessageReceivedDisposable = _websocketClient.MessageReceived.Select((ResponseMessage msg) => ProtoMessage.Parser.ParseFrom(msg.Binary)).Subscribe(new Action<ProtoMessage>(OnNext));
    _webSocketDisconnectionHappenedDisposable = _websocketClient.DisconnectionHappened.Subscribe(new Action<DisconnectionInfo>(OnWebSocketDisconnectionHappened));
    await _websocketClient.StartOrFail();
}

El SDK de Python no admite el estándar WebSocket.

Para ver un ejemplo de una aplicación web .NET Blazor que utiliza el estándar WebSocket para establecer y mantener una conexión, haga clic aquí.

Mejores prácticas

Aquí hay algunas pautas que debe tener en cuenta al conectarse a la Open API de cTrader:

  • Como máximo, debe crear dos conexiones: una para cuentas demo y otra para cuentas reales. Cada conexión puede admitir un número ilimitado de cuentas de un determinado tipo.
  • Después de establecer una conexión, debe pasar el flujo de autorización de la aplicación. Si envía mensajes antes de que su aplicación esté autorizada, recibirá un error.
  • Para mantener una conexión activa, siga enviando un evento de latido (ProtoHeartbeatEvent) cada 10 segundos.
  • Utilice una cola de mensajes para enviar y recibir datos para evitar eventos concurrentes de envío y recepción.