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

Pipsgrowth EX18115 TrendFollow — إكسبرت أدفايزر إكسبرت أدفايزر

إكسبرت أدفايزر MT5 مفتوح المصدر · XAUUSD · M5، H1

Pipsgrowth EX18115 TrendFollow — Opens an initial position then, when drawdown reaches a configurable step, adds hedging recovery levels at increasing lo. إكسبرت أدفايزر MT5 مفتوح المصدر.

نظرة عامة

EX18115 HedgingMartingale، على الرغم من الترويسة التسويقية التي تعلن «12-طبقة معمارية كاملة» تشمل تصنيف النظام وتوليد الإشارات والتأكيدات وفلاتر عدم التداول وقيود رأس المال ومحرك المخاطر والتوسع وتمرير OnTester، هو في الواقع سكربت استرداد مكوّن من ملف واحد. الترويسة في أعلى ملف .mq5 تذكر 12 طبقة (REGIME وSIGNAL وENTRY وCONFIRM وNO-TRADE وCAPITAL CAP وRISK وSIZING وMANAGE وEXIT وSCALING وOnTester)، لكن إذا فتحت الملف ستجد ست دوال فقط — BasketProfit وCountOpen وCloseAll وثلاث دوال إعادة محاولة TryClose_EX18115 وTryClosePartial_EX18115 وTryModify_EX18115 — بالإضافة إلى جسم OnTick() واحد لا يتجاوز 12 سطراً. لا يوجد مصنف نظام، ولا مؤشر، ولا دالة إشارة، ولا بوابة تأكيد، ولا فلتر أخبار، ولا فلتر جلسة، ولا OnTester، ولا لوحة معلومات، ولا أي كائن رسم بياني. الترويسة طموحات تسويقية لا وصف للبنية الفعلية للملف.

ما يفعله الـEA فعلياً هو نمط استرداد معروف ومحدد. عندما تجد OnTick() أن عدد المراكز المفتوحة صفر وأن initialOpen تساوي false، يقرأ سعر ASK الحالي ويستدعي trade.Buy() بـ InpInitialLot (افتراضي 0.10) وبتعليق Psgrowth.com Expert_18115. قيمتا وقف الخسارة وجني الأرباح الممررتان إلى trade.Buy() كلاهما 0 — لا يوجد وقف حماية لكل صفقة على الإدخال. ينقلب initialOpen إلى true وينتظر الـEA. إذا تحرك السعر ضد الشراء الأولي بما يكفي من النقاط، يصبح السلة كلها بالسالب؛ عندها يضيف الـEA صفقة SELL تحوطية لتثبيت الانسحاب في دورة ضربات اللوت المغلقة.

تحكم في رجل التحوط ثلاثة مدخلات تعمل معاً. يجب أن يكون InpEnableMartingale (افتراضي false) صحيحاً ليعمل الاسترداد. يضبط InpRecoveryStep (افتراضي 100 نقطة) مشغل الانسحاب لكل مستوى بالنقاط الخام، ويُضرب هذا المشغل في (level+1)، لذا تُفتح التحوطة الثانية عندما تكون السلة منخفضة بمقدار 100 × 2 = 200 نقطة، والثالثة عند 100 × 3 = 300 نقطة، والرابعة عند 100 × 4 = 400 نقطة. أما InpHedgeLot (افتراضي 0.20) فهو لوت الأساس للتحوطة الأولى، واللوت الفعلي هو NormalizeDouble(InpHedgeLot * MathPow(2, level), 2) — أي أن المستويات 0.20 ثم 0.40 ثم 0.80 ثم 1.60 لوت افتراضياً. يحد InpMaxLevels عدد مستويات التحوط في دورة استرداد واحدة (افتراضي 4). بمجرد الوصول إلى هذا الحد، يتوقف الـEA عن إضافة مراكز وينتظر عودة السلة. لا يوجد قاطع يوقف الـEA نهائياً عند عتبة سحب للحافظة، والسلامة الوحيدة هي سقف InpMaxLevels.

منطق الخروج هو أبسط جزء في التصميم والشرط الوحيد الذي يغلق السلة فعلياً. في كل تيك، بعد إعادة حساب BasketProfit() وCountOpen()، يفحص الكود if(cnt>0 && basket>=50). إذا كانت السلة موجبة بـ50 وحدة من عملة الحساب (لا تحجيم باللوت، ولا تحجيم بالخطوة، هدف ثابت 50 دولار/50 يورو/50 ين/50 وحدة ذهب وما إلى ذلك)، يُستدعى CloseAll() الذي يتكرر على PositionsTotal() من الأعلى إلى الأسفل، ويرشح بالرقم السحري 22218115 ورمز الشارت، ويرسل إغلاقاً عبر TryClose_EX18115. تعيد هذه الدالة المحاولة حتى ثلاث مرات مع Sleep() مقدارها 200 مللي ثانية بين المحاولات في رموز requote وtimeout وprice-off وprice-changed، وترجع false عند الفشل الثالث. بعد تشغيل CloseAll()، يعيد الـEA تصفير level = 0 وinitialOpen = false، لذا فإن أول تيك لاحق بدون مراكز مفتوحة سيبدأ دورة جديدة بشراء جديد بحجم InpInitialLot. لا يوجد إغلاق جزئي، ولا جني أرباح لكل مستوى، ولا وقف متحرك.

ثمة ملاحظات صريحة عن التنفيذ. كلتا استدعائي trade.Buy() وtrade.Sell() تمرران 0 و0 لكل من وقف الخسارة وجني الأرباح، لذا فالشيء الوحيد الذي يقف بين الحساب والسحب غير المحدود هو سقف InpMaxLevels ونداء الهامش من الوسيط. لا يوجد وقف لمنحنى الأسهم، ولا وقف خسارة يومي، ولا وقف لكل مستوى، ولا قاتل طوارئ. يحتوي جسم OnTick() على return بعد الشراء الأول وreturn آخر بعد إغلاق ربح السلة، لذا يتم تخطي بقية الدالة في تلك التيكات؛ عملياً يعالج الـEA قراراً واحداً لكل تيك. دوال إعادة المحاولة TryClosePartial_EX18115 وTryModify_EX18115 مُعرَّفة ومُجمَّعة، لكن لا شيء في المسار النشط يستدعيها — CloseAll() يستدعي فقط TryClose_EX18115، ولا توجد أي تعديلات على المراكز القائمة في أي مكان بالملف.

الرقم السحري مبرمج كـ 22218115 في مدخل InpMagicNumber ويُطبَّق أيضاً على كائن CTrade عبر trade.SetExpertMagicNumber(InpMagicNumber) في OnInit(). تعليق الصفقة هو السلسلة الحرفية Psgrowth.com Expert_18115 للشراء الأولي وPsgrowth.com Expert_18115 Lvl <n> للتحوطات، مما يسهل تحديد مراكز الـEA في لوحة التداول وفي أي أداة تقارير خارجية. وضع التعبئة هو ما يعلنه الوسيط — لا يستدعي الـEA trade.SetTypeFilling() ولا يتجاوز ORDER_FILLING_*، لذا على حسابات ECN/STP تُطبَّق سياسة الوسيط تلقائياً. تسامح الانزلاق مضبوط بـ trade.SetDeviationInPoints(30)، وهو متسامح للذهب لدى معظم وسطاء التجزئة لكنه قد يُقصّ في ارتفاعات الأخبار السريعة.

في الباك تيست، سيطبع هذا الـEA عدداً قليلاً من الصفقات في الجلسة على M5 XAUUSD. سيكون منحنى الأسهم على شكل درجات: مقاطع مسطحة طويلة تتخللها انسحابات مفاجئة متعددة المستويات تُحَل في إغلاق ربح سلة واحد، أو تصل إلى سقف InpMaxLevels وتتعثر. في معظم الوقت يكون الـEA خاملاً — يوجد شراء واحد بالضبط لكل دورة جديدة. التيكات المهمة هي دورات الاسترداد، حيث تبقى أربعة مراكز (شراء أولي واحد وما يصل إلى ثلاث أو أربع تحوطات) على الكتاب في وقت واحد بدون وقفيات حماية، وتُغلق السلة إما عند +50 وحدة أو لا تُغلق إطلاقاً ضمن نافذة الاختبار. إذا كنت تنوي تشغيل هذا الـEA في الإنتاج، فأهم قرار في الإعداد هو ضبط InpEnableMartingale = true، وإن فعلت ذلك فمدى عدوانية مضاعف اللوت وخطوة الاسترداد. الإعداد الافتراضي هو نقطة البداية الأكثر أماناً: المارتينغال مغلق، لوت واحد 0.10، جني أرباح السلة عند 50. الإعدادات الأكثر خطورة ليست بقدر ما إذا كان الـEA «يعمل» بقدر ما إذا كان الهامش لدى الوسيط وحجم الحساب يستطيعان استيعاب سلة مكتملة التحجيم لا تسترد قبل انتهاء الاختبار.

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

في كل تيك، يعيد الـEA حساب ربح السلة وعدد المراكز المفتوحة العائدة للرقم السحري 22218115 على رمز الشارت. إذا كانت السلة غير فارغة والربح لا يقل عن +50، يهدم السلة عبر TryClose_EX18115 (غلاف CTrade.PositionClose بثلاث محاولات مع تراجع 200 مللي ثانية في requote/timeout/price-off/price-changed)، ثم يُصفّر level=0 وinitialOpen=false. إذا كانت السلة فارغة وinitialOpen تساوي false، يُطلق شراء سوقي واحد بحجم InpInitialLot ويقلب initialOpen إلى true. إذا كان InpEnableMartingale صحيحاً وكانت السلة في سحب تجاوز InpRecoveryStep × (level+1) نقطة، يُضيف تحوطة SELL واحدة بحجم InpHedgeLot × 2^level، ويزيد level حتى يصل إلى InpMaxLevels. لا يوجد مؤشر، ولا دالة إشارة، ولا فلتر جلسة، ولا فلتر أخبار، ولا OnTester، ولا لوحة معلومات، ولا كائن رسم بياني — الاستراتيجية بأكملها هي سلّم الإغلاق-ثم-الاسترداد المشفّر داخل OnTick().

إشارة الدخول

الإدخال الأول هو شراء سوقي بحجم InpInitialLot (افتراضي 0.10 لوت) بسعر ASK الحالي، يُرسَل في أول مرة تجد فيها OnTick() أن عدد المراكز المفتوحة صفر وأن علامة initialOpen تساوي false. أما إدخالات الاسترداد فهي تحوطات SELL بحجم InpHedgeLot × 2^level لوت (0.20 / 0.40 / 0.80 / 1.60 افتراضياً)، تُفتَح كل واحدة عندما تنخفض سلة المراكز المفتوحة بمقدار InpRecoveryStep × (level+1) نقطة (100 / 200 / 300 / 400 افتراضياً)، بحد أقصى InpMaxLevels تحوطات (افتراضي 4). يجب أن يكون InpEnableMartingale صحيحاً ليعمل فرع الاسترداد.

إشارة الخروج

مسار الخروج الوحيد هو CloseAll()، يُطلَق من OnTick() عندما يكون CountOpen() أكبر من صفر ويكون BasketProfit() على الأقل +50 بعملة الحساب. يتكرر CloseAll() على المراكز من أعلى فهرس إلى أدنى فهرس، ويرشح بالرقم السحري 22218115 ورمز الشارت، ويمرر كل إغلاق عبر TryClose_EX18115 (ثلاث محاولات مع Sleep 200 مللي ثانية في requote/timeout/price-off/price-changed). بعد إغلاق السلة، يُعيد الـEA تصفير level=0 وinitialOpen=false وينتظر حالة صفر-مراكز لبدء دورة جديدة. لا يوجد إغلاق جزئي ولا خروج لكل مستوى.

وقف الخسارة

لا يوجد وقف خسارة لكل صفقة سواء على الشراء الأولي أو على أي من تحوطات البيع — تُستدعى trade.Buy() وtrade.Sell() بـ0 لمعامل وقف الخسارة. الشيء الوحيد الذي يحد من عمق دورة الاسترداد هو سقف InpMaxLevels للتحوط (افتراضي 4) مضافاً إليه نداء الهامش من الوسيط. لا يوجد وقف لمنحنى الأسهم، ولا سقف خسارة يومي، ولا قاتل طوارئ في أي مكان بالملف.

جني الأرباح

لا يوجد جني أرباح لكل صفقة على أي من المستويات — تُستدعى trade.Buy() وtrade.Sell() بـ0 لمعامل جني الأرباح. هدف السلة هو +50 ثابتة بعملة الحساب، مضبوطة داخل جسم OnTick() كـ basket >= 50. لا يوجد تحجيم بعدد اللوتات، أو رقم المستوى، أو حجم الانسحاب؛ سلة ذات أربعة أرجل بحجم 0.10 + 0.20 + 0.40 + 0.80 لوت وسلة ذات رجل واحدة بحجم 0.10 لوت كلاهما يحتاج +50 بالضبط للإغلاق.

الأنسب لـ

موصى به فقط لمتداولي XAUUSD الذين يريدون صراحةً سلّم مارتينغال باتجاه شراء واحد + تحوط بيع والذين يستطيعون استيعاب سلة مفتوحة ذات 4 أرجل بحجم 0.10 + 0.20 + 0.40 + 0.80 + 1.60 لوت بدون وقف خسارة لكل صفقة على شارت M5 أو H1. الحد الأدنى للرصيد الموصى به هو 1,000 دولار بسلم 0.10/0.20 الافتراضي (مضاعف اللوت 2x لكل مستوى، لذا فإن السقف أهم من لوت الدخول)؛ لجعل دورة الـ4 مستويات قابلة للحياة يجب أن يغطي الحساب comfortably القيمة الاسمية في أسوأ الأحوال لحوالي 3.10 لوت من هامش XAUUSD بالإضافة إلى مخزن +50 سلة. شغّله على حساب ECN سبريد منخفض — جني أرباح السلة هو +50 وحدة ثابتة بصرف النظر عن تكلفة السبريد، لذا فإن سبريد 30 نقطة يأكل جزءاً ذا معنى من scalp XAUUSD بـ0.10 لوت. M5 وH1 هما فاصلتا الوقت الوحيدتان اللتان تسميهما الترويسة؛ خطوة الاسترداد الافتراضية البالغة 100 نقطة معايرة لتذبذب الذهب على M5 وستتصرف بشكل مختلف تماماً على أزواج FX الكبرى دون إعادة ضبط. هذا الـEA غير مناسب للمتداولين الذين يحتاجون وقف خسارة، أو سقف خسارة يومي، أو فلتر جلسة، أو أي نوع من وقف منحنى الأسهم — لا يوجد أي منها في .mq5.

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

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

العائلة: TrendFollow الماجيك: 22218115 الإصدار: 2.00

الوصف: Opens an initial position then, when drawdown reaches a configurable step, adds hedging recovery levels at increasing lot sizes. Closes the whole basket at a profit target. Full 12-layer stack. 12 layers: REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester

المؤشرات:

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

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

  • BasketProfit()
  • CountOpen()
  • CloseAll()
  • TryClose_EX18115()
  • TryClosePartial_EX18115()
  • TryModify_EX18115()
الرمز الزائف (Pseudocode)
// Pipsgrowth EX18115 TrendFollow — Execution Flow (from source analysis)
// Family: TrendFollow
// Opens an initial position then, when drawdown reaches a configurable step, adds hedging recovery levels at increasing lot sizes. Closes the whole basket at a profit target. Full 12-layer stack. 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
الرموز المُحسّنة:
XAUUSD
الأطر الزمنية المُحسّنة:
M5H1

كيفية تثبيت الإكسبرت على 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_EX18115.mq5
#property copyright "Pipsgrowth.com"
#property link      "https://pipsgrowth.com"
#property version   "2.00"
#property strict
#property description "Pipsgrowth.com EX18115 HedgingMartingale — hedging + martingale recovery, full 12-layer stack."

#include <Trade\Trade.mqh>
input group "=== Identity ==="
input int    InpMagicNumber   = 22218115;
input string InpTradeComment  = "Psgrowth.com Expert_18115";

input group "=== Lots ==="
input double InpInitialLot    = 0.10;
input double InpHedgeLot      = 0.20;

input group "=== Recovery ==="
input bool   InpEnableMartingale = false;
input int    InpRecoveryStep  = 100;
input int    InpMaxLevels     = 4;

CTrade trade; int level=0; bool initialOpen=false;
int OnInit() { trade.SetExpertMagicNumber(InpMagicNumber); trade.SetDeviationInPoints(30); return INIT_SUCCEEDED; }
void OnDeinit(const int r) {}
void OnTick() {
   double basket=BasketProfit();
   int cnt=CountOpen();
   if(cnt>0 && basket>=50) { CloseAll(); level=0; initialOpen=false; return; }
   if(cnt==0 && !initialOpen) {
      double ask=SymbolInfoDouble(_Symbol,SYMBOL_ASK);
      trade.Buy(InpInitialLot,_Symbol,ask,0,0,InpTradeComment);
      initialOpen=true; return;
   }
   if(InpEnableMartingale && initialOpen && level<InpMaxLevels && cnt>0) {
      double bid=SymbolInfoDouble(_Symbol,SYMBOL_BID);
      if(-basket>=InpRecoveryStep*_Point*100*(level+1)) {
         double lot=NormalizeDouble(InpHedgeLot*MathPow(2,level),2);
         trade.Sell(lot,_Symbol,bid,0,0,InpTradeComment+" Lvl "+IntegerToString(level+1));
         level++;
      }
   }
}
double BasketProfit() { double p=0; for(int i=PositionsTotal()-1;i>=0;i--) { if(PositionGetTicket(i)>0&&PositionGetInteger(POSITION_MAGIC)==InpMagicNumber&&PositionGetString(POSITION_SYMBOL)==_Symbol) p+=PositionGetDouble(POSITION_PROFIT); } return p; }
int    CountOpen()    { int c=0; for(int i=PositionsTotal()-1;i>=0;i--) if(PositionGetTicket(i)>0&&PositionGetInteger(POSITION_MAGIC)==InpMagicNumber&&PositionGetString(POSITION_SYMBOL)==_Symbol) c++; return c; }
void   CloseAll()     { for(int i=PositionsTotal()-1;i>=0;i--) { ulong t=PositionGetTicket(i); if(t>0&&PositionGetInteger(POSITION_MAGIC)==InpMagicNumber&&PositionGetString(POSITION_SYMBOL)==_Symbol) TryClose_EX18115(t); } }
//+------------------------------------------------------------------+
bool TryClose_EX18115(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;
}

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

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

الوسوم:ex18115trendfollowpipsgrowthfreemt5xauusd

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

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

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

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

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

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

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

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