コンテンツにスキップ

cTrader AlgoでWebSocketを操作する方法

cTrader Algo APIを使用すると、トレーダーや開発者はWebSocket接続を通じてさまざまなWebサービスやリソースにアクセスできます。 WebSocketプロトコルは、HTTPよりもネットワークアクセスにおいて効率的です。なぜなら、より高速でリアルタイムのデータ転送をサポートしているからです。

この記事と対応するビデオでは、WebSocketを通じてメッセージを送受信する方法を学びます。

cBotを作成する

この例では、TraderMadeフィードに接続し、受信した情報をcBotログに出力することを目指します。

まず、Algoアプリに移動して新しいcBotを作成します。 cBotsタブで、新規ボタンをクリックします。 cBotの名前を入力します(例:Web Sockets Example)、そして作成をクリックします。

これで、目的に合わせてcBotのコードを変更できます。 まず、新しいWebSocketClientを定義します。

1
private WebSocketClient _webSocketClient = new WebSocketClient();

次に、接続先のエンドポイントUriを初期化します。

1
private readonly Uri _targetUri = new Uri("wss://marketdata.tradermade.com/feedadv");

OnStart()メソッドを編集し、Uriを使用してストリーミングサービスに接続し、TextReceivedイベントにサブスクライブします。 このイベントは、接続を通じてアプリケーションにテキストが到達するたびに発生します。

1
2
3
4
5
protected override void OnStart()
{
    _webSocketClient.Connect(_targetUri);
    _webSocketClient.TextReceived += _webSocketClient_TextReceived;
}

TextReceivedで受信したメッセージを出力します。

1
2
3
4
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()メソッドで、サービスにサブスクリプションメッセージを送信するコードを記述します。

1
2
3
var data = "{\"userKey\":\"wsI4foSciCjMyCuoc2xw\", \"symbol\":\"EURUSD\"}";

_webSocketClient.Send(data);

注意

TraderMadeウェブサイトからコードサンプルとトークンを取得しました。

APIのPrint()メソッドで使用できないブラケットを置き換えるためにPrintコマンドを変更します。

1
Print(obj.Text.Replace("{", "").Replace("}","").ToString()); 

最後に、OnStop()メソッドで接続を閉じます。

1
_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を使用して情報やメッセージを送受信する方法を紹介しました。