跳转至

建立连接

您可以使用 TCP 协议或 WebSocket 协议连接到 cTrader Open API 代理。 本指南涵盖了这两种选项。

使用 TCP

SSL 使用

TCP 客户端连接必须使用 SSL,否则您将无法连接或与 API 交互。

您可以使用官方的 cTrader Open API SDK 按以下方式建立连接。

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

OpenClient.Connect() 方法调用 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);
    });
}

Python Open API 客户端在初始化时会自动尝试建立连接。

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

通过 WebSocket

通过 WebSocket 协议连接时,主机和端口与通过 TCP 协议连接时相同。

以下是官方 cTrader Open API SDK 通过 WebSocket 建立连接的方式。

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

OpenClient.Connect() 方法调用 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();
}

Python SDK 不支持 WebSocket 标准。

有关使用 WebSocket 标准建立和维护连接的 .NET Blazor Web 应用程序示例,请点击此处

最佳实践

以下是连接 cTrader Open API 时应牢记的一些准则:

  • 最多应创建两个连接:一个用于模拟账户,一个用于实盘账户。 每个连接可以支持无限数量的某种类型的账户。
  • 建立连接后,您应通过应用程序授权流程。 如果在您的应用程序获得授权之前发送任何消息,您将收到错误。
  • 要保持连接活跃,请每 10 秒发送一次心跳事件(ProtoHeartbeatEvent)。
  • 使用消息队列发送和接收数据,以避免并发发送和接收事件。