cTrader AlgoでWebSocketを操作する方法
cTrader Algo APIを使用すると、トレーダーや開発者はWebSocket接続を通じてさまざまなWebサービスやリソースにアクセスできます。 WebSocketプロトコルは、HTTPよりもネットワークアクセスにおいて効率的です。なぜなら、より高速でリアルタイムのデータ転送をサポートしているからです。
この記事と対応するビデオでは、WebSocketを通じてメッセージを送受信する方法を学びます。
cBotを作成する
この例では、TraderMadeフィードに接続し、受信した情報をcBotログに出力することを目指します。
まず、Algoアプリに移動して新しいcBotを作成します。 cBotsタブで、新規ボタンをクリックします。 cBotの名前を入力します(例:Web Sockets Example)、そして作成をクリックします。

これで、目的に合わせて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でWebSocketを使用して情報やメッセージを送受信する方法を紹介しました。