مع تزايد الاعتماد على الخوارزميات في الأسواق المالية، كثير من المتداولين العرب يتساءلون إذا كان بإمكانهم بناء روبوت تداول (Expert Advisor) يشتغل على منصة ميتاتريدر 5 بدون الحاجة إلى خلفية برمجية عميقة. في هذا المقال أشرح خطوة بخطوة كيف تصمم روبوت بسيط يطبق استراتيجية المتوسط المتحرك المتقاطع على زوج EUR/USD، وكيف تختبره وتضبطه لتقليل المخاطر.
لماذا المتوسط المتحرك المتقاطع؟
الطريقة تعتمد على اثنين من المتوسطات المتحركة: واحد قصير الأجل (مثلاً 10 أيام) وآخر طويل الأجل (مثلاً 50 يوم). عندما يعبر المتوسط القصير فوق الطويل، يفسر الإشارة على أنها إشارة شراء، والعكس عندما يعبر أسفله يُنظر إليه كإشارة بيع. الفكرة بسيطة، لكنها تحتاج إلى ضبط لتفادي الإشارات الكاذبة في أوقات التذبذب العالي.
الخطوة الأولى: إعداد بيئة التطوير
أول شيء يلزمك هو تحميل ميتاتريدر 5 من أحد السماسرة المعتمدين. بعد تثبيته، افتح نافذة “MetaEditor” – هي بيئة كتابة الأكواد للروبوتات. أنشئ ملف جديد واختر “Expert Advisor (Template)”. سيظهر لك قالب أساسي يمكنك تعديلّه.
الخطوة الثانية: كتابة الكود الأساسي
الكود يبدأ بتعريف المتغيرات التي ستحفظ قيم المتوسطات، حجم اللوت، وإعدادات الوقف. مثال:
#property copyright "Created by Arab Forex Blogger"
#property version "1.00"
input int FastMA = 10; // متوسط قصير
input int SlowMA = 50; // متوسط طويل
input double Lots = 0.01;
input double StopLoss = 30; // نقاط
input double TakeProfit = 60;
int fast_handle;
int slow_handle;
بعدها نحتاج نُهيّئ المؤشرات في دالة OnInit():
int OnInit()
{
fast_handle = iMA(_Symbol, PERIOD_H1, FastMA, 0, MODE_SMA, PRICE_CLOSE);
slow_handle = iMA(_Symbol, PERIOD_H1, SlowMA, 0, MODE_SMA, PRICE_CLOSE);
return(INIT_SUCCEEDED);
}
هنا نستخدم الإطار الزمني للساعة (H1) لأن معظم المتداولين العرب يفضّلون الإطارات المتوسطة لتقليل الضوضاء.
الخطوة الثالثة: توليد الإشارة وإدارة الصفقات
في دالة OnTick() نقرأ قيم المتوسطين ونقارنهم. إذا كان المتوسط القصير أعلى من الطويل وتكون لا توجد صفقة مفتوحة، نفتح صفقة شراء. والعكس للبيع. مثال مختصر:
void OnTick()
{
double fast = CopyBuffer(fast_handle, 0, 0, 1)[0];
double slow = CopyBuffer(slow_handle, 0, 0, 1)[0];
int total = PositionsTotal();
if(fast > slow && total == 0)
{
trade.Buy(Lots, _Symbol, Ask, (Ask-StopLoss*_Point), (Ask+TakeProfit*_Point), "FastMA>SlowMA");
}
else if(fast < slow && total == 0)
{
trade.Sell(Lots, _Symbol, Bid, (Bid+StopLoss*_Point), (Bid-TakeProfit*_Point), "FastMA<SlowMA");
}
}
نستعمل كائن trade من مكتبة CTrade لتبسيط عملية الفتح. لاحظ أن الوقف وجني الأرباح يُحددان بعدد النقاط، وهذا يسمح بتعديل سريع حسب تقلبات EUR/USD.
الخطوة الرابعة: اختبار الروبوت (Backtesting)
قبل ما تشغّله على حساب حقيقي، افتح “Strategy Tester” في ميتاتريدر. اختر الفترة من 2018 إلى 2023، لتغطي كلاً من أوقات التقلب العالي (مثل خريف 2022) والهدوء النسبي. ركّز على مقاييس الأداء: صافي الربح، نسبة الفوز، وأقصى سحب (Maximum Drawdown). إذا ظهر سحب كبير فوق 15 % من رأس المال، فكر في تقليل حجم اللوت أو زيادة فترة المتوسط الطويل.
الخطوة الخامسة: تحسين الإعدادات (Optimization)
الميتاتريدر يتيح لك تشغيل “Optimization” لتجربة قيم مختلفة للمتوسطين، حجم اللوت، ومستوى الوقف. لا تنسَ أن تضع “تقييد” للنتائج بحيث لا تختار الإعدادات التي تُظهر أفضل أداء فقط في العينة المختارة، بل تلك التي تستمر في تقديم ربح ثابت عبر عدة فترات زمنية.
الخطوة السادسة: إدارة المخاطر على حساب حقيقي
حتى لو كان الروبوت يحقق نتائج جيدة في الاختبار، لا تضع كل رأس المال في صفقة واحدة. القاعدة الذهبية هي ألا يتجاوز حجم اللوت 1 % من حسابك في كل صفقة. إذا كان رصيدك 10 000 دولار، فـ 0.1 % يعني حجم لوت 0.01 تقريباً. كذلك ضع “Trailing Stop” لتقفل الأرباح تلقائيًا إذا تحرك السعر في صالحك.
نصائح ختامية لتجنب الأخطاء الشائعة
- احرص على مراقبة الفجوات السعرية (Gaps) عند فتح الروبوت في أوقات الأخبار الكبيرة؛ قد تُفقد أوامر الوقف.
- تأكد من أن الخادم (Server) الذي تتعامل معه لا يفرض تأخيرات كبيرة (Latency) تؤثر على تنفيذ أوامر الدخول.
- استخدام حساب تجريبي لمدة شهرين على الأقل لتقييم استقرار الروبوت في ظروف سوق حية.
- تحديث الكود بانتظام لتضمين تعديلات على الفترات الزمنية إذا لاحظت تراجع الأداء.
في النهاية، بناء روبوت تداول للزوج EUR/USD ليس مهمة مستحيلة حتى للمتداول العربي غير المبرمج. الفكرة الأساسية هي اختيار استراتيجية واضحة، كتابة كود بسيط، واختبارها بصرامة. إذا التزمت بإدارة المخاطر وأجريت تحسينات دورية، ستحصل على أداة تساعدك على استغلال تحركات السوق دون الحاجة للمتابعة المستمرة.

