cTrader Algo에서 WebSockets 작업 방법
cTrader Algo API는 트레이더와 개발자가 WebSocket 연결을 통해 다양한 웹 서비스와 리소스에 접근할 수 있도록 합니다. WebSocket 프로토콜은 HTTP보다 네트워크 접근에 더 효율적이며, 더 빠르고 실시간 데이터 전송을 지원합니다.
이 글과 해당 비디오에서는 WebSockets를 통해 메시지를 보내고 받는 방법을 배우게 됩니다.
cBot 생성
우리의 예제에서는 TraderMade 피드에 연결한 다음, 들어오는 정보를 cBot 로그에 출력하려고 합니다.
먼저, Algo 앱으로 이동하여 새로운 cBot을 만듭니다. cBot 탭에서 새로운 버튼을 클릭합니다. cBot의 이름을 입력합니다(예: 웹 소켓 예제), 그리고 생성를 클릭합니다.

이제 우리의 목적에 맞게 cBot 코드를 수정할 수 있습니다. 먼저 새로운 WebSocketClient를 정의해 보겠습니다.
| private WebSocketClient _webSocketClient = new WebSocketClient();
|
그런 다음 연결할 위치인 엔드포인트 Uri를 초기화합니다.
| private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");
|
OnStart() 메서드를 편집하여 Uri를 사용하여 스트리밍 서비스에 연결하고 TextReceived 이벤트를 구독해야 합니다. 이 이벤트는 연결을 통해 애플리케이션에 텍스트가 도달할 때마다 발생합니다.
| protected override void OnStart()
{
_webSocketClient.Connect(_targetUri);
_webSocketClient.TextReceived += _webSocketClient_TextReceived;
}
|
TextReceived에서 받은 메시지를 출력하려고 합니다.
| private void TextReceived(WebSocketClientTextReceivedEventArgs obj)
{
Print(obj.Text);
}
|
아래에서 전체 코드를 복사할 수 있습니다:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 | using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo.Robots
{
[Robot(AccessRights = AccessRights.None, AddIndicators = true)]
public class WebSocketsExample : Robot
{
private WebSocketClient _webSocketClient = new WebSocketClient();
private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");
protected override void OnStart()
{
_webSocketClient.Connect(_targetUri);
_webSocketClient.TextReceived += _webSocketClient_TextReceived;
}
private void _webSocketClient_TextReceived(WebSocketClientTextReceivedEventArgs obj)
{
Print(obj.Text);
}
protected override void OnTick()
{
// Handle price updates here
}
protected override void OnStop()
{
// Handle cBot stop here
}
}
}
|
빌드 버튼을 클릭하거나 Ctrl+B 단축키를 사용하여 cBot을 빌드합니다.
cBot의 인스턴스 추가 버튼을 클릭합니다. 로컬에서 옵션을 선택하고 심벌과 계정을 선택한 다음 인스턴스 추가 버튼을 클릭합니다.

로그 탭으로 이동합니다. 연결을 확인하는 몇 가지 cBot 메시지를 볼 수 있어야 합니다.

심벌 가격 피드 구독
우리는 Algo 앱에서 Web Sockets Example cBot을 위한 코드 편집기로 돌아갑니다. 여기서는 최근에 연결한 서비스를 사용하여 심벌 가격 피드를 구독하려고 합니다.
OnStart() 메서드에서 서비스에 구독 메시지를 보내는 코드를 작성합니다.
| var data = "{\"userKey\":\"wsI4foSciCjMyCuoc2xw\", \"symbol\":\"EURUSD\"}";
_webSocketClient.Send(data);
|
참고
우리는 TraderMade 웹사이트에서 코드 샘플과 토큰을 얻었습니다.
API Print() 메서드에서 사용할 수 없는 대괄호를 대체하기 위해 Print 명령을 수정합니다.
| Print(obj.Text.Replace("{", "").Replace("}","").ToString());
|
마지막으로 OnStop() 메서드에서 연결을 종료합니다.
| _webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);
|
아래에서 전체 코드를 복사할 수 있습니다:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41 | using System;
using cAlgo.API;
using cAlgo.API.Collections;
using cAlgo.API.Indicators;
using cAlgo.API.Internals;
namespace cAlgo.Robots
{
[Robot(AccessRights = AccessRights.None, AddIndicators = true)]
public class WebSocketsExample : Robot
{
private WebSocketClient _webSocketClient = new WebSocketClient();
private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");
protected override void OnStart()
{
_webSocketClient.Connect(_targetUri);
_webSocketClient.TextReceived += _webSocketClient_TextReceived;
var data = "{\"userKey\":\"wsI4foSciCjMyCuoc2xw\", \"symbol\":\"EURUSD\"}";
_webSocketClient.Send(data);
}
private void _webSocketClient_TextReceived(WebSocketClientTextReceivedEventArgs obj)
{
Print(obj.Text.Replace("{", "").Replace("}", "").ToString());
}
protected override void OnTick()
{
// Handle price updates here
}
protected override void OnStop()
{
_webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);
}
}
}
|
cBot을 다시 빌드한 다음 다시 시작합니다.
이전과 마찬가지로 로그 탭으로 이동합니다. 이제 실시간으로 심벌 가격이 스트리밍되는 것을 볼 수 있어야 합니다.

이 글은 cTrader에서 WebSockets를 사용하여 정보나 메시지를 보내고 받는 방법을 보여줍니다.