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

الأنواع الرئيسية لخوارزميات cBot

خوارزميات cBot هي أدوات متعددة الاستخدامات، اعتمادًا على الكود والمنطق الخاص بها، قد تؤدي أدوارًا ووظائف مختلفة تتراوح بين التداول الآلي بالكامل وتوفير الدعم لتنفيذ إستراتيجيات التداول اليدوي. في هذا المقال والفيديو المصاحب له، سنحدد الأنواع الرئيسية لخوارزميات cBot، ونوضح اختلافاتها الرئيسية ونسرد بعض أفضل الممارسات لإنشاء واستخدام خوارزميات cBot من مختلف الأنواع.

بشكل عام، هناك أربعة أنواع رئيسية من خوارزميات cBot.

ملاحظة

تختلف الفئات أدناه فقط بناءً على سلوكيات cBot. لم يتم تحديد أي فئات داخل كود cBot الفعلي. بالإضافة إلى ذلك، قد يقوم بعض المطورين أيضًا بإنشاء تصنيفات مخصصة لخوارزميات cBot.

  • إستراتيجيات التداول الآلي - كما هو مذكور في الاسم، تقوم خوارزميات cBot من هذا النوع بتنفيذ إستراتيجيات التداول بشكل مستقل. على سبيل المثال، خوارزمية cBot للثلاث غربان السوداء وثلاثة جنود بيض تضع أمر شراء جديد بعد مواجهة ثلاث شموع خضراء متتالية، وأمر بيع جديد عند مواجهة ثلاث شموع حمراء متتالية.
  • البرامج النصية - خوارزميات cBot التي تنتمي إلى هذا النوع تنفذ إجراءً عند البدء وتتوقف بعد اكتمال التنفيذ. على سبيل المثال، قد تقوم خوارزمية cBot النصية بإنشاء إيقاف خسارة لجميع المراكز المفتوحة حاليًا بغض النظر عن اتجاهها أو حجمها أو الأداة.
  • مساعدو التداول - مصممة لأداء نوع من الإجراءات المفيدة التي تكمل إستراتيجية التداول اليدوي أو الآلي. على سبيل المثال، يمكن لخوارزمية cBot من هذا النوع إدارة إيقافات الخسارة المتحركة الخاصة بك باستخدام قواعد مخصصة تختلف عن وظيفة إيقاف الخسارة المتحرك المدمجة التي يوفرها cTrader.
  • لوحات التداول - خوارزميات cBot من هذا النوع لا تتداول بشكل مستقل؛ بدلاً من ذلك، تقوم بإنشاء عناصر تحكم مخصصة يمكن استخدامها لأغراض مختلفة. على سبيل المثال، قد تقوم خوارزمية cBot بتشغيل عرض ويب لمجمع أخبار الفوركس مع دمج أزرار شراء وبيع مخصصة بالإضافة إلى محدد الرمز داخل عرض الويب، مما يسمح للمستخدم بالتداول دون مغادرة موقع الأخبار.

في الأقسام الفرعية أدناه، نناقش كل نوع من الأنواع المذكورة أعلاه بالتفصيل، ونوضح فوائدها وقيودها، ونقترح حالات استخدام مختلفة.

إستراتيجيات التداول الخوارزمي

خوارزميات cBot التي تنتمي إلى نوع إستراتيجية التداول الآلي معقدة ولكنها قوية. يجب عليها تنفيذ إستراتيجية التداول بشكل صحيح بما في ذلك جميع جوانبها مثل إدارة المخاطر وتحجيم المراكز والتحليل الفني.

يمكنك إنشاء إستراتيجية تداول آلي بسيطة في أقل من دقيقتين عن طريق استبدال قالب cBot الجديد الافتراضي بالكود أدناه.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
using System;
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicTrendBot : Robot
    {
        protected override void OnBar()
        {
            if (Bars.ClosePrices.Last(1) > Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Buy, SymbolName, 1000, "FollowTrend");
            }
            else if (Bars.ClosePrices.Last(1) < Bars.ClosePrices.Last(2))
            {
                ExecuteMarketOrder(TradeType.Sell, SymbolName, 1000, "FollowTrend");
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicTrendBot():
    def on_bar(self):
        if api.Bars.ClosePrices.Last(1) > api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 1000, "FollowTrend")
        elif api.Bars.ClosePrices.Last(1) < api.Bars.ClosePrices.Last(2):
            api.ExecuteMarketOrder(TradeType.Sell, api.SymbolName, 1000, "FollowTrend")

تفتح خوارزمية cBot مركزًا جديدًا في كل شمعة. يتم فتح مركز شراء إذا ارتفع السعر في الشمعة السابقة مقارنة بالشمعة التي قبلها. وعلى العكس من ذلك، يتم فتح مركز بيع إذا انخفض السعر.

الاختبار العكسي والتحسين

تتضمن إستراتيجيات التداول الآلي عادةً الكثير من الأجزاء المتحركة والمعلمات. نتيجة لذلك، غالبًا ما تحتاج خوارزميات cBot هذه إلى اختبار عكسي وتحسين مكثف قبل إطلاقها على الحسابات الحية. لحسن الحظ، يوفر cTrader أدوات مدمجة يمكنها التعامل مع الاختبار العكسي والتحسين نيابة عنك.

أداة سطر الأوامر لـ cTrader (CLI)

تحتاج إستراتيجيات التداول الآلي عادةً إلى التشغيل لفترات طويلة حتى تتمكن من الاستجابة لإشارات التحليل الفني المختلفة. لتوفير استهلاك ذاكرة الوصول العشوائي (RAM) ووحدة المعالجة المركزية (CPU) في هذه الحالات، يمكنك تشغيل خوارزميات cBot عبر واجهة سطر الأوامر لـ cTrader دون الحاجة إلى فتح cTrader Windows (لاحظ أنه من الممكن تشغيل أي خوارزمية cBot عبر واجهة سطر الأوامر لـ cTrader، وليس فقط خوارزميات cBot من هذا النوع).

البرامج النصية

عادةً ما تكون البرامج النصية مطلوبة لتنفيذ نوع من الإجراءات التي قد يكون من الصعب أو المستهلك للوقت القيام بها يدويًا. عادةً ما يتم اتخاذ هذه الإجراءات عند بدء تشغيل cBot حتى تتمكن من تشغيل البرنامج النصي ومراقبة نتائج عمله، ثم إيقاف مثيله عند النجاح لتوفير استهلاك ذاكرة الوصول العشوائي ووحدة المعالجة المركزية.

على سبيل المثال، يمكن للبرنامج النصي إغلاق جميع المراكز التي يتجاوز ربحها الإجمالي 50 وحدة من عملة الإيداع في حساب المتداول. في الواقع، سيعمل البرنامج النصي كجني أرباح عالمي لجميع المراكز المفتوحة التي يمكنك تفعيلها في أي وقت. هكذا سيبدو الكود لهذا البرنامج النصي.

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
using System;
using cAlgo.API;
using cAlgo.API.Collections;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicScriptBot : Robot
    {

        protected override void OnStart()
        {
            foreach (var position in Positions) 
            {
                if (position.GrossProfit > 50) 
                {
                    ClosePosition(position);
                }
            }
            Stop();
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicScriptBot():
    def on_start(self):
        for position in api.Positions:
            if position.GrossProfit > 50:
                api.ClosePosition(position)
        api.Stop()

بعد تشغيل cBot، يجب أن نرى العديد من المراكز المربحة يتم إغلاقها تدريجيًا.

إيقاف البرامج النصية

نظرًا لأن البرامج النصية تحتاج فقط إلى تنفيذ إجراء محدد مرة واحدة، يمكنك توجيه cTrader لإغلاق البرنامج النصي فورًا بعد اكتمال التنفيذ بنجاح. كما هو موضح في المثال أعلاه، يمكنك القيام بذلك عن طريق استدعاء طريقة Stop().

مساعدو التداول

الغرض من مساعدي التداول هو تنفيذ إجراءات مفيدة بانتظام. بينما يجعلهم هذا مشابهين للبرامج النصية، فإن البرامج النصية تنفذ إجراءً فقط عند بدء المثيل. في المقابل، تم تصميم مساعدي التداول للاستجابة باستمرار لظروف السوق أو عوامل أخرى، وتنفيذ العمليات استجابة لأنماط معينة.

على سبيل المثال، ضع في اعتبارك خوارزمية cBot التي تقوم تلقائيًا بالتحوط لمراكزك بمجرد فتحها. يمكن أن يبدو الكود لهذه الخوارزمية cBot كما يلي.

 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
using System;
using cAlgo.API;
using cAlgo.API.Collections;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicAssistantBot : Robot

    {
        private bool hasHedgedPosition = false;

        protected override void OnStart()
        {
            Positions.Opened += Positions_Opened;
        }

        private void Positions_Opened(PositionOpenedEventArgs args) 
        {
            if (!hasHedgedPosition) 
            {
                hasHedgedPosition = true;
                var position = args.Position;
                var oppositeTradeType = position.TradeType == TradeType.Buy ? TradeType.Sell : TradeType.Buy;
                ExecuteMarketOrder(oppositeTradeType, SymbolName, position.VolumeInUnits / 2);
            }
            else 
            {
                hasHedgedPosition = false;            
            }
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicAssistantBot():
    def on_start(self):
        self.hasHedgedPosition = False
        api.Positions.Opened += self.positions_opened

    def positions_opened(self, args):
        if not self.hasHedgedPosition:
            self.hasHedgedPosition = True
            position = args.Position
            opposite = TradeType.Sell if position.TradeType == TradeType.Buy else TradeType.Buy
            api.ExecuteMarketOrder(opposite, api.SymbolName, position.VolumeInUnits / 2)
        else:
            self.hasHedgedPosition = False

عند فتح مركز، تحاول خوارزمية cBot على الفور فتح مركز آخر في الاتجاه المعاكس؛ حجم هذا المركز الجديد هو بالضبط نصف حجم المركز الأصلي.

لاحظ أننا نستخدم الحقل hasHedgedPosition لتجنب حلقة لا نهائية بحيث تقوم خوارزمية cBot بالتحوط للمركز الجديد مرة واحدة فقط.

دوال رد النداء

غالبًا ما يستخدم مساعدو التداول دوال رد النداء التي تعمل كمعالجات للأحداث المختلفة. لمعرفة الأحداث التي يمكنك التعامل معها لفئة معينة، افتح وثائق API المدمجة، وابحث عن الفئة المطلوبة، وانتقل إلى قسم الأحداث في جدول المحتويات.

لوحات التداول

تعرض لوحات التداول عناصر تحكم مخصصة تؤدي إلى إجراءات مختلفة عند التفاعل معها. عادةً ما توفر تحسينات في جودة الحياة لواجهة المستخدم الافتراضية لـ cTrader. على سبيل المثال، قد تعرض خوارزمية cBot زر شراء الذي، عند النقر عليه، ينفذ أمر سوق لحجم محدد مسبقًا في cTrader.

لإنشاء مثل هذه الخوارزمية cBot، ما عليك سوى استخدام الكود أدناه.

 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
using System;
using cAlgo.API;

namespace cAlgo.Robots
{
    [Robot(AccessRights = AccessRights.None)]
    public class BasicPanelBot : Robot
    {

        Button buttonBuyOrder;

        protected override void OnStart()
        {

            buttonBuyOrder = new Button
            {
                Text = "Buy",
                HorizontalAlignment = HorizontalAlignment.Center,
                VerticalAlignment = VerticalAlignment.Center,
            };

            buttonBuyOrder.Click += ButtonBuyOrder_Click;

            Chart.AddControl(buttonBuyOrder);
        }

        private void ButtonBuyOrder_Click(ButtonClickEventArgs args) 
        {
            ExecuteMarketOrder(TradeType.Buy, SymbolName, 10000);
        }
    }
}
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
import clr
clr.AddReference("cAlgo.API")
from cAlgo.API import *
from robot_wrapper import *

class BasicPanelBot():
    def on_start(self):
        self.buttonBuyOrder = Button()
        self.buttonBuyOrder.Text = "Buy"
        self.buttonBuyOrder.HorizontalAlignment = HorizontalAlignment.Center
        self.buttonBuyOrder.VerticalAlignment = VerticalAlignment.Center
        self.buttonBuyOrder.Click += self.button_buy_order_click
        api.Chart.AddControl(self.buttonBuyOrder)

    def button_buy_order_click(self, args):
        api.ExecuteMarketOrder(TradeType.Buy, api.SymbolName, 10000)

عند النقر على زر شراء، يتم إدراج أمر سوق جديد لـ 10,000 وحدة. يسمح الوضع المريح للزر بالاستجابة السريعة لفرص السوق الجديدة.

الجمع بين لوحات التداول وأنواع أخرى من خوارزميات cBot

توفر لوحات التداول عناصر تحكم واجهة مستخدم مخصصة تتيح لك إجراء عمليات مختلفة. يمكنك استخدامها جنبًا إلى جنب مع أنواع أخرى من خوارزميات cBot. على سبيل المثال، قد تتضمن لوحة التداول زر تحوط مخصص يقوم، عند النقر عليه، بالتحوط لجميع المراكز المفتوحة حاليًا، بشكل مشابه لمثال مساعد التداول المذكور أعلاه.

الملخص

جميع الفئات الأربع من خوارزميات cBot لها استخدامات صالحة ويمكن الجمع بينها حسب تفضيلاتك. على سبيل المثال، يمكنك تشغيل إستراتيجية تداول آلية ومساعد تداول في وقت واحد لتحقيق أفضل النتائج الممكنة. يمكنك تجربة خوارزميات cBot من أنواع مختلفة للتأكد من تنفيذ نهجك المفضل في التداول بشكل كامل وبدون أخطاء.

Image title