الحلقة الخامسة والخمسين من سلسلة تعلم البرمجة باسهل طريقة

تقليص
X
 
  • تصفية - فلترة
  • الوقت
  • عرض
إلغاء تحديد الكل
مشاركات جديدة

  • الحلقة الخامسة والخمسين من سلسلة تعلم البرمجة باسهل طريقة

    نصائح وخدع ( 9 )
    Tips and Tricks




    المارتينجال او المضاعفات
    Martingale



    المارتينجال هو نظام مراهنات يُستخدم بشكل شائع في لعبة الروليت والبلاك جاك، حيث يتم مضاعفة حجم الرهان بعد كل خسارة متتالية. الفكرة هي أن رهانًا واحدًا فائزًا سيعيد الرصيد إلى التعادل. السلبية في المارتينجال هي أنك تحتاج إلى رأس مال كبير لتحمل مخاطر الخسائر المتتالية. على سبيل المثال، إذا كان حجم الرهان الأولي الخاص بك هو 0.1 لوت، بعد 4 خسائر متتالية سيكون حجم الرهان الخاص بك 1.6 لوت - 16 مرة حجم الرهان الأصلي. بعد 7 خسائر متتالية، سيكون حجم الرهان الخاص بك 12.8 لوت - 128 مرة حجم الرهان الأصلي! ستقوم موجة خسائر طويلة بمحو حسابك قبل أن تتمكن من إعادته إلى التعادل.

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

    طريقة أخرى هي زيادة حجم الرهان بواسطة مضاعف أصغر. استراتيجية المارتينجال الكلاسيكية تضاعف حجم الرهان بعد كل خسارة متتالية. قد ترغب في استخدام مضاعف أصغر من 2.

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

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


    كود PHP:
    int WinCount;
    int LossCount;
    for(int Count = OrdersHistoryTotal()-1; ; Count--)
    {
    OrderSelect(Count,SELECT_BY_POS,MODE_HISTORY);
    if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
    {
    if(OrderProfit() > 0 && LossCount == 0) WinCount++;
    else if(OrderProfit() < 0 && WinCount == 0) LossCount++;
    else break;
    }
    } 
    

    نبدأ بتعريف المتغيرات الخاصة بعدادات الانتصارات والخسائر. في عامل التكرار (for)، يرجى ملاحظة أننا نستخدم OrdersHistoryTotal() لتحديد الموقف الابتدائي لنا. OrdersHistoryTotal() تُرجع عدد الأوامر في تاريخ الأوامر. نقوم بطرح 1 لتحديد موقع الفهرس لأحدث أمر، والذي يتم تخزينه في المتغير Count.

    يرجى ملاحظة أننا قمنا بتجاهل التعبير الثاني في حلقة for - الذي يحدد شرط الإيقاف عن التكرار. يجب أن يبقى الفاصلة المنقوطة لأي تعبيرات تم حذفها. سنقوم بتنقيص المتغير Count في كل تكرار للحلقة.

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

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

    نظرًا لأننا نبحث عن الانتصارات أو الخسائر المتتالية، فإننا نحتاج إلى إنهاء الحلقة بمجرد العثور على شرط متناوب. لفعل ذلك، نتحقق من المتغير WinCount أو LossCount عند فحص ربح الأمر. على سبيل المثال، إذا كان لدينا 2 خسارة متتالية - وهذا يعني أن LossCount = 2 - وكان أمرنا التالي فائزًا، فإن كلا عبارات الـ if ستكونان كاذبتين، وسيتم التحكم في تنفيذ العامل break الذي ينهي الحلقة.

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

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

    سنستخدم متغيرًا صحيًا خارجيًا بنوع العدد الصحيح يسمى MartingaleType لتحديد ذلك. إذا تم تعيين MartingaleType إلى 0، سنستخدم استراتيجية المارتينجال. إذا تم تعيينه إلى 1، سنستخدم استراتيجية مضادة للمارتينجال. سنعلن أيضًا عن متغيرات خارجية لمضاعف الرهان (LotMultiplier)، والحد الأقصى لعدد مرات زيادة حجم الرهان (MaxMartingale)، وحجم الرهان الأولي (****LotSize).


    كود PHP:
    // External variables
    extern int MartingaleType = 0;
    // 0: Martingale, 1: Anti-Martingale
    extern int LotMultiplier = 2;
    extern int MaxMartingale = 4;
    extern double ****LotSize = 0.1;
    // Lot size calculation
    if(MartingaleType == 0) int ConsecutiveCount = LossCount;
    else if(MartingaleType = 1) ConsecutiveCount = WinCount;
    if(ConsecutiveCount > MaxMartingale) ConsecutiveCount = MaxMartingale;
    double LotSize = ****LotSize * MathPow(LotMultiplier,ConsecutiveCount); 
    
    نقوم بتعيين قيمة ConsecutiveCount إلى إما WinCount أو LossCount، اعتمادًا على إعداد MartingaleType. سنقارن ذلك بإعداد MaxMartingale الخاص بنا. إذا كان عدد الأوامر المتتالية لدينا أكبر من MaxMartingale، سنقوم بإعادة تحجيمه ليكون مساويًا لـ MaxMartingale. (يمكنك أيضًا إعادة تحجيمه لحجم الرهان الافتراضي إذا كنت تفضل.) سيظل حجم الرهان عند هذا الحجم حتى يتمكن فوز أو خسارة من كسر سلسلة الأوامر المتتالية لدينا.

    يتم تحديد حجم الرهان عن طريق ضرب حجم الرهان الأولي الخاص بنا (****LotSize) بواسطة مضاعف الرهان (LotMultiplier)، والذي يتزايد بشكل تناسبي بواسطة ConsecutiveCount. تقوم دالة MathPow() برفع عدد معين إلى القوة المحددة. الوسيطة الأولى هي القاعدة، والوسيطة الثانية هي السالب. على سبيل المثال، إذا كان حجم الرهان الأولي لدينا هو 0.1، ومضاعف الرهان هو 2، وكان لدينا أربعة أوامر متتالية، فإن المعادلة تكون 0.1 * 2^4 = 1.6.

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