ข้ามไปที่เนื้อหา

สร้างการเชื่อมต่อ

คุณสามารถเชื่อมต่อกับ cTrader Open API proxy โดยใช้โปรโตคอล TCP หรือโปรโตคอล WebSocket คู่มือนี้ครอบคลุมทั้งสองตัวเลือก

การใช้ TCP

การใช้ SSL

การเชื่อมต่อไคลเอนต์ TCP ต้องใช้ SSL มิฉะนั้นคุณจะไม่สามารถเชื่อมต่อหรือโต้ตอบกับ API ได้

คุณสามารถสร้างการเชื่อมต่อได้ดังต่อไปนี้โดยใช้ SDK อย่างเป็นทางการของ cTrader Open API

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

นี่คือวิธีที่ SDK อย่างเป็นทางการของ cTrader Open API สร้างการเชื่อมต่อผ่าน 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();
}

SDK Python ไม่รองรับมาตรฐาน WebSocket

สำหรับตัวอย่างแอปพลิเคชันเว็บ .NET Blazor ที่ใช้มาตรฐาน WebSocket เพื่อสร้างและรักษาการเชื่อมต่อ คลิกที่นี่

แนวปฏิบัติที่ดีที่สุด

นี่คือแนวทางบางประการที่คุณควรจำไว้เมื่อเชื่อมต่อกับ cTrader Open API:

  • คุณควรสร้างการเชื่อมต่อมากที่สุดสองครั้ง: หนึ่งครั้งสำหรับบัญชีทดลองและหนึ่งครั้งสำหรับบัญชีจริง แต่ละการเชื่อมต่อสามารถรองรับบัญชีจำนวนไม่จำกัดของประเภทหนึ่ง
  • หลังจากสร้างการเชื่อมต่อแล้ว คุณควรผ่าน ขั้นตอนการรับรองแอป หากคุณส่งข้อความใด ๆ ก่อนที่แอปพลิเคชันของคุณจะได้รับการรับรอง คุณจะได้รับข้อผิดพลาด
  • เพื่อรักษาการเชื่อมต่อให้ใช้งานได้ ให้ส่งเหตุการณ์ heartbeat (ProtoHeartbeatEvent) ทุก 10 วินาที
  • ใช้คิวข้อความสำหรับการส่งและรับข้อมูลเพื่อหลีกเลี่ยงเหตุการณ์การส่งและรับพร้อมกัน