Vai al contenuto

Stabilisci una connessione

Puoi connetterti a un proxy cTrader Open API utilizzando il protocollo TCP o il protocollo WebSocket. Questa guida copre entrambe queste opzioni.

Utilizzo di TCP

Utilizzo SSL

La connessione del client TCP deve utilizzare SSL, altrimenti non sarai in grado di connetterti o interagire con l'API.

Puoi stabilire una connessione come segue utilizzando gli SDK ufficiali di cTrader Open API.

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

Il metodo OpenClient.Connect() chiama il metodo 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);
    });
}

Il client Python Open API tenta automaticamente di stabilire una connessione quando viene inizializzato.

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

Via WebSocket

Quando ci si connette tramite il protocollo WebSocket, l'host e la porta sono gli stessi utilizzati per la connessione tramite il protocollo TCP.

Ecco come gli SDK ufficiali di cTrader Open API stabiliscono una connessione via WebSocket.

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

Il metodo OpenClient.Connect() chiama il metodo 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();
}

L'SDK Python non supporta lo standard WebSocket.

Per un esempio di un'app web .NET Blazor che utilizza lo standard WebSocket per stabilire e mantenere una connessione, clicca qui.

Migliori pratiche

Ecco alcune linee guida da tenere a mente quando ci si connette a cTrader Open API:

  • Al massimo, dovresti creare due connessioni: una per i conti demo e una per i conti live. Ogni connessione può supportare un numero illimitato di conti di un certo tipo.
  • Dopo aver stabilito una connessione, dovresti passare il flusso di autorizzazione dell'app. Se invii messaggi prima che la tua applicazione sia autorizzata, riceverai un errore.
  • Per mantenere attiva una connessione, continua a inviare un evento heartbeat (ProtoHeartbeatEvent) ogni 10 secondi.
  • Utilizza una coda di messaggi per l'invio e la ricezione dei dati per evitare eventi di invio e ricezione concorrenti.