วิธีการทำงานกับ WebSockets ใน cTrader Algo
API ของ cTrader Algo ช่วยให้นักเทรดและนักพัฒนาสามารถเข้าถึงบริการและทรัพยากรเว็บต่างๆ ผ่านการเชื่อมต่อ WebSocket โปรโตคอล WebSocket มีประสิทธิภาพมากกว่า HTTP สำหรับการเข้าถึงเครือข่ายเพราะเร็วกว่าและรองรับการถ่ายโอนข้อมูลแบบเรียลไทม์
ในบทความนี้และวิดีโอที่เกี่ยวข้อง คุณจะเรียนรู้วิธีการส่งและรับข้อความผ่าน WebSockets
สร้าง cBot
ในตัวอย่างของเรา เราตั้งใจจะเชื่อมต่อกับฟีด TraderMade และพิมพ์ข้อมูลที่เข้ามาในบันทึก cBot ของเรา
ขั้นแรก เราไปที่แอป Algo เพื่อสร้าง cBot ใหม่ ในแท็บ cBots คลิกปุ่ม New พิมพ์ชื่อสำหรับ cBot เช่น Web Sockets Example แล้วคลิก Create

ตอนนี้เราสามารถแก้ไขโค้ด 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
}
}
}
|
คลิกปุ่ม Build หรือใช้ทางลัด Ctrl+B เพื่อสร้าง cBot
คลิกปุ่ม Add instance สำหรับ cBot เลือกตัวเลือก Locally เลือกสัญลักษณ์และบัญชี แล้วคลิกปุ่ม Add instance

ไปที่แท็บ Logs คุณควรเห็นข้อความ cBot บางส่วนที่ยืนยันการเชื่อมต่อ

สมัครรับฟีดราคาสัญลักษณ์
เรากลับไปที่ตัวแก้ไขโค้ดสำหรับ cBot ตัวอย่าง Web Sockets ของเราในแอป Algo ที่นี่ เราต้องการสมัครรับฟีดราคาสัญลักษณ์โดยใช้บริการที่เราเพิ่งเชื่อมต่อ
เขียนโค้ดเพื่อส่งข้อความสมัครสมาชิกไปยังบริการในเมธอด OnStart() ของเรา
| var data = "{\"userKey\":\"wsI4foSciCjMyCuoc2xw\", \"symbol\":\"EURUSD\"}";
_webSocketClient.Send(data);
|
หมายเหตุ
เราได้รับตัวอย่างโค้ดและโทเค็นจากเว็บไซต์ TraderMade
แก้ไขคำสั่ง Print เพื่อแทนที่วงเล็บ ซึ่งไม่สามารถใช้ในเมธอด API 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 ใหม่แล้วเริ่มต้นอีกครั้ง
ไปที่แท็บ Logs เหมือนที่คุณทำก่อนหน้านี้ ตอนนี้ คุณควรเห็นราคาสัญลักษณ์ที่สตรีมแบบเรียลไทม์

บทความนี้แสดงให้คุณเห็นวิธีใช้ WebSockets เพื่อส่งและรับข้อมูลหรือข้อความใน cTrader