Lewati ke isi

Buat koneksi

Anda dapat terhubung ke proxy cTrader Open API menggunakan protokol TCP atau protokol WebSocket. Panduan ini mencakup kedua opsi tersebut.

Menggunakan TCP

Penggunaan SSL

Koneksi klien TCP harus menggunakan SSL, jika tidak Anda tidak akan dapat terhubung atau berinteraksi dengan API.

Anda dapat membuat koneksi sebagai berikut menggunakan SDK resmi cTrader Open API.

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

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

Klien Python Open API secara otomatis mencoba membuat koneksi saat diinisialisasi.

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

Via WebSocket

Saat terhubung melalui protokol WebSocket, host dan port sama seperti saat terhubung melalui protokol TCP.

Berikut adalah cara SDK resmi cTrader Open API membuat koneksi via WebSocket.

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

Metode OpenClient.Connect() memanggil metode 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 mendukung standar WebSocket.

Untuk contoh aplikasi web .NET Blazor yang menggunakan standar WebSocket untuk membuat dan mempertahankan koneksi, klik di sini.

Praktik terbaik

Berikut adalah beberapa panduan yang harus Anda ingat saat terhubung ke cTrader Open API:

  • Paling banyak, Anda harus membuat dua koneksi: satu untuk akun demo dan satu untuk akun riil. Setiap koneksi dapat mendukung jumlah akun yang tidak terbatas dari jenis tertentu.
  • Setelah koneksi dibuat, Anda harus melewati alur otorisasi aplikasi. Jika Anda mengirim pesan apa pun sebelum aplikasi Anda diotorisasi, Anda akan menerima kesalahan.
  • Untuk menjaga koneksi tetap hidup, terus kirim peristiwa heartbeat (ProtoHeartbeatEvent) setiap 10 detik.
  • Gunakan antrian pesan untuk mengirim dan menerima data untuk menghindari peristiwa pengiriman dan penerimaan bersamaan.