コンテンツにスキップ

接続を確立する

cTrader Open APIプロキシには、TCPプロトコルまたはWebSocketプロトコルのいずれかを使用して接続できます。 このガイドでは、これらの両方のオプションについて説明します。

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ウェブアプリの例については、こちらをクリックしてください。

ベストプラクティス

cTrader Open APIに接続する際に心に留めておくべきいくつかのガイドラインを以下に示します:

  • 最大で2つの接続を作成する必要があります:1つはデモ口座用、もう1つはライブ口座用です。 各接続は、特定のタイプの無制限の口座をサポートできます。
  • 接続が確立された後、アプリ認証フローを通過する必要があります。 アプリケーションが認証される前にメッセージを送信すると、エラーが返されます。
  • 接続を維持するために、10秒ごとにハートビートイベント(ProtoHeartbeatEvent)を送信し続けてください。
  • データの送受信を同時に行わないように、メッセージキューを使用してください。