Langkau tajuk talian

Cara bekerja dengan WebSocket dalam cTrader Algo

API cTrader Algo membolehkan pedagang dan pembangun mengakses pelbagai perkhidmatan dan sumber web melalui sambungan WebSocket. Protokol WebSocket lebih cekap daripada HTTP untuk akses rangkaian kerana ia lebih pantas dan menyokong pemindahan data masa nyata.

Dalam artikel ini dan video yang berkaitan, anda akan belajar cara menghantar dan menerima mesej melalui WebSocket.

Cipta cBot

Dalam contoh kami, kami bercadang untuk menyambung ke suapan TraderMade dan kemudian mencetak maklumat yang masuk dalam log cBot kami.

Pertama, kami navigasi ke aplikasi Algo untuk mencipta cBot baharu. Dalam tab cBots, klik butang New. Taip nama untuk cBot, seperti Contoh Web Socket, dan kemudian klik Create.

Kita kini boleh mengubah suai kod cBot untuk tujuan kita. Mari mulakan dengan menentukan WebSocketClient baharu.

1
private WebSocketClient _webSocketClient = new WebSocketClient();

Kemudian kita memulakan Uri titik akhir kita, iaitu lokasi yang akan kita sambungkan.

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

Kita perlu mengedit kaedah OnStart(), menggunakan Uri untuk menyambung ke perkhidmatan penstriman dan melanggan acara TextReceived. Acara ini dibangkitkan apabila teks sampai ke aplikasi kita melalui sambungan.

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

Kita mahu mencetak mesej yang diterima dalam TextReceived.

1
2
3
4
private void TextReceived(WebSocketClientTextReceivedEventArgs obj)
{
    Print(obj.Text);
}

Anda boleh menyalin kod penuh di bawah:

 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
        }
    }
}

Klik butang Build atau gunakan pintasan Ctrl+B untuk membina cBot.

Klik butang Add instance untuk cBot. Pilih pilihan Locally, pilih simbol dan akaun, dan kemudian klik butang Add instance.

Navigasi ke tab Logs. Anda sepatutnya melihat beberapa mesej cBot yang mengesahkan sambungan.

Langgan suapan harga simbol

Kita kembali ke penyunting kod untuk cBot Contoh Web Socket kita dalam aplikasi Algo. Di sini, kita mahu melanggan suapan harga simbol menggunakan perkhidmatan yang baru-baru ini kita sambungkan.

Tulis kod untuk menghantar mesej langganan kepada perkhidmatan dalam kaedah OnStart() kita.

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

_webSocketClient.Send(data);

Nota

Kami memperoleh sampel kod dan token dari laman web TraderMade.

Ubah suai arahan Print untuk menggantikan kurungan, yang tidak boleh digunakan dalam kaedah API Print().

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

Akhir sekali, tutup sambungan dalam kaedah OnStop().

1
_webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);

Anda boleh menyalin kod penuh di bawah:

 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);
        }
    }
}

Bina semula cBot dan kemudian mulakannya semula.

Navigasi ke tab Logs seperti yang anda lakukan sebelum ini. Sekarang, anda sepatutnya melihat harga simbol distrimkan dalam masa nyata.

Artikel ini menunjukkan kepada anda cara menggunakan WebSocket untuk menghantar dan menerima maklumat atau mesej dalam cTrader.