Zum Inhalt

Herstellen einer Verbindung

Sie können eine Verbindung zu einem cTrader Open API-Proxy entweder über das TCP-Protokoll oder über das WebSocket-Protokoll herstellen. Dieser Leitfaden behandelt beide Optionen.

Verwendung von TCP

SSL-Verwendung

Die TCP-Client-Verbindung muss SSL verwenden, andernfalls können Sie keine Verbindung herstellen oder mit der API interagieren.

Sie können eine Verbindung wie folgt mit den offiziellen cTrader Open API SDKs herstellen.

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

Die Methode OpenClient.Connect() ruft die Methode OpenClient.ConnectTcp() auf.

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

Der Python Open API-Client versucht automatisch, eine Verbindung herzustellen, wenn er initialisiert wird.

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

Über WebSocket

Beim Verbinden über das WebSocket-Protokoll sind Host und Port dieselben wie beim Verbinden über das TCP-Protokoll.

So stellen die offiziellen cTrader Open API SDKs eine Verbindung über WebSocket her.

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

Die Methode OpenClient.Connect() ruft die Methode OpenClient.ConnectWebSocket() auf.

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

Das Python SDK unterstützt den WebSocket-Standard nicht.

Ein Beispiel für eine .NET Blazor-Web-App, die den WebSocket-Standard verwendet, um eine Verbindung herzustellen und aufrechtzuerhalten, finden Sie hier.

Best Practices

Hier sind einige Richtlinien, die Sie beim Verbinden mit der cTrader Open API beachten sollten:

  • Sie sollten höchstens zwei Verbindungen erstellen: eine für Demokonten und eine für Live-Konten. Jede Verbindung kann eine unbegrenzte Anzahl von Konten eines bestimmten Typs unterstützen.
  • Nachdem eine Verbindung hergestellt wurde, sollten Sie den App-Autorisierungsablauf durchlaufen. Wenn Sie Nachrichten senden, bevor Ihre Anwendung autorisiert ist, erhalten Sie einen Fehler.
  • Um eine Verbindung aufrechtzuerhalten, senden Sie alle 10 Sekunden ein Heartbeat-Ereignis (ProtoHeartbeatEvent).
  • Verwenden Sie eine Nachrichtenwarteschlange zum Senden und Empfangen von Daten, um gleichzeitige Sende- und Empfangsereignisse zu vermeiden.