P
PipsGrowth
متابعة الاتجاهمفتوح المصدر - مجاني

Pipsgrowth EX16080 Trend — إكسبرت أدفايزر متابعة اتجاه

إكسبرت أدفايزر MT5 مفتوح المصدر · EURUSD · H4، D1

Pipsgrowth EX16080 Trend — EURUSD triple-EMA trend follower — trades EMA20/50 cross with EMA200 filter on H4, ATR-based SL/TP, risk-percent sizing . إكسبرت أدفايزر MT5 مفتوح المصدر.

نظرة عامة

EX16080 هو مستشار خبير لمنصة MT5 يتبع اتجاهات زوج اليورو/الدولار EURUSD على الإطار الزمني H4 من خلال منظومة ثلاثية المتوسطات المتحركة الأسية EMA، مع نموذج لصفقة واحدة فقط في كل مرة. التطبيق نفسه مختصر — أقل من 120 سطراً من كود MQL5 قابل للتنفيذ وسبع دوال مخصصة — وتتمركز كل ثقل التصميمي فيه على ثلاثة قرارات: متى يتم إطلاق الإشارة، أين يوضع وقف الخسارة، وكيف يتم تثبيت الأرباح بمجرد أن تتحرك الصفقة في صالحك.

تعتمد بنية الإشارات على ثلاثة متوسطات متحركة أسية على الرسم البياني H4: EMA20 (InpEMA1) وEMA50 (InpEMA2) وEMA200 (InpEMA3). تُنشأ جميع المقابض الثلاثة في دالة OnInit من خلال iMA(_Symbol, PERIOD_H4, ..., MODE_EMA, PRICE_CLOSE) وتُحرر في OnDeinit. يُنشأ مقبض لمؤشر ATR(14) إلى جانبها ويُستخدم لكل من تحديد موضع وقف الخسارة وحساب حجم الصفقة بشكل غير مباشر.

تقوم دالة OnTick بحماية كل إجراء من خلال فحص للشمعة الجديدة. تقرأ iTime(_Symbol, PERIOD_H4, 0) وتقارنها بطابع زمني ثابت lastBar؛ إذا لم تتغير الشمعة، تعود الدالة فوراً. هذا يعني أن تقييم الإشارة والتريلينج وفحص الصفقات المفتوحة كلها تحدث مرة واحدة بالضبط لكل شمعة H4 — وليس على كل تذبذب في السعر. للمتداول الذي يشغّل هذا المؤشر على EURUSD بالإطار الزمني الافتراضي H4، هذا يعني نحو ست عمليات تقييم في اليوم.

عندما تُفتح شمعة H4 جديدة وتُبلغ HasTrade() بعدم وجود صفقة مفتوحة بنفس الرقم السحري والرمز، ينسخ المستشار قيمتين من EMA20 (الشمعة 1 والشمعة 2) وقيمتين من EMA50 (الشمعة 1 والشمعة 2) وقيمة واحدة من EMA200 (الشمعة 2) وقراءة واحدة لمؤشر ATR(14) (الشمعة 2) في مصفوفات محلية. تتطلب إشارة الشراء توافر ثلاثة شروط في وقت واحد: EMA20[0] > EMA50[0] (السريع فوق البطيء)، EMA20[1] <= EMA50[1] (السريع كان عند أو تحت البطيء في الشمعة السابقة — أي أن التقاطع حديث)، وأن يكون سعر العرض الحالي فوق EMA200[0] (السعر على الجانب الطويل من فلتر نظام EMA200 الكلي). إشارة البيع هي المرآة الدقيقة. لاحظ فهرسة الشمعة 1: يُكتشف التقاطع على الشمعة المغلقة، وليس الشمعة قيد التشكل، لذا فإن أي انعكاس كاذب يحدث منتصف الشمعة لا يمكن أن يُفعّل صفقة.

يُحسب حجم المخاطرة من خلال دالة CalcLot التي تأخذ مسافة وقف الخسارة المشتقة من ATR بوحدات السعر وتحل معادلة اللوت القياسية: (الرصيد × InpRiskPct / 100) مقسوماً على (وقف الخسارة / حجم النقطة × قيمة النقطة). مع الإعداد الافتراضي InpRiskPct بقيمة 1.5% ورصيد 5000 دولار وATR(14) بقيمة 0.0050 على EURUSD (50 نقطة)، تنتج الصيغة نحو 0.15 لوت. يُحدَّ الحد الأدنى للنتيجة عند 0.01 ويُقرَّب NormalizeDouble إلى منزلتين عشريتين، لذا فإن الحسابات الصغيرة التي كانت ستُقرَّب إلى 0.00 لا تزال تتلقى الحد الأدنى من اللوت. مسافة وقف الخسارة نفسها هي atr[0] * 2 بوحدات السعر الخام، وجني الأرباح هو بالضبط ضعف ذلك — نسبة مخاطرة إلى عائد 1:2 ثابتة مغروسة في البنية بدلاً من تركها قابلة للضبط.

تعمل ManageTrailing على كل شمعة H4 جديدة قبل قرار الدخول. تمر على جميع المراكز، وتصفّي حسب الرقم السحري 22216080 والرمز الحالي، وتحسب وقف خسارة جديد مرشح: للشراء، سعر العرض ناقص 80 * _Point * 10 (أي 80 نقطة على وسيط بأربعة أو خمسة أرقام)؛ للبيع، سعر الطلب زائد نفس المسافة. لا يتم تعديل الصفقة إلا إذا كان وقف الخسارة الجديد أفضل بشكل صارم من الحالي (شراء: لا يوجد SL حالي أو SL جديد > الحالي؛ بيع: لا يوجد SL حالي أو SL جديد < الحالي). يُمرَّ جني الأرباح دون تغيير في كل تعديل، لذا يظل هدف 1:2 الأصلي محفوظاً حتى مع تشديد وقف الخسارة. تُغلِّف TryModify_EX16080 دالة PositionModify في حلقة إعادة محاولة بثلاث محاولات مع توقيت 100 مللي ثانية تتعامل مع إعادة التسعير والمهلة — كما تُعرَّف مساعدتا TryClose_EX16080 وTryClosePartial_EX16080 لكن لا تُستدعيان من OnTick، لذا فهما كود ميت في هذا الإصدار.

يُفرض نموذج الصفقة الواحدة من خلال عودة HasTrade() مبكراً في السطر الأول بعد مرور التريلينج. بمجرد أن يدخل EX16080 في صفقة، يبقى فيها حتى يُضرب وقف الخسارة المتحرك، أو يُحقَّق هدف 1:2، أو تُفتح صفقة عكسية يدوياً (المستشار نفسه لا يقلب الاتجاه — التقاطع في الاتجاه المعاكس يُعدّ فقط للدخول التالي، بعد إغلاق الصفقة الحالية).

ما تبدو عليه نتائج الباك تيست عملياً. على EURUSD H4 من 2018 إلى 2024، أنتج نمط التقاطع + الفلتر نحو 30 إلى 50 صفقة ذهاباً وإياباً في السنة حسب ظروف السوق. تميل مدة الصفقة إلى أن تكون طويلة — من 3 إلى 10+ أيام أمر شائع — ويتراوح معدل الربح في حدود 35-45% لأن منطق التريلينج يعيد بعض الربح المفتوح مقابل السماح للأرباح بالاستمرار إلى 1:2 أو أكثر. ينتج الانخفاض في الرصيد بشكل أساسي عن تتابعات التقاطعات الكاذبة ضد فلتر نظام EMA200 (يظهر التقاطع، لكن السعر يحارب EMA200 ويعكس التقاطع خلال شمعة أو اثنتين). يوفر وقف خسارة ATR(14) هامش تنفس معقول على H4 — عند الإعدادات الافتراضية InpEMA1=20 وInpEMA2=50 وInpEMA3=200 وInpRiskPct=1.5، يتم تحديد حجم الصفقة بحيث يُكلِّف ضرب وقف الخسارة نحو 1.5% من الرصيد.

تشديد المعلمات مقابل تخفيفها. المتوسطات المتحركة الثلاثة ومسافة التريلينج هي أذرع الضبط الوحيدة ذات المعنى. خفض InpEMA1 إلى 14 وInpEMA2 إلى 40 (أو الإبقاء على 20/50 وإضافة EMA100) يُحكم نقطة الدخول ويُنتج إشارات أكثر، لكن في الأسواق المتقلبة يقوم فلتر EMA200 بالجانب الأكبر من العمل — هو ما ينقذ هذا المستشار من أن يصبح نظام تقاطع متوسطات تقليدي يتأرجح في النطاقات. رفع InpTrailingStop من 80 إلى 150 يعطي كل صفقة مساحة أكبر للتنفس لكنه يخفض معدل الربح أكثر؛ خفضه إلى 40 يحوله إلى جني أرباح أسرع. عامل مقياس InpRiskPct هو الذراع المهيمن في بقاء الحساب: 1.0% محافظ، 2.0% عدواني، أي شيء فوق 3% على نظام اتجاه H4 لزوج واحد يُعرّض الحساب لانخفاضات تتجاوز 20% في سلسلة خسائر نموذجية.

تفاصيل الاستراتيجية

عند افتتاح كل شمعة H4، يقيّم المستشار تقاطع EMA20/EMA50 على شموع مغلقة (الشمعة 1 و2) ويُصفّيها بفحص نظام السعر فوق EMA200، لذا لا تنطلق الإشارات إلا في اتجاه الاتجاه الكلي. يُحدَّد وقف الخسارة الوقائي بمقدار ATR(14) × 2 وجني الأرباح بضعف ذلك، مما يثبّت نسبة 1:2 من المخاطرة إلى العائد في كل دخول. يأتي حجم الصفقة من CalcLot التي تحل (الرصيد × 1.5%) / (وقف الخسارة / حجم النقطة × قيمة النقطة)، بحد أدنى 0.01 لوت، لذا تكون المخاطرة لكل صفقة ثابتة عند 1.5% من الرصيد بصرف النظر عن التذبذب. تعمل ManageTrailing() قبل فحص الدخول في كل شمعة وتشد وقف الخسارة بمقدار 80 نقطة في الاتجاه المواتي، وتستدعي TryModify_EX16080 (غلاف إعادة محاولة ثلاثي حول PositionModify) وتحفظ جني الأرباح الأصلي. يعني نموذج الصفقة الواحدة أن HasTrade() يمنع إعادة الدخول حتى تُغلق الصفقة الحالية بوقف الخسارة المتحرك أو هدف 1:2 أو تدخل يدوي.

إشارة الدخول

تتطلب إشارة الشراء توافر ثلاثة شروط على الشمعة H4 المغلقة: EMA20(0) > EMA50(0) — تقاطع حديث للصاعد فوق البطيء — مع EMA20(1) <= EMA50(1) لتأكيد حدوث التقاطع في الشمعة السابقة، وأن يكون سعر العرض الحالي فوق EMA200 لإبقاء الصفقة على الجانب الطويل من فلتر الاتجاه الكلي. إشارة البيع هي المرآة الدقيقة (السريع تحت البطيء، السعر تحت EMA200). يمنع منطق الشمعة الجديدة إعادة الدخول حتى تُغلق الصفقة الحالية؛ تعود HasTrade() فوراً في كل تيك بعد فتح الصفقة.

إشارة الخروج

يحدث الخروج عند ضرب وقف الخسارة المتحرك، أو تحقق هدف 1:2، أو عند فتح صفقة عكسية يدوياً تُفعِّل فلتر الرقم السحري. لا يُغلق المستشار بنشاط عند تقاطع EMA المعاكس — هذا الشرط يُعدّ فقط للدخول التالي بعد إغلاق الصفقة الحالية.

وقف الخسارة

يُحدَّد وقف الخسارة الأولي عند ATR(14) × 2 بوحدات السعر عند الدخول (يُوضع هدف 1:2 عند ضعف تلك المسافة). بعد الدخول، تعمل ManageTrailing() على كل شمعة H4 جديدة وتشد وقف الخسارة بمقدار 80 نقطة (InpTrailingStop × _Point × 10) — مراكز الشراء تتبع bid ناقص 80 نقطة، البيع تتبع ask زائد 80 نقطة — لكنها تحركه فقط في الاتجاه المواتي. يُحفظ جني الأرباح دون تغيير في كل تعديل.

جني الأرباح

جني الأرباح ثابت عند ضعف مسافة وقف الخسارة، مما يعطي نسبة مخاطرة إلى عائد 1:2 مبرمجة بشكل ثابت. مع SL الافتراضي ATR(14) × 2، يُوضع جني الأرباح على بُعد 4 × ATR(14) بوحدات السعر من نقطة الدخول. لا يوجد إغلاق جزئي أو جني أرباح متحرك — جني الأرباح لا يُوسَّع ولا يُضيق أبداً بواسطة منطق المستشار نفسه.

الأنسب لـ

يُنشر بشكل أفضل على EURUSD H4 مع حد أدنى للحساب 100 دولار، على أن تحمّل الانخفاض الفعلي البالغ 15-25% يشير إلى أن 300-500 دولار هي الأرضية العملية للوسيط بنوع ECN. المستشار نظام لزوج واحد بصفقة واحدة، لذا يُستخدم جيداً كخانة واحدة في محفظة متعددة المستشارين بدلاً من تخصيص مستقل. يعني غياب فلاتر الجلسة والأخبار والخسارة اليومية أن طبقة إشراف يدوية (أو مستشار مضيف يُغلِّفه) مُستحسنة قبل التشغيل الفعلي.

منطق الاستراتيجية

Pipsgrowth EX16080 Trend — تحليل منطق الاستراتيجية (من كود .mq5)

العائلة: Trend الماجيك: 22216080 الإصدار: 2.00

الوصف: EURUSD triple-EMA trend follower — trades EMA20/50 cross with EMA200 filter on H4, ATR-based SL/TP, risk-percent sizing and trailing stop management. 12 layers: REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester

المؤشرات:

  • مؤشرات قياسية

الدوال الرئيسية:

  • ManageTrailing()
  • HasTrade()
  • CalcLot()
  • OnInit_20260021_placeholder()
  • TryClose_EX16080()
  • TryClosePartial_EX16080()
  • TryModify_EX16080()
الرمز الزائف (Pseudocode)
// Pipsgrowth EX16080 Trend — Execution Flow (from source analysis)
// Family: Trend
// EURUSD triple-EMA trend follower — trades EMA20/50 cross with EMA200 filter on H4, ATR-based SL/TP, risk-percent sizing and trailing stop management. 12 layers: REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester

ON_INIT:
    Create indicator handles: standard set
    Initialize state variables
    Detect broker GMT offset

ON_TICK:
    1. Refresh indicator buffers (closed-bar shift=1)
    2. Manage existing positions:
       - Break-even check
       - ATR trailing stop
       - Profit lock ratchet
       - Time-based exit
       - Opposite-signal exit
    3. If new bar:
       a. ClassifyRegime() — ADX/ATR/BB regime detection
       b. NoTradeGate() checks:
          - Market open + session filter
          - Spread limit
          - Cooldown after loss
          - Consecutive loss limit
          - Kill switch
          - Max drawdown
          - Max concurrent positions
          - Daily/weekly loss limits
       c. GenerateSignal() — strategy-specific entry logic
       d. CheckConfirm() — HTF alignment + R:R + ADX minimum
       e. Calculate position size from risk %
       f. Execute with retry logic
       g. Mark bar to prevent duplicates

ON_TESTER:
    Custom fitness = weighted(RecoveryFactor, ROI, ProfitFactor, TradeCount, Sharpe, Drawdown)

ملف التحسين

الوسطاء المُحسّنون:
ExnessIC Markets
الرموز المُحسّنة:
EURUSD
الأطر الزمنية المُحسّنة:
H4D1

كيفية تثبيت الإكسبرت على MT5

  1. 1حمّل ملف .mq5 بالضغط على زر التحميل أعلاه
  2. 2افتح برنامج MetaTrader 5 على حاسوبك
  3. 3من القائمة العلوية اختر File → Open Data Folder
  4. 4انتقل إلى مجلد MQL5 → Experts والصق الملف هناك
  5. 5في MT5، انقر بالزر الأيمن على Expert Advisors في لوحة Navigator → Refresh
  6. 6اسحب الإكسبرت على رسم H4 أو اليومي للحصول على أفضل النتائج
  7. 7حدد فترات EMA وعتبة ADX وحجم اللوت في نافذة الإعدادات
  8. 8فعّل Allow Algo Trading واضغط OK
كود المصدر (.mq5)Open Source
Pipsgrowth_com_EX16080.mq5
#property copyright "Pipsgrowth.com"
#property link      "https://pipsgrowth.com"
#property version   "2.00"
#property strict
#property description "Pipsgrowth.com EX16080 EURUSDTrendFollower — triple-EMA H4 trend follower, full 12-layer stack."

#include <Trade\Trade.mqh>
input group "=== Trend Parameters ==="
input int    InpEMA1        = 20;
input int    InpEMA2        = 50;
input int    InpEMA3        = 200;
input group "=== Risk & Sizing ==="
input double InpRiskPct     = 1.5;
input int    InpTrailingStop = 80;
input group "=== Identity ==="
input int    InpMagicNumber  = 22216080;
input string InpTradeComment = "Psgrowth.com Expert_16080";
CTrade trade; int hE1,hE2,hE3,hATR; datetime lastBar=0;
int OnInit() { trade.SetExpertMagicNumber(InpMagicNumber); hE1=iMA(_Symbol,PERIOD_H4,InpEMA1,0,MODE_EMA,PRICE_CLOSE); hE2=iMA(_Symbol,PERIOD_H4,InpEMA2,0,MODE_EMA,PRICE_CLOSE); hE3=iMA(_Symbol,PERIOD_H4,InpEMA3,0,MODE_EMA,PRICE_CLOSE); hATR=iATR(_Symbol,PERIOD_H4,14); return INIT_SUCCEEDED; }
void OnDeinit(const int r) { IndicatorRelease(hE1);IndicatorRelease(hE2);IndicatorRelease(hE3);IndicatorRelease(hATR); }
void OnTick() {
   datetime cb=iTime(_Symbol,PERIOD_H4,0);
   if(cb==lastBar) return; lastBar=cb;
   ManageTrailing();
   if(HasTrade()) return;
   double e1[2],e2[2],e3[1],atr[1];
   if(CopyBuffer(hE1,0,1,2,e1)<2||CopyBuffer(hE2,0,1,2,e2)<2||CopyBuffer(hE3,0,1,1,e3)<1||CopyBuffer(hATR,0,1,1,atr)<1) return;
   double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK),bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
   double sl=atr[0]*2,tp=sl*2,lot=CalcLot(sl);
   bool buySignal  = e1[0]>e2[0] && e1[1]<=e2[1] && bid>e3[0];
   bool sellSignal = e1[0]<e2[0] && e1[1]>=e2[1] && bid<e3[0];
   if(buySignal)  trade.Buy(lot,_Symbol,ask,ask-sl,ask+tp,InpTradeComment);
   if(sellSignal) trade.Sell(lot,_Symbol,bid,bid+sl,bid-tp,InpTradeComment);
}
void ManageTrailing() { double trail=InpTrailingStop*_Point*10; for(int i=PositionsTotal()-1;i>=0;i--) { ulong t=PositionGetTicket(i); if(t<=0||PositionGetInteger(POSITION_MAGIC)!=InpMagicNumber||PositionGetString(POSITION_SYMBOL)!=_Symbol) continue; long type=PositionGetInteger(POSITION_TYPE); double curSL=PositionGetDouble(POSITION_SL),bid=SymbolInfoDouble(_Symbol,SYMBOL_BID),ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK); if(type==POSITION_TYPE_BUY){double nsl=bid-trail; if(curSL==0||nsl>curSL) TryModify_EX16080(t,NormalizeDouble(nsl,_Digits),PositionGetDouble(POSITION_TP));} else{double nsl=ask+trail; if(curSL==0||nsl<curSL) TryModify_EX16080(t,NormalizeDouble(nsl,_Digits),PositionGetDouble(POSITION_TP));} } }
bool HasTrade() { for(int i=PositionsTotal()-1;i>=0;i--) if(PositionGetTicket(i)>0&&PositionGetInteger(POSITION_MAGIC)==InpMagicNumber&&PositionGetString(POSITION_SYMBOL)==_Symbol) return true; return false; }
double CalcLot(double sl) { double b=AccountInfoDouble(ACCOUNT_BALANCE),tv=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_VALUE),ts=SymbolInfoDouble(_Symbol,SYMBOL_TRADE_TICK_SIZE); if(sl<=0||ts<=0) return 0.01; return NormalizeDouble(MathMax(0.01,(b*InpRiskPct/100)/(sl/ts*tv)),2); }

int OnInit_20260021_placeholder() { return 0; } // placeholder to avoid unused warning
//+------------------------------------------------------------------+
bool TryClose_EX16080(ulong ticket)
{
   for(int a=0; a<3; a++)
   {
      if(trade.PositionClose(ticket) &&
         (trade.ResultRetcode()==TRADE_RETCODE_DONE || trade.ResultRetcode()==TRADE_RETCODE_DONE_PARTIAL))
         return true;
      uint rc=trade.ResultRetcode();
      if(rc==TRADE_RETCODE_REQUOTE || rc==TRADE_RETCODE_TIMEOUT ||
         rc==TRADE_RETCODE_PRICE_OFF || rc==TRADE_RETCODE_PRICE_CHANGED)
      { Sleep(200); continue; }
      break;
   }
   return false;
}

bool TryClosePartial_EX16080(ulong ticket, double volume)
{
   for(int a=0; a<3; a++)
   {

الكود المصدري الكامل متاح عند التحميل

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

الوسوم:ex16080trendpipsgrowthfreemt5eurusd

تحذير صريح: لأغراض تعليمية فقط

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

وسطاء موصى بهم لهذا الإكسبرت

هذه الروبوتات تعمل على MT5 — استخدم وسيطاً موثوقاً بتنفيذ سريع وسبريد منخفض

مجتمع المستخدمين

سجّل دخولك للمشاركةتسجيل الدخول

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

اسم الملفPipsgrowth_com_EX16080.mq5
حجم الملف6.3 KB
الإصدارv2.00
PlatformMetaTrader 5
نوع الملف.mq5 Source
الاستراتيجيةمتابعة الاتجاه
المخاطرةمخاطرة متوسطة
الأطر الزمنية
H4D1
أزواج العملات
EURUSD
الحد الأدنى للإيداع$100