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

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

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

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


    كود:
    OrderSelect(CloseTicket,SELECT_BY_TICKET);
    if(OrderCloseTime() == 0 && OrderType() == OP_BUYSTOP)
    {
    bool Deleted = OrderDelete(CloseTicket,Red);
    }
    كما فعلنا مع وظيفة OrderClose () في الدرس السابق ، نحتاج إلى التحقق من نوع الأمر للتأكد من أنه
    طلب معلق. ثوابت نوع الأمر المعلق هي OP_BUYSTOP و OP_SELLSTOP و OP_BUYLIMIT و
    OP_SELLLIMIT. لإغلاق أنواع أخرى من الأوامر المعلقة ، ما عليك سوى تغيير نوع الأمر.
    إذا تم تنفيذ الأمر ، فهو الآن أمر سوق ، ويجب إغلاقه باستخدام OrderClose ()
    بدلاً من.




    مستشار خبير بسيط

    دعونا نرى كيف ستعمل الشفرة التي ناقشناها حتى الآن في مستشار خبير. هذا بسيط
    نظام المتوسط المتحرك. يتم فتح أمر الشراء عندما يكون المتوسط المتحرك لفترة 10 أكبر
    من المتوسط المتحرك لمدة 20 فترة. عندما يكون المتوسط المتحرك لفترة 10 أقل من فترة 20
    المتوسط المتحرك ، يتم فتح أمر بيع.
    سوف يتناوب المستشار الخبير هذا بين أوامر البيع والشراء المفتوحة. سيتم إغلاق الطلبات عندما يتم الأمر
    فتح في الاتجاه المعاكس ، أو عن طريق وقف الخسارة أو جني الأرباح. سوف نستخدم المتغيرات العالمية
    BuyTicket و SellTicket لتخزين تذكرة الطلب الأخيرة. عندما يتم فتح أمر جديد ، فإن الأخير
    تم مسح تذكرة الطلب. هذا يمنع عدة أوامر متتالية من الفتح.


    كود:
    #property copyright "Mohammad alturk"
    // External variables
    extern double LotSize = 0.1;
    extern double StopLoss = 50;
    extern double TakeProfit = 100;
    extern int Slippage = 5;
    extern int MagicNumber = 123;
    extern int FastMAPeriod = 10;
    extern int SlowMAPeriod = 20;
    // Global variables
    int BuyTicket;
    int SellTicket;
    double UsePoint;
    int UseSlippage;
    // Init function
    int init()
    {
    UsePoint = PipPoint(Symbol());
    UseSlippage = GetSlippage(Symbol(),Slippage);
    }
    // Start function
    int start()
    {
    // Moving averages
    double FastMA = iMA(NULL,0,FastMAPeriod,0,0,0,0);
    double SlowMA = iMA(NULL,0,SlowMAPeriod,0,0,0,0);
    // Buy order
    if(FastMA > SlowMA && BuyTicket == 0)
    {
    OrderSelect(SellTicket,SELECT_BY_TICKET);
    // Close order
    if(OrderCloseTime() == 0 && SellTicket > 0)
    {
    double CloseLots = OrderLots();
    double ClosePrice = Ask;
    bool Closed = OrderClose(SellTicket,CloseLots,ClosePrice,UseSlip page,Red);
    }
    double OpenPrice = Ask;
    // Calculate stop loss and take profit
    if(StopLoss > 0) double BuyStopLoss = OpenPrice - (StopLoss * UsePoint);
    if(TakeProfit > 0) double BuyTakeProfit = OpenPrice + (TakeProfit * UsePoint);
    // Open buy order
    BuyTicket = OrderSend(Symbol(),OP_BUY,LotSize,OpenPrice,UseSli ppage,
    BuyStopLoss,BuyTakeProfit,"Buy Order",MagicNumber,0,Green);
    SellTicket = 0;
    }
    // Sell Order
    if(FastMA < SlowMA && SellTicket == 0)
    {
    OrderSelect(BuyTicket,SELECT_BY_TICKET);
    if(OrderCloseTime() == 0 && BuyTicket > 0)
    {
    CloseLots = OrderLots();
    ClosePrice = Bid;
    Closed = OrderClose(BuyTicket,CloseLots,ClosePrice,UseSlipp age,Red);
    }
    OpenPrice = Bid;
    if(StopLoss > 0) double SellStopLoss = OpenPrice + (StopLoss * UsePoint);
    if(TakeProfit > 0) double SellTakeProfit = OpenPrice - (TakeProfit * UsePoint);
    SellTicket = OrderSend(Symbol(),OP_SELL,LotSize,OpenPrice,UseSl ippage,
    SellStopLoss,SellTakeProfit,"Sell Order",MagicNumber,0,Red);
    BuyTicket = 0;
    }
    return(0);
    }
    // Pip Point Function
    double PipPoint(string Currency)
    {
    int CalcDigits = MarketInfo(Currency,MODE_DIGITS);
    if(CalcDigits == 2 || CalcDigits == 3) double CalcPoint = 0.01;
    else if(CalcDigits == 4 || CalcDigits == 5) CalcPoint = 0.0001;
    return(CalcPoint);
    }
    // Get Slippage Function
    int GetSlippage(string Currency, int SlippagePips)
    {
    int CalcDigits = MarketInfo(Currency,MODE_DIGITS);
    if(CalcDigits == 2 || CalcDigits == 4) double CalcSlippage = SlippagePips;
    else if(CalcDigits == 3 || CalcDigits == 5) CalcSlippage = SlippagePips * 10;
    return(CalcSlippage);
    }

    نبدأ بتوجيه المعالج المسبق لحقوق الطبع والنشر #property الخاص بنا والذي يحدد الرمز على أنه ينتمي
    لنا. المتغيرات الخارجية هي التالية . نعلن BuyTicket وSellTicket كمتغيرات عالمية
    بهذه الطريقة يتم تخزين بطاقة الطلب بين عمليات تنفيذ البرنامج.
    يمكن أن يكون قد أعلنا عنها أيضًا كمتغيرات ثابتة داخل وظيفة start ().
    نضيف UsePoint و UseSlippage كمتغيرات عامة - سنحسب قيمة هذه المتغيرات التالية. ملكنا
    يتم تشغيل وظيفة init () أولاً. نحن نسمي وظائف PipPoint () و GetSlippage ()

    وقم بتعيين قيم الإرجاع لمتغيراتنا العامة. سنستخدم هذه عندما
    الإشارة إلى قيم النقطة أو الانزلاق السعري في باقي المستشار الخبير لدينا.
    التالي هو وظيفة start () ، تنفيذ البرنامج الرئيسي لدينا. لقد استبعدنا deinit () ، لأننا فعلنا ذلك
    لا فائدة له هنا. تحسب الدالة iMA () المتوسط المتحرك. يحتفظ متغير FastMA بامتداد
    المتوسط المتحرك لمدة 10 فترات ، والذي يتم تعيينه باستخدام متغير FastMAPeriod. متغير SlowMA هو
    متوسط متحرك لمدة 20 فترة ، تم ضبطه باستخدام SlowMAPeriod. تم تعيين كل شيء آخر على الوضع الافتراضي (
    المتوسط المتحرك البسيط محسوبًا على سعر الإغلاق).
    نستخدم عامل التشغيل if لتحديد شروط فتح الأمر. إذا كانت الفترة الحالية 10 تتحرك
    المتوسط (FastMA) أكبر من المتوسط المتحرك لـ 20 فترة (SlowMA) ، وإذا كان BuyTicket
    يساوي 0 ، سنفتح أمر شراء.

    قبل أن نفتح أمر الشراء ، سنغلق أمر البيع الحالي ، إن وجد. نحن نستخدم OrderSelect ()
    لاسترداد بطاقة SellTicket الحالية. إذا كان وقت إغلاق الأمر 0 (يشير إلى أن الأمر لم يحدث بعد
    تم إغلاقه) ، وتذكرة SellTicket أكبر من 0 (مما يشير إلى أن SellTicket من المحتمل أن تكون صالحة) ،
    سنمضي قدمًا ونغلق أمر البيع. نقوم باسترداد حجم اللوت لأمر البيع والحجم الحالي
    سعر الطلب ، وهو سعر الإغلاق لأمر البيع. ثم نقوم بإغلاق أمر البيع باستخدام
    OrderClose ().
    بعد ذلك ، نقوم بتعيين سعر الطلب الحالي لمتغير OpenPrice - سيكون هذا هو سعر الافتتاح
    طلب الشراء لدينا. نحسب وقف الخسارة وجني الأرباح بالنسبة لسعر الافتتاح ، والتحقق أولاً
    للتأكد من أننا حددنا قيمة StopLoss أو TakeProfit في الإعدادات. ثم نضع
    الطلب باستخدام وظيفة OrderSend () ، وتخزين تذكرة الطلب في BuyTicket. أخيرًا ، نحن واضحون
    قيمة SellTicket ، مما يسمح بوضع أمر بيع آخر عند شرط الأمر
    تصبح صالحة.

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


يعمل...
X