انتقل إلى المحتوى

كيفية العمل مع WebSockets في cTrader Algo

تسمح واجهة برمجة التطبيقات الخاصة بـ cTrader Algo للمتداولين والمطورين بالوصول إلى خدمات وموارد الويب المختلفة من خلال اتصال WebSocket. بروتوكول WebSocket أكثر كفاءة من HTTP للوصول إلى الشبكة لأنه أسرع ويدعم نقل البيانات في الوقت الفعلي.

في هذا المقال والفيديو المصاحب له، ستتعلم كيفية إرسال واستقبال الرسائل عبر WebSockets.

إنشاء cBot

في مثالنا، نعتزم الاتصال بتغذية TraderMade ثم طباعة المعلومات الواردة في سجل cBot الخاص بنا.

أولاً، ننتقل إلى تطبيق Algo لإنشاء cBot جديد. في علامة التبويب cBots، انقر فوق زر جديد. اكتب اسمًا لـ cBot، مثل مثال Web Sockets، ثم انقر فوق إنشاء.

يمكننا الآن تعديل كود 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
        }
    }
}

انقر على زر Build أو استخدم اختصار Ctrl+B لبناء cBot.

انقر على زر Add instance لـ cBot. حدد خيار Locally، واختر رمزًا وحسابًا، ثم انقر على زر Add instance.

انتقل إلى علامة التبويب Logs. يجب أن ترى بعض رسائل cBot التي تؤكد الاتصال.

الاشتراك في تغذية أسعار الرمز

نعود إلى محرر التعليمات البرمجية لـ Web Sockets Example cBot في تطبيق Algo. هنا، نريد الاشتراك في تغذية أسعار الرمز باستخدام الخدمة التي اتصلنا بها مؤخرًا.

اكتب التعليمات البرمجية لإرسال رسالة اشتراك إلى الخدمة في طريقة OnStart() الخاصة بنا.

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

_webSocketClient.Send(data);

ملاحظة

حصلنا على نموذج التعليمات البرمجية والرمز المميز من موقع TraderMade.

قم بتعديل أمر 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 ثم ابدأه مرة أخرى.

انتقل إلى علامة التبويب Logs كما فعلت من قبل. الآن، يجب أن ترى سعر الرمز يتدفق في الوقت الفعلي.

أظهرت لك هذه المقالة كيفية استخدام WebSockets لإرسال واستقبال المعلومات أو الرسائل في cTrader.