أريد أن أعرف ما هو رمز معالجة خطأ ORDER CLOSE مع MAGIC NUMBER.
أنا في وضع يسمح لي بالقيام بذلك من خلال معالجة خطأ ”فتح الطلب”.
لكني أحتاج إلى تأكيد أن الكود الخاص بي صحيح مع معالجة خطأ ”إغلاق الطلب”.
هذا هو رمز معالجة خطأ ”فتح الطلب” الخاص بي لطلب الشراء الذي يعمل بشكل جيد:
//يشتري
إذا (الطلب == SIGNAL_BUY ((eachTickMode!) TickCheck) || (! EachTickMode (Bars! = BarCount))))
إذا (! IsTrade)
//تحقق من الهامش المجاني
if (AccountFreeMargin () lt؛ (1000 * Lots))
طباعة (ليس لدينا أموال. الهامش المجاني =، AccountFreeMargin ())؛
عودة (0) ؛
إذا (UseStopLoss) StopLossLevel = اسأل - StopLoss * Point ؛ آخر StopLossLevel = 0.0 ؛
إذا (UseTakeProfit) TakeProfitLevel = اسأل TakeProfit * Point ؛ آخر TakeProfitLevel = 0.0 ؛
التذكرة = إرسال الطلب (الرمز () ، OP_BUY ، اللوتات ، السؤال ، الانزلاق ، StopLossLevel ، TakeProfitLevel ، الشراء (# MagicNumber ) ، MagicNumber ، 0 ، DodgerBlue) ؛
إذا (تذكرة GT ؛ 0)
إذا (OrderSelect (تذكرة ، SELECT_BY_TICKET ، MODE_TRADES))
طباعة (تم فتح أمر الشراء: ، OrderOpenPrice ()) ؛
if (SignalMail) SendMail ([Signal Alert] ، [ الرمز () ] DoubleToStr (Ask ، Digits) Open Buy) ؛
آخر
طباعة (خطأ في فتح أمر الشراء: ، GetLastError ()) ؛
التجارة الدولية = خطأ ،
buyFlag = خطأ ؛
else/*** تمت إضافة أخرى إلى if (Ticket gt ؛ 0)
//حدث خطأ أثناء فتح الصفقة لذا تعامل معها
طباعة (خطأ في فتح أمر الشراء: ، GetLastError ()) ؛
التجارة الدولية = خطأ ،
buyFlag = خطأ ؛
إذا (EachTickMode) TickCheck = صحيح ؛
إذا (! EachTickMode) BarCount = أشرطة ؛
عودة (0) ؛
هذا هو طلبي إغلاق رمز معالجة الخطأ لطلب الشراء:
// ----------------------------------------------- -------------------
//| نهاية الإشارة (خروج الشراء) |
// ----------------------------------------------- -------------------
إذا (الطلب == SIGNAL_CLOSEBUY ((eachTickMode!) TickCheck) || (! EachTickMode (Bars! = BarCount))))
لـ (cnt = الإجمالي ؛ cnt gt ؛ = 0 ؛ cnt--)
OrderSelect (cnt ، SELECT_BY_POS ، MODE_TRADES) ؛
إذا (OrderMagicNumber () == MagicNumber)
nomoretrades = صحيح ؛
التجارة الدولية = خطأ ،
التذكرة = OrderTicket (OrderTicket () ، OrderLots () ، العطاء ، الانزلاق السعري ، MediumSeaGreen) ؛
إذا (تذكرة GT ؛ 0)
إذا (OrderSelect (تذكرة ، SELECT_BY_TICKET ، MODE_TRADES))
طباعة (تم إغلاق أمر البيع: ، OrderClosePrice ()) ؛
إذا (SignalMail) SendMail ([تنبيه الإشارة] ، [ الرمز () ] DoubleToStr (العطاء ، الأرقام) البيع المفتوح) ؛
آخر
طباعة (خطأ في إغلاق أمر الشراء: ، GetLastError ()) ؛
nomoretrades = خطأ ؛
InTrade = صحيح ؛
else/*** تمت إضافة أخرى إلى if (Ticket gt ؛ 0)
//لقد أخطأنا في إغلاق الصفقة لذا تعامل معها
طباعة (خطأ في إغلاق أمر الشراء: ، GetLastError ()) ؛
nomoretrades = خطأ ؛
InTrade = صحيح ؛
إذا (SignalMail) SendMail ([تنبيه الإشارة] ، [ الرمز () ] DoubleToStr (العطاء ، الأرقام) إغلاق الشراء) ؛
إذا (! EachTickMode) BarCount = أشرطة ؛
IsTrade = خطأ ،
استمر؛
//الوقف المتحرك
إذا (UseTrailingStop TrailingStop gt؛ 0)
إذا (العطاء - OrderOpenPrice () gt ؛ النقطة * TrailingStop)
إذا (OrderStopLoss () lt ؛ العطاء - نقطة * TrailingStop)
OrderModify (OrderTicket () ، OrderOpenPrice () ، Bid - Point * TrailingStop ، OrderTakeProfit () ، 0 ، MediumSeaGreen) ؛
إذا (! EachTickMode) BarCount = أشرطة ؛
استمر؛
} آخر {
هل يمكن لأي شخص أن يخبرني ما إذا كان رمز معالجة الخطأ ”إغلاق الطلب” الخاص بي صحيحًا؟
بالإضافة إلى ذلك ، يبدو أن لدي مشكلة في طباعة OrderClosePrice () لأن السعر المطبوع غير صحيح. ليس لدي أي مشاكل مع طباعة OrderOpenPrice () لرمز فتح الأمر.