Aller au contenu

Établir une connexion

Vous pouvez vous connecter à un proxy cTrader Open API en utilisant soit le protocole TCP, soit le protocole WebSocket. Ce guide couvre ces deux options.

Utilisation de TCP

Utilisation de SSL

La connexion client TCP doit utiliser SSL, sinon vous ne pourrez pas vous connecter ou interagir avec l'API.

Vous pouvez établir une connexion comme suit en utilisant les SDK officiels de cTrader Open API.

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

La méthode OpenClient.Connect() appelle la méthode 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);
    });
}

Le client Python Open API tente automatiquement d'établir une connexion lors de son initialisation.

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

Via WebSocket

Lors de la connexion via le protocole WebSocket, l'hôte et le port sont les mêmes que lors de la connexion via le protocole TCP.

Voici comment les SDK officiels de cTrader Open API établissent une connexion via WebSocket.

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

La méthode OpenClient.Connect() appelle la méthode 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();
}

Le SDK Python ne prend pas en charge le standard WebSocket.

Pour un exemple d'application web .NET Blazor qui utilise le standard WebSocket pour établir et maintenir une connexion, cliquez ici.

Meilleures pratiques

Voici quelques directives à garder à l'esprit lors de la connexion à cTrader Open API :

  • Au maximum, vous devriez créer deux connexions : une pour les comptes de démo et une pour les comptes réels. Chaque connexion peut prendre en charge un nombre illimité de comptes d'un certain type.
  • Après l'établissement d'une connexion, vous devez passer par le processus d'autorisation de l'application. Si vous envoyez des messages avant que votre application ne soit autorisée, vous recevrez une erreur.
  • Pour maintenir une connexion active, continuez à envoyer un événement de pulsation (ProtoHeartbeatEvent) toutes les 10 secondes.
  • Utilisez une file d'attente de messages pour l'envoi et la réception de données afin d'éviter les événements d'envoi et de réception simultanés.