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

Martingale cBot

نظرة عامة على الاستراتيجية

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

مثال

لفهم آلية استراتيجية مارتينجيل، ضع في اعتبارك سيناريو حيث يتم رمي عملة معدنية في لعبة الوجه أو الظهر، بدءًا برهان قدره 1 دولار أمريكي.

للعملة فرصة 50/50 للهبوط على الوجه أو الظهر. كل رمية للعملة مستقلة - نتيجة رمية واحدة لا تؤثر على الرمية التالية.

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

إنشاء cBot

تعلم كيفية إنشاء cBots، باستخدام إما C# أو Python، في دلائلنا خطوة بخطوة.

كود Martingale cBot متاح في مستودعاتنا العامة لـ C# و Python. يتم توفير نفس الكود كقالب في معالج إنشاء الخوارزميات في cTrader لنظامي Windows أو Mac، أو يمكنك ببساطة نسخ واستخدام المقتطف أدناه:

 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
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
using cAlgo.API;

namespace cAlgo
{
    [Robot(TimeZone = TimeZones.UTC, AccessRights = AccessRights.None)]
    public class SampleMartingalecBot : Robot
    {
        [Parameter("Initial Quantity (Lots)", Group = "Volume", DefaultValue = 1, MinValue = 0.01, Step = 0.01)]
        public double InitialQuantity { get; set; }

        [Parameter("Stop Loss", Group = "Protection", DefaultValue = 40)]
        public int StopLoss { get; set; }

        [Parameter("Take Profit", Group = "Protection", DefaultValue = 40)]
        public int TakeProfit { get; set; }


        private Random random = new Random();

        protected override void OnStart()
        {
            Positions.Closed += OnPositionsClosed;

            ExecuteOrder(InitialQuantity, GetRandomTradeType());
        }

        private void ExecuteOrder(double quantity, TradeType tradeType)
        {
            var volumeInUnits = Symbol.QuantityToVolumeInUnits(quantity);
            var result = ExecuteMarketOrder(tradeType, SymbolName, volumeInUnits, "Martingale", StopLoss, TakeProfit);

            if (result.Error == ErrorCode.NoMoney)
                Stop();
        }

        private void OnPositionsClosed(PositionClosedEventArgs args)
        {
            Print("Closed");
            var position = args.Position;

            if (position.Label != "Martingale" || position.SymbolName != SymbolName)
                return;

            if (position.GrossProfit > 0)
            {
                ExecuteOrder(InitialQuantity, GetRandomTradeType());
            }
            else
            {
                ExecuteOrder(position.Quantity * 2, position.TradeType);
            }
        }

        private TradeType GetRandomTradeType()
        {
            return random.Next(2) == 0 ? TradeType.Buy : TradeType.Sell;
        }
    }
}
 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
import clr

clr.AddReference("cAlgo.API")

from cAlgo.API import *

from robot_wrapper import *

import random

class SampleMartingalecBot():
    def on_start(self):
        api.Positions.Closed += self.on_position_closed
        self.execute_order(api.InitialQuantity, self.get_random_trade_type())

    def execute_order(self, quantity, tradeType):
        volumeInUnits = api.Symbol.QuantityToVolumeInUnits(quantity)
        result = api.ExecuteMarketOrder(tradeType, api.SymbolName, volumeInUnits, "Martingale",  api.StopLoss,  api.TakeProfit)
        if result.Error == ErrorCode.NoMoney:
            api.Stop()

    def on_position_closed(self, args):
        api.Print("Closed")

        position = args.Position
        if position.Label != "Martingale" or position.SymbolName != api.SymbolName:
            return
        if position.GrossProfit > 0:
            self.execute_order(api.InitialQuantity, self.get_random_trade_type())
        else:
            self.execute_order(position.Quantity * 2, position.TradeType)

    def get_random_trade_type(self):
        return TradeType.Buy if random.randint(0, 1) == 0 else TradeType.Sell

دمج المؤشر

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

المنطق

اتجاه التداول العشوائي

  • يختار cBot عشوائيًا ما إذا كان سيضع أمر شراء أو بيع من خلال طريقة GetRandomTradeType().

  • تضع طريقة ExecuteOrder() أمر سوق بالكمية ووقف الخسارة وجني الأرباح المحددة في المعلمات.

آلية مارتينجيل

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

إدارة المخاطر

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

التنفيذ والإنهاء

إذا واجه الـ cBot خطأً بسبب عدم كفاية الأموال (NoMoney)، يتوقف الـ cBot عن محاولة إجراء الصفقات.

المعلمات

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

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

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

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

التطبيق

الأسواق المحصورة في نطاق أو الجانبية

يتفوق Martingale cBot في الأسواق التي تتحرك بشكل جانبي، حيث لا يوجد اتجاه صعودي أو هبوطي سائد. في الأسواق المحصورة في نطاق، تتقلب الأسعار بين مستويات الدعم والمقاومة، مما يجعل من المحتمل أن يسترد الـ cBot الخسائر بسرعة بعد الصفقات الخاسرة.

حالة استخدام

ضع في اعتبارك سيناريو حيث يتداول زوج EURUSD ضمن نطاق ضيق من 1.1000 إلى 1.1050 لعدة أيام. يمكن أن يستفيد Martingale cBot من ارتداد السعر بين تلك المستويات، مما يؤدي في النهاية إلى تحقيق الأرباح مع انعكاس السوق بعد التراجعات البسيطة.

أفضل الممارسات

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

أسواق التقلبات المنخفضة

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

حالة استخدام

إذا كنت تتداول سلعة مثل الذهب (XAUUSD) خلال فترة قليلة الأخبار، قد يبقى السعر في نطاق ضيق. يمكن للـ cBot الاستفادة من هذه البيئة حيث من المرجح أن تعود الأسعار ضمن تحركات سعرية قصيرة، مما يسمح بصفقات مربحة مع انخفاض مخاطر الانخفاضات الكبيرة.

أفضل الممارسات

تجنب تشغيل الـ cBot خلال الفترات التي يُتوقع فيها حدوث أحداث اقتصادية هامة أو إصدارات إخبارية لأنها تسبب تقلبات عالية.

الأصول ذات الارتداد للمتوسط

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

حالة استخدام

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

أفضل الممارسات

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

الملخص

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

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