Lewati ke isi

Cara bekerja dengan WebSocket di cTrader Algo

API cTrader Algo memungkinkan trader dan pengembang untuk mengakses berbagai layanan web dan sumber daya melalui koneksi WebSocket. Protokol WebSocket lebih efisien daripada HTTP untuk akses jaringan karena lebih cepat dan mendukung transfer data real-time.

Dalam artikel ini dan video terkaitnya, Anda akan belajar cara mengirim dan menerima pesan melalui WebSocket.

Buat cBot

Dalam contoh kita, kami bermaksud untuk terhubung ke feed TraderMade dan kemudian mencetak informasi yang masuk di log cBot kita.

Pertama, kita navigasikan ke aplikasi Algo untuk membuat cBot baru. Di tab cBots, klik tombol New. Ketikkan nama untuk cBot, seperti Web Sockets Example, lalu klik Create.

Sekarang kita dapat memodifikasi kode cBot untuk tujuan kita. Mari kita mulai dengan mendefinisikan WebSocketClient baru.

1
private WebSocketClient _webSocketClient = new WebSocketClient();

Kemudian kita menginisialisasi Uri endpoint kita, yang merupakan lokasi yang akan kita hubungi.

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

Kita perlu mengedit metode OnStart(), menggunakan Uri untuk terhubung ke layanan streaming dan berlangganan ke event TextReceived. Event ini dipicu setiap kali teks mencapai aplikasi kita melalui koneksi.

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

Kita ingin mencetak pesan yang diterima di TextReceived.

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

Anda dapat menyalin kode lengkapnya di bawah ini:

 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 tombol Build atau gunakan pintasan Ctrl+B untuk membangun cBot.

Klik tombol Add instance untuk cBot. Pilih opsi Locally, pilih simbol dan akun, lalu klik tombol Add instance.

Navigasikan ke tab Logs. Anda seharusnya melihat beberapa pesan cBot yang mengonfirmasi koneksi.

Berlangganan feed harga simbol

Kita kembali ke editor kode untuk cBot Web Sockets Example kita di aplikasi Algo. Di sini, kita ingin berlangganan feed harga simbol menggunakan layanan yang baru saja kita hubungi.

Tulis kode untuk mengirim pesan langganan ke layanan di metode OnStart() kita.

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

_webSocketClient.Send(data);

Catatan

Kami mendapatkan contoh kode dan token dari situs web TraderMade.

Modifikasi perintah Print untuk mengganti tanda kurung, yang tidak dapat digunakan dalam metode Print() API.

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

Terakhir, tutup koneksi di metode OnStop().

1
_webSocketClient.Close(WebSocketClientCloseStatus.NormalClosure);

Anda dapat menyalin kode lengkapnya di bawah ini:

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

Bangun ulang cBot dan kemudian mulai lagi.

Navigasikan ke tab Logs seperti yang Anda lakukan sebelumnya. Sekarang, Anda seharusnya melihat harga simbol yang dialirkan secara real-time.

Artikel ini menunjukkan kepada Anda cara menggunakan WebSocket untuk mengirim dan menerima informasi atau pesan di cTrader.