إغلاق جميع الأوامر/المراكز لـ MT4/MT5
تعتبر إدارة الأوامر أحد المهام الأساسية عند التعامل مع أدوات التداول والمستشارون الخبراء. ربما ترغب في إغلاق جميع الأوامر المفتوحة في حالات معينة، لاسيما إذا كان هذا الإجراء يبرره أحد قواعد إدارة المخاطر. سنستعرض في هذه المقالة وظيفتين – أحدهما في كود MQL4 والآخر في كود MQL5 للقيام بهذه المهمة، كما سنتمكن أيضًا من تنزيل سكربت Close All Orders مجاني لـ MT4 – وهو برنامج نصي لإغلاق جميع الأوامر المفتوحة تلقائيًا. هناك سكربت مشابه يطلق عليهClose All Positions متاح أيضًا للميتاتريدر5.
إغلاق جميع الأوامر MQL4
من الضروري تطبيق جميع إجراءات التأمين لحمايتنا من تكبد خسائر كبيرة عند تكويد أي مستشار خبير (اكسبيرت). بعبارة أخرى، تعتبر إدارة المخاطر ركيزة أساسية في بناء وتطوير المستشارون الخبراء. لذلك من الضروري وضع القواعد التي تمكن المستشار الخبير من إغلاق جميع الأوامر في حال استيفاء شروط معينة.
فيما يلي بعض الأمثلة التي قد تبرر إغلاق جميع الأوامر:
- وصول مجموعة من الأوامر إلى مستوى هدف الربح.
- الخسارة التراكمية للأوامر المفتوحة أدت إلى انخفاض رأس المال أو الهامش إلى ما دون حد معين.
- ترقب صدور تقرير معين يمكن أن يؤثر بشكل كبير على الأسعار.
- وقوع حدث غير متوقع يتسبب في تغييرات مفاجئة في أسعار الصرف.
هذه ليست سوى أمثلة على المواقف التي يمكن أن تدفعك إلى إغلاق جميع الأوامر المفتوحة بشكل فوري. تستطيع إنجاز هذه المهمة عن طريق الاستعانة بكود MQL4 بسيط.
ربما تكون قد قرأت بالفعل دليل دالة OrderClose ، والذي يمكنه إغلاق أي أمر بشكل منفرد في MT4. يمكنك أن ترى أدناه كيفية استخدام هذا المؤشر لإغلاق جميع الأوامر باستخدام دالة مخصصة.
تستطيع وظيفة Close All Orders MQL4 التالية إغلاق جميع الأوامر المفتوحة في السوق مرة واحدة.
void CloseOrders() { int total = OrdersTotal(); // Log in the terminal the total number of orders. Print(total); // Start a loop to scan all the orders. // The loop starts from the last, otherwise it could skip orders. for (int i = total - 1; i >= 0; i--) { // If the order cannot be selected, throw and log an error. if (OrderSelect(i, SELECT_BY_POS) == false) { Print("ERROR - Unable to select the order - ", GetLastError()); break; } // Result variable - to check if the operation is successful or not. bool result = false; // Update the exchange rates before closing the orders. RefreshRates(); // Bid and Ask price for the order's symbol. double BidPrice = MarketInfo(OrderSymbol(), MODE_BID); double AskPrice = MarketInfo(OrderSymbol(), MODE_ASK); // Closing the order using the correct price depending on the order's type. if (OrderType() == OP_BUY) { result = OrderClose(OrderTicket(), OrderLots(), BidPrice, Slippage); } else if (OrderType() == OP_SELL) { result = OrderClose(OrderTicket(), OrderLots(), AskPrice, Slippage); } // If there was an error, log it. if (!result) Print("ERROR - Unable to close the order - ", OrderTicket(), " - Error ", GetLastError()); } }
منطق دالة إغلاق جميع الأوامر MQL4
فيما يلي منطق الدالة
- استخدم الحلقة، انسخ جميع الأوامر.
- حدث الأسعار.
- إذا كان نوع الأمر هو شراء أو بيع بسعر السوق، أغلق الأوامر باستخدام السعر الصحيح.
- تحقق ما إذا كانت العملية ناجحة مع كل أمر، وفي حال عدم نجاحها، قم بإرجاع رسالة خطأ.
التحسينات الممكنة
هذه الدالة ليست معقدة للغاية ويمكن تحسينها باستخدام فلاتر إضافية. على سبيل المثال، يمكنك تطبيق الفلاتر التالية:
- أغلق الأوامر الرابحة فقط.
- أغلق الأوامر الخاسرة فقط.
- أغلق الأوامر على زوج محدد فقط.
- أغلق الأوامر المرفق بها رقم سحري معين فقط.
- فلاتر أخرى.
تُستخدم الدالة المذكورة أعلاه، بشكل معدل إلى حدٍ ما، من قبل العديد من المستشارين الخبراء.
سكربت Close All Orders
إذا كنت تريد إغلاق جميع الأوامر في MT4، ستحتاج إلى القيام بذلك يدويًا ما لم تستخدم أداة خارجية.
لسوء الحظ، لا تسمح منصة MT4 بتحديد جميع الأوامر المفتوحة وإغلاقها مرة واحدة.
ولكن هناك حل! يمكنك إما تكويد سكربت خاص باستخدام الدالة أعلاه كقالب، أو الاستعانة بأداة جاهزة.
يمكن نسخ الاسكربت الموضح أدناه إلى منصة MT4 واستخدامه في إغلاق جميع الأوامر ببضع نقرات.
هناك عدد من معلمات الإدخال التي يمكنك تعيينها وفقًا لتفضيلاتك.
بالإضافة إلى تصفية المعلمات، هناك خيار لفرز الأوامر قبل إغلاقها بترتيب معين. يتيح ذلك اختيار إغلاق الأوامر ذات الأولوية المرتفعة أولاً.
أحد الخيارات الهامة هو إمكانية إعداد تأخير زمني (بالملي ثانية) بين محاولات الإغلاق لتجنب التحميل الزائد على خادم التداول، لاسيما وأن بعض الوسطاء لا يسمح بمثل هذا السلوك وقد يقوم بتعطيل خاصية التداول الآلي في حسابك.
يمكنك أيضًا التحكم في عدد المحاولات التي سيقوم بها الاسكربت لإغلاق كل أمر. يسمح ذلك بضمان إغلاق الصفقات بشكل مناسب حتى أثناء فترات التقلبات المرتفعة، والتي قد تؤدي إلى فشل أمر الإغلاق المرسل إلى الخادم بسبب بعض الأخطاء.
تنزيل سكربت Close All Orders لـ MT4
➥ تنزيل Close All Orders لـ MT4تثبيت سكربت Close All Orders MT4
يرجى إتباع التعليمات أدناه لتثبيت الاسكربت:
- حَمِل ملف أرشيف الاسكربت.
- افتح مجلد بيانات ميتاتريدر4 (ملف→افتح مجلد البيانات).
- افتح مجلد MQL4.
- انسخ جميع المجلدات من الأرشيف مباشرةً إلى مجلد MQL4.
- أعِد تشغيل الميتاتريدر4 أو حَدِث قائمة الاسكربتات عن طريق النقر بزر الماوس الأيمن فوق النافذة الفرعية المستكشف في المنصة واختيار تحديث.
أو يمكنك قراءة تعليمات أكثر تفصيلاً حول كيفية إجراء التثبيت.
تأكد من تحديد خانة الاختيار Allow live trading في علامة التبويب عام عند تنفيذ هذا الاسكربت وأيضًا في قائمة المنصة أدوات→خيارات→المستشارون الخبراء. وإلا فلن تتمكن من إغلاق أي أوامر.
معلمات الإدخال المثبتة مسبقًا
يمكنك إعادة إدخال قيم معلمات الإدخال لاسكربت Close All Orders ثم حفظها كنسخة باسم ملف مختلف لاستخدامها لاحقًا كاسكربت جاهز عند الحاجة دون أن تضطر لقضاء بعض الوقت في تعديل معلمات الإدخال.
سيكون لديك بهذه الطريقة عدة سكربتات جاهزة للتنفيذ (باستخدام اختصار لوحة المفاتيح على سبيل المثال) بحسب الوضع الذي تتداول في إطاره.
على سبيل المثال، دعنا ننشئ نسخة لإغلاق جميع الصفقات الخاسرة.
سيتعين عليك أولاً فتح ملف CloseAllOrders.mq4 وتحديد معامل الإدخال OnlyInLoss:
الآن قم بتغيير القيمة الافتراضية من false إلى true:
من المنطقي أيضًا إزالة خاصية show_inputs
تمامًا في مثل هذا الإصدار الجاهز. سيمنع ذلك ظهور نافذة التأكيد عند تشغيل الاسكربت.
يمكن التعليق على هذا الخط (باستخدام خطين مائلين أمامه) أو حذفه تمامًا
يمكنك الآن حفظ الملف باسم آخر لتمييزه عن سكربت Close All Orders القياسي. على سبيل المثال، يمكن أن تسميه CloseAllOrders_Losing.mq4:
الآن حان الوقت لتجميع كود المصدر:
يمكنك الآن تطبيق الاسكربت الجديد كالمعتاد في الميتاتريدر4 أو النقر بزر الماوس الأيمن وتعيين مفتاح التشغيل السريع:
يمكنك الآن تشغيل هذا الاسكربت على الفور لأغلاق الأوامر بعد تصفيتها وفقًا لمتطلباتك المحددة في أسرع وقت ممكن.
يمكن تكرار نفس العملية لإنشاء سكربتات تتعلق بأوامر الشراء فقط أو البيع فقط، أو سكربت لإغلاق الأوامر المرفق بها رقم سحري محدد (إذا كنت تحتاج لإغلاق الصفقات المفتوحة باكسبيرت معين) وهكذا.
إغلاق جميع المراكز MQL5
لا يختلف مفهوم وظيفة إغلاق جميع الصفقات في الميتاتريدر5 كثيرًا عن الميتاتريدر4. الفرق الرئيسي هو أن أوامر السوق يطلق عليها مراكز في MT5.
يمكن استخدام دالة إغلاق المراكز في نفس المواقف التي تستخدم فيها خاصية إغلاق الأوامر في الميتاتريدر4.
صُمم كود Close All Positions MQL5 التالي لإغلاق جميع المراكز المفتوحة في خطوة واحدة.
void ClosePositions() { Trade = new CTrade; // A CTrade object to close positions. int total = PositionsTotal(); // Log in the terminal the total number of positions. Print(total); // Start a loop to scan all the positions. // The loop starts from the last, otherwise it could skip positions. for (int i = total - 1; i >= 0; i--) { // If the position cannot be selected, throw and log an error. if (PositionGetSymbol(i) == "") { Print("ERROR - Unable to select the position - ", GetLastError()); break; } // Result variable - to check if the operation is successful or not. bool result = Trade.PositionClose(PositionGetInteger(POSITION_TICKET), Slippage); // If there was an error, log it. if (!result) Print("ERROR - Unable to close the position - ", PositionGetInteger(POSITION_TICKET), " - Error ", GetLastError()); } }
منطق دالة إغلاق جميع المراكز MQL5
فيما يلي منطق الدالة:
- استخدم حلقة، قم بعمل مسح لجميع المراكز.
- أغلق المركز.
- تحقق ما إذا كانت العملية ناجحة لكل مركز، وإذا لم تكن كذلك، قم بإصدار رسالة خطأ.
ستلاحظ أن الأمر أبسط كثيرًا في MT5 منه في MT4.
التحسينات الممكنة
كما هو الحال مع دالة الإغلاق MQL5، يمكن تحسين هذه الدالة عن طريق إضافة فلاتر متنوعة وخيارات الفرز.
سكربت Close All Positions
على عكس MT4، هناك ميزة مدمجة في الميتاتريدر5 لإغلاق المراكز بشكل جماعي — العمليات المجمعة. برغم ذلك، هناك قيود على استخدام هذه الوظيفة:
يمكن لهذه الأداة إغلاق جميع المراكز، أو جميع المراكز الرابحة، أو جميع المراكز الخاسرة، أو جميع مراكز الشراء، أو جميع مراكز البيع، أو جميع المراكز على < زوج معين > أو جميع المراكز في < الاتجاه الحالي > على < الزوج الحالي >. بالإضافة إلى ذلك، يمكنك استخدام طريقة Close by لإغلاق المركز الحالي باستخدام مراكز مضادة على نفس الرمز (متاحة فقط في وضع التحوط).
لا يبدو الأمر سيئًا مقارنةً بـ MT4، ولكن لا يزال من الممكن إجراء تحسينات كبيرة، على الأقل باستخدام مرشحات إضافية وخيارات الفرز.
يمكن تثبيت الاسكربت الموضح أدناه في منصة MT5 ليسمح بإغلاق جميع المراكز بناءً على تفضيلاتك:
كما هو الحال مع سكربت MT4 أعلاه، يسمح سكربت MT5 بفلترة المراكز، وفرزها، وإضافة فترة تأخير، وتعيين عدد مرات إعادة المحاولة في حالة فشل الإغلاق.
تنزيل سكربت Close All Positions لـ MT5
➥ تنزيل Close All Positions لـ MT5تثبيت سكربت Close All Positions MT5
يرجى اتباع التعليمات أدناه لتثبيت البرنامج الاسكربت:
- حَمِل ملف أرشيف الاسكربت.
- افتح مجلد بيانات ميتاتريدر5 (ملف→افتح مجلد البيانات).
- افتح مجلد MQL5.
- انسخ جميع المجلدات من الأرشيف مباشرةً إلى مجلد MQL5.
- أعِد تشغيل الميتاتريدر4 أو حَدِث قائمة الاسكربتات عن طريق النقر بزر الماوس الأيمن فوق النافذة الفرعية المستكشف في المنصة واختيار تحديث.
أو يمكنك قراءة تعليمات أكثر تفصيلاً حول كيفية إجراء التثبيت.
تأكد من تحديد خانة الاختيار Allow live trading في علامة التبويب عام عند تنفيذ هذا الاسكربت وأيضًا في قائمة المنصة أدوات→خيارات→المستشارون الخبراء. وإلا فلن تتمكن من إغلاق أي أوامر.
معلمات الإدخال المعدة مسبقًا
كما هو الحال في إصدار MT4 من الاسكربت، من المنطقي إعادة إدخال قيم معلمات الإدخال وحفظها كنسخة باسم ملف جديد، وبعدها يمكنك استخدام الاسكربتات الجاهزة دون إضاعة الوقت في ضبط المدخلات كل مرة.
يمكنك إعداد العديد من سكربتات إغلاق المراكز وتشغيلها بحسب الوضع الحالي في حساب التداول.
على سبيل المثال، دعنا نقوم بإنشاء نسخة لإغلاق المراكز المرفق بها تعليق معين، مرتبةً من تلك التي تحقق أعلى ربح نزولاً إلى الأكثر خسارة مع إعادة المحاولة مرة واحدة كحد أقصى، وبتأخير زمني 0.1 ثانية بين كل محاولة إغلاق.
ستحتاج أولاً إلى فتح ملف CloseAllPositions.mq5 وتحديد معلمات الإدخال ذات الصلة:
سيتعين عليك الآن ضبط القيم الافتراضية الجديدة:
بهذه الطريقة، سيقتصر الاسكربت على إغلاق المراكز المرفق بها تعليق " SuperEA". قد تكون هذه الخاصية مفيدة بشكل خاص عند تشغيل عدة مستشارين خبراء في حسابك وترغب في إغلاق صفقات كل منها بشكل منفصل.
وعلى غرار إصدار MT4، من المنطقي الآن حذف خاصية script_show_inputs
من النسخة الجاهزة:
يمكنك إما حذف السطر أو التعليق عليه (عن طريق وضع خطين مائلين أمامه):
يمكنك الآن حفظ نسخة من الملف باسم مختلف. على سبيل المثال، يمكن تسميتها CloseAllPositions_Comment.mq5:
ستحتاج الآن إلى تجميع سكربت MQL5 الجديد:
الاسكربت الجديد متاح الآن للاستخدام – يمكنك إما تشغيله عن طريق النقر المزدوج عليه في الميتاتريدر5 أو النقر بزر الماوس الأيمن وتعيين مفتاح التشغيل السريع:
يمكنك الآن تشغيل الاسكربت بسرعة عندما تحتاج إلى إغلاق المراكز التي تمت تصفيتها وفرزها بناءً على متطلباتك.
يمكنك تكرار العملية الموضحة أعلاه لإنشاء نسخ مختلفة من سكربت إغلاق الكل. على سبيل المثال، يمكنك إنشاء سكربت يعمل فقط مع المراكز المرفق بها رقم سحري معين (إذا كنت بحاجة للتحكم في صفقات اكسبيرت معين).
العمليات المجمعة في MT5 مقابل سكربت Close All Positions
برغم أن الميتاتريدر5 توفر إمكانية إغلاق المراكز بشكل جماعي، فإنها ليس بكفاءة سكربت Close All Positions المخصص لهذا الغرض. يتميز الاسكربت بالمزايا التالية مقارنةً بخاصية العمليات المجمعة في MT5:
- فلترة المراكز حسب التعليق.
- فلترة المراكز حسب الرقم السحري.
- الفرز قبل الإغلاق.
- التحكم في الانزلاق السعري.
- إعادة المحاولة عند فشل الإغلاق.
- خيار التأخير الزمني بين محاولات الإغلاق.
- سرعة الوصول – حيث يمكن تشغيل الاسكربت عن طريق اختصار لوحة المفاتيح أو النقر المزدوج.
- درجة أكبر من التخصيص، بما في ذلك التسجيل التفصيلي.
خاتمة
تشرح الأكواد المذكور أعلاه كيفية إعداد سكربت لإغلاق الأوامر/المراكز باستخدام مثال بسيط. يقدم سكربت Close All Orders لـ MT4 وClose All Positions لـ MT5 المجانية أداة جاهزة لإغلاق جميع الصفقات بعد فلترتها، بالإضافة إلى أمثلة أكثر تعقيدًا يمكن تضمينها في كود المصدر MQL4/MQL5 لدراسة وتعديل وترقية واستخدام الاسكربت مع برامج أخرى. يمكنك إنشاء سكربت خاص بك بسهولة لإغلاق المراكز والأوامر في الميتاتريدر4 باستخدام فلاتر وشروط مخصصة.
مناقشة
هل لديك أي أسئلة أو استفسارات حول هذا الاسكربت؟ يمكنك دائمًا مناقشة Close All Orders وClose All Positions مع متداولي الفوركس الآخرين ومبرمجيMQL4/MQL5 في منتدانا.
سجل التغييرات
1.01 — 2023-12-26
- إضافة إصدار MT5 من الاسكربت — Close All Positions.
- إضافة معامل عدد المحاولات كي يحاول الاسكربت إغلاق الصفقات بشكل مستمر.
- إضافة خيارات الفرز لإغلاق الصفقات بترتيب معين.
- تغيير سلوك الاسكربت بحيث لم يعد يعالج الأوامر المعلقة.