Langkau tajuk talian

Wujudkan sambungan

Anda boleh menyambung ke proksi cTrader Open API menggunakan sama ada protokol TCP atau protokol WebSocket. Panduan ini meliputi kedua-dua pilihan ini.

Menggunakan TCP

Penggunaan SSL

Sambungan pelanggan TCP mesti menggunakan SSL, jika tidak, anda tidak akan dapat menyambung atau berinteraksi dengan API.

Anda boleh mewujudkan sambungan seperti berikut menggunakan SDK rasmi cTrader Open API.

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

Kaedah OpenClient.Connect() memanggil kaedah 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);
    });
}

Pelanggan Open API Python secara automatik cuba mewujudkan sambungan apabila ia dimulakan.

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

Melalui WebSocket

Apabila menyambung melalui protokol WebSocket, hos dan port adalah sama seperti ketika menyambung melalui protokol TCP.

Berikut adalah cara SDK rasmi cTrader Open API mewujudkan sambungan melalui WebSocket.

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

Kaedah OpenClient.Connect() memanggil kaedah 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();
}

SDK Python tidak menyokong piawaian WebSocket.

Untuk contoh aplikasi web .NET Blazor yang menggunakan piawaian WebSocket untuk mewujudkan dan mengekalkan sambungan, klik di sini.

Amalan terbaik

Berikut adalah beberapa garis panduan yang perlu anda ingat apabila menyambung ke cTrader Open API:

  • Sebanyak-banyaknya, anda perlu mewujudkan dua sambungan: satu untuk akaun demo dan satu untuk akaun live. Setiap sambungan boleh menyokong bilangan akaun yang tidak terhad bagi jenis tertentu.
  • Selepas sambungan diwujudkan, anda perlu melalui aliran pengesahan aplikasi. Jika anda menghantar sebarang mesej sebelum aplikasi anda disahkan, anda akan menerima ralat.
  • Untuk mengekalkan sambungan, teruskan menghantar acara denyut jantung (ProtoHeartbeatEvent) setiap 10 saat.
  • Gunakan barisan mesej untuk menghantar dan menerima data untuk mengelakkan acara penghantaran dan penerimaan serentak.