콘텐츠로 이동

연결 설정

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 웹 앱의 예는 여기를 클릭하세요.

모범 사례

cTrader Open API에 연결할 때 염두에 두어야 할 몇 가지 지침은 다음과 같습니다:

  • 최대 두 개의 연결을 생성해야 합니다: 하나는 데모 계정용이고 다른 하나는 라이브 계정용입니다. 각 연결은 특정 유형의 계정을 무제한으로 지원할 수 있습니다.
  • 연결이 설정된 후, 앱 인증 플로우를 통과해야 합니다. 애플리케이션이 인증되기 전에 메시지를 보내면 오류를 받게 됩니다.
  • 연결을 유지하기 위해, 10초마다 하트비트 이벤트(ProtoHeartbeatEvent)를 보내세요.
  • 동시 송수신 이벤트를 피하기 위해 메시지 큐를 사용하여 데이터를 송수신하세요.