Pipsgrowth EX16043 Trend — إكسبرت أدفايزر متابعة اتجاه
إكسبرت أدفايزر MT5 مفتوح المصدر · XAUUSD · M5، H1
Pipsgrowth EX16043 Trend — Lock Profit trailing EA that manages open positions by progressively moving the stop-loss to lock in profit. Supports tr. إكسبرت أدفايزر MT5 مفتوح المصدر.
نظرة عامة
Pipsgrowth EX16043 Lock Profit أداة لإدارة المراكز، وليس خبيراً استراتيجياً. لا يفتح صفقات. وظيفته أضيق وأكثر تركيزاً من بقية ملفات عائلة EX16: في كل تيك يستعرض المراكز المفتوحة على الحساب، ويُرشِح فقط تلك الموسومة بالرقم السحري 22216043، ثم يرفع وقف الخسارة لكل واحدة منها تدريجياً ليقفل الأرباح المحققة. يدّعي ملف الترويسة أن هناك «12 طبقة» تشمل REGIME وSIGNAL وENTRY وCONFIRM وNO-TRADE وCAPITAL CAP وRISK وSIZING وMANAGE وEXIT وSCALING وOnTester، لكن عملياً الطبقة الوحيدة التي تعمل فعلاً هي MANAGE — محرك الوقف المتحرك — وأقرب شيء إلى بوابة NO-TRADE هو فلتر الرقم السحري الذي يحدد أي مراكز يقبل هذا الخبير لمسّها. لا توجد مقابض مؤشرات إطلاقاً، ولا توجد استدعاءات IndicatorCreate في OnInit، ولا توجد مصفوفات لمخازن مؤشرات MQL5، ولا يوجد OnTester. هذا الملف أداة تُرفق على الشارت، وليس نظاماً يقرر متى يدخل.
محرك الوقف المتحرك مبني حول أربعة مدخلات رقمية. InitialTriggerValue=20 هو عتبة الربح التي يجب تجاوزها قبل أن يفعل الخبير أي شيء. InitialSLValue=9 هي أول كمية ربح يقفلها فور تحقق الشرط. StepTriggerValue=20 هي كمية الربح الإضافية اللازمة للانتقال إلى المرحلة التالية، وStepSLIncrement=9 هي كمية الربح الإضافية التي تُقفل في تلك المرحلة. إذاً مع الإعدادات الافتراضية، في صفقة شراء ينتظر الخبير 20 وحدة ربح، ثم ينقل الوقف إلى سعر الدخول +9؛ عندما يصل الربح إلى 40 وحدة، ينتقل الوقف إلى سعر الدخول +18؛ عند 60 وحدة، إلى سعر الدخول +27؛ وهكذا، يصعد بـ9 وحدات كل 20 وحدة ربح إضافية. رقم المستوى outProfitLevel = 1 + floor((profit - 20) / 20) هو ما تعرضه اللوحة، ويسجّل الخبير أيضاً آخر مستوى لكل مركز في مصفوفة طويلة (lastTrailLevels) ليطلق PositionModify فقط عند ارتفاع المستوى فعلياً.
وحدات تلك الأرقام الأربعة تعتمد على TrailMode، وهو enum بثلاث قيم. TRAIL_BY_POINTS يعتبر الوحدة الواحدة SymbolInfoDouble(SYMBOL_POINT)، لذلك على وسيط ذهب من 5 خانات 20 نقطة تعادل 2.0 بيب. TRAIL_BY_PIPS يضرب في point*10 للحصول على العلاقة التقليدية 1 بيب = 10 نقاط، فـ20 بيب تعني 200 نقطة. TRAIL_BY_PROFIT_USD، وهو الافتراضي، يعتبر الأرقام دولارات من الربح العائم، ويحوّل الخبير مبالغ الدولارات إلى فرق سعري عبر حقول tickValue وcontractSize وtickSize الخاصة بالوسيط — نفس الرياضيات التي يستخدمها الوسيط لتسعير المرموز. هذا الوضع الأخير هو الوحيد الذي يعمل حقاً عبر الرموز المختلفة، لأن الخبير يقرأ tickValue وقت التعديل ويعيد حساب فرق السعر من الصفر في كل استدعاء.
CalculateNewSL هي الدالة التي تجري الحسابات. تسحب سعر الدخول والسعر الحالي وعدد اللوتات والربح العائم من PositionGetDouble، تستدعي ConvertPriceToValue لتطبيع الربح إلى وحدة الوضع، تقارنه مع InitialTriggerValue، وتُرجع 0 إذا لم تُتجاوز العتبة بعد. إن تجاوزت، تحسب المستوى، تضرب قيمة الربح المقفل في سلّم المستوى، وتستدعي ConvertToPriceOffset لتحويل ذلك إلى فرق سعري عن سعر الدخول. الفحص في السطر 412 يحترم SYMBOL_TRADE_STOPS_LEVEL — مسافة الوقف الدنيا لدى الوسيط — لكنه فقط يسجّل تحذيراً إذا كان الوقف المحسوب قريباً جداً، ولا يرفض الصفقة فعلياً؛ هذه المسؤولية تنفذ إلى عملية التحقق من الطلب لدى الوسيط وتنجح أو تُرجع رمز خطأ عبر TryModify_EX16043. الدالة تحتوي أيضاً على مشبكات MathMin/MathMax معطلة التعليق (السطور 402 و408) كانت ستفرض مستوى الوقف صراحة، لكنها معطلة في البناء الحالي.
اتجاه الوقف المتحرك أحادي الجانب. للشراء، يجب أن يكون الوقف الجديد أعلى من سعر الدخول وأعلى من الوقف الحالي (أو أن يكون الوقف الحالي صفراً، وهو ما يُعامل على أنه «لا يوجد وقف»). للبيع، يجب أن يكون الوقف أدنى من سعر الدخول وأدنى من الوقف الحالي. لا يوجد مسار في المصدر يُرخي الوقف — الاستدعاءات الوحيدة لـPositionModify التي تنطلق هي تحركات تقفل ربحاً أكثر. هذه الخاصية هي ما يجعل الخبير فعلاً أداة «قفل الربح» وليس مطارد وقف عام.
لوحة الشارت تبنيها BuildPanelText لكن، على الأقل في هذا البناء، لا تُعرض فعلياً. في OnTick السطر string currentPanelText = "HELLO LIVE CHART"; بدلاً من الاستدعاء الحقيقي BuildPanelText()، وOnTimer بدقيقة واحدة يطبع «HELLO LIVE CHART - Timer». منطق اللوحة الكامل موجود في المصدر — يسرد كل مركز مطابق بتيكته واتجاهه ولوتاته وربحه ووقفه الحالي والمستوى المقفل والمسافة للمرحلة التالية — لكن التوصيل غير مكتمل. إذا أردت رؤية اللوحة، ألغِ تعليق هذين السطرين. التسجيل حقيقي رغم ذلك: LogAction تكتب في حلقة مخزّن 20 عنصراً actionLog كان من المفترض أن تعرضه اللوحة، وتطبع في يوميات الطرفية إذا كان EnableDebugPrints صحيحاً (الافتراضي).
في أسفل الملف توجد ثلاث مساعدات إعادة المحاولة — TryClose_EX16043 وTryClosePartial_EX16043 وTryModify_EX16043 — تُغلِّف trade.PositionClose وtrade.PositionClosePartial وtrade.PositionModify في حلقة 3 محاولات تعيد المحاولة عند REQUOTE وTIMEOUT وPRICE_OFF وPRICE_CHANGED. فقط TryModify_EX16043 موصول فعلياً: ProcessTrailingSL يستدعيه في السطر 24 لدفع الوقف الجديد. مساعدتا الإغلاق كود ميت غير مستخدم. ErrorDescription هي switch بـ35 مدخلاً تربط رموز أخطاء التداول في MQL5 بسلاسل مقروءة بشرياً، وهي أيضاً غير مستخدمة حالياً في المسار الحي.
الترويسة تذكر أن الخبير «محمول» عبر أزواج العملات الرئيسية والذهب/المعادن، مع إطار زمني مقترح M5 (يعمل أيضاً على H1). هذا دقيق بالنظر إلى التصميم — لا شيء خاص بالرمز أو الإطار الزمني في المنطق — لكن لأن الخائر لا يقيّد بالجلسة ولا بيوم الأسبوع، يجب تشغيله على نفس الشارت الذي فُتحت عليه الصفقة الأصلية، أو على شارت يرى مراكز نفس الحساب. الحد الأدنى للرصيد في قاعدة البيانات هو 100 دولار، وهو واقعي لأداة: هذا الخبير لا يخصص هامشاً، فقط يعدّل الوقفيات، فبصمته الرأسمالية هي ما يقرره خبير الفتح.
ما يمكن توقّعه في الباك تيست: مُختبر الاستراتيجيات سيحمّل هذا الملف، OnInit سينجح، لكن OnTester ولا مسارات تنفيذ الصفقات ستنتج نشاطاً tester شبه معدوم — لا توجد دخول، ولا خروج من هذا الخبير، ومنطق الوقف المتحرك يطلق فقط على المراكز الموجودة في الحساب. في الاستخدام الحي أو التجريبي، القيمة حقيقية: ضع هذا الخبير على شارت فيه بالفعل صفقات مفتوحة بالرقم السحري 22216043 (أو غيّر InpMagicNumber ليطابق الرقم السحري لاستراتيجيتك)، اضبط المقابض الأربعة على المقياس المفضل لديك، وسيمشي وقف كل صفقة نحو الربح حسب السلّم.
تفاصيل الاستراتيجية
في كل تيك، يستدعي OnTick العملية ProcessTrailingSL التي تمر على PositionsTotal() وتختار فقط المراكز التي POSITION_MAGIC فيها == 22216043، وتعيد تحجيم مصفوفة lastTrailLevels الطويلة عند الحاجة. لكل مطابقة تسحب سعر الدخول والسعر الحالي واللوتات والربح العائم من PositionGetDouble، ثم تستدعي CalculateNewSL التي إما تُرجع 0 (الربح دون العتبة) أو تُرجع سعر الدخول ± فرق سعري مستمد من (9 + (level-1)9) وحدة ربح محوّلة عبر ConvertToPriceOffset — point10 للبيب، point للنقطة، أو رياضيات tickValuecontractSize/tickSize للدولار. لا يُرسل الوقف الجديد إلا إذا جلس أعمق في اتجاه الربح من الوقف الحالي؛ الدالة تحترم SYMBOL_TRADE_STOPS_LEVEL بتسجيل تحذير بدلاً من الرفض. LogAction تدفع كل حدث في مخزن حلقي بسعة 20 مدخلاً وفي يوميات الطرفية (إذا كان EnableDebugPrints مفعّلاً)، وOnTick من المفترض أن يحدّث لوحة شارت تبنيها BuildPanelText — رغم أن الكود الحي يستبدلها حالياً بسلسلة عنصر نائب. ثلاث مساعدات Try تُغلِّف PositionClose وPositionClosePartial وPositionModify بـ3 محاولات عند REQUOTE/TIMEOUT/PRICE_OFF/PRICE_CHANGED، منها فقط TryModify_EX16043 موصّل في المسار الحي.
هذا الخبير لا يولّد إشارات دخول. هو أداة لإدارة المراكز تمشي PositionsTotal() في كل تيك، وتُرشِح فقط الصفقات التي POSITION_MAGIC فيها يساوي InpMagicNumber القابل للضبط (الافتراضي 22216043)، وتعدّل وقف الخسارة لكل مطابقة. لاستخدامه، أرفقه على شارت يستضيف بالفعل مراكز فُتحت بواسطة خبير استراتيجي آخر، أو متداول يدوي، أو ناسخ، كلها موسومة بهذا الرقم السحري.
ProcessTrailingSL تعمل في كل تيك ولا تُحكم الوقف إلا في اتجاه واحد. تحسب outProfitLevel = 1 + floor((normalizedProfit - InitialTriggerValue) / StepTriggerValue) وترسل الوقف الجديد عبر TryModify_EX16043، تاركة جني الأرباح في المركز كما هو. تُرجع الدالة 0 — ولا ينطلق أي تعديل — إذا كان ربح المركز لم يتجاوز InitialTriggerValue بعد، لذلك يبقى وقف الخسارة الأصلي (أو صفر) في مكانه حتى ذلك الحين.
لا يوجد مدخل لوقف خسارة ثابت لكل صفقة — هذا الخبير يفترض أن نظاماً آخر وضع الوقف الأصلي أو تركه صفراً. وظيفته استبدال ذلك الوقف بمستوى «مُقفل» عند سعر الدخول ± (InitialSLValue + (level-1) * StepSLIncrement) وحدة (افتراضياً 9 + (level-1)*9) بمجرد أن يتجاوز الربح InitialTriggerValue=20. لا يُنقل الوقف الجديد إلا في الاتجاه المربح؛ إذا لم تكن القيمة المحسوبة أفضل صراحة من الوقف الحالي، لا يُرسل أي تعديل.
الخبير لا يلمس جني الأرباح. عند استدعاء PositionModify، يقرأ PositionGetDouble(POSITION_TP) ويمرر جني الأرباح القائم كما هو دون تغيير. هدف الربح من الصفقة الأصلية — الذي وضعه أي خبير أو متداول فتح الأمر — يبقى جني الأرباح الوحيد الذي يحترمه هذا الكود.
الحد الأدنى للرصيد الموصى به: 100 دولار على أي حساب ECN أو قياسي، لأن هذا الخبير يعدّل الوقفيات فقط ولا يخصّص هامشاً. يُنشر بأفضل شكل كخبير مصاحب على XAUUSD M5 (أو H1) أو EURUSD أو GBPUSD أو أي رمز ذهب/معادن مذكور كمحمول في ترويسة المصدر، مُرفقاً على نفس الشارت الذي يعمل عليه خبير الفتح. محرك الوقف المتحرك لا يحتوي فلتر جلسة أو يوم أسبوع، فدعه يعمل 24/5 وبوابة الرقم السحري (22216043) تضمن أنه يلمس فقط المراكز التي تقصدها. هذه أداة وقف خسارة، وليست نظاماً جاهزاً — اقرنها بخبير استراتيجي منفصل أو دخول يدوي موسوم بنفس الرقم السحري.
منطق الاستراتيجية
Pipsgrowth EX16043 Trend — تحليل منطق الاستراتيجية (من كود .mq5)
العائلة: Trend
الماجيك: 22216043
الإصدار: 2.00
الوصف:
Lock Profit trailing EA that manages open positions by progressively moving the stop-loss to lock in profit. Supports trailing by points, pips, or USD, with configurable trigger and step increments and a chart info panel. 12 layers: REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester
المؤشرات:
- مؤشرات قياسية
الدوال الرئيسية:
OnTimer()ProcessTrailingSL()BuildPanelText()DrawPanel()DeletePanel()CalculateNewSL()ConvertToPriceOffset()ConvertPriceToValue()LogAction()GetTrailModeString()
// Pipsgrowth EX16043 Trend — Execution Flow (from source analysis)
// Family: Trend
// Lock Profit trailing EA that manages open positions by progressively moving the stop-loss to lock in profit. Supports trailing by points, pips, or USD, with configurable trigger and step increments and a chart info panel. 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)ملف التحسين
كيفية تثبيت الإكسبرت على MT5
- 1حمّل ملف .mq5 بالضغط على زر التحميل أعلاه
- 2افتح برنامج MetaTrader 5 على حاسوبك
- 3من القائمة العلوية اختر File → Open Data Folder
- 4انتقل إلى مجلد MQL5 → Experts والصق الملف هناك
- 5في MT5، انقر بالزر الأيمن على Expert Advisors في لوحة Navigator → Refresh
- 6اسحب الإكسبرت على رسم H4 أو اليومي للحصول على أفضل النتائج
- 7حدد فترات EMA وعتبة ADX وحجم اللوت في نافذة الإعدادات
- 8فعّل Allow Algo Trading واضغط OK
معاملات الإكسبرت
| المعامل | الافتراضي | الوصف |
|---|---|---|
| InitialTriggerValue | 20 | Initial profit to activate trailing (Points/Pips/USD) |
| InitialSLValue | 9 | First locked profit amount (Points/Pips/USD) |
| StepTriggerValue | 20 | Additional profit needed for next SL move |
| StepSLIncrement | 9 | How much to move SL at each step |
| EnableDebugPrints | true | Print debug messages to journal |
| EnablePanelDisplay | true | Show info panel on chart |
| PanelTextColor | clrWhite | Panel text color |
| InpMagicNumber | 22216043 | Magic Number (positions to manage) |
| InpTradeComment | "Psgrowth.com Expert_16043" | Trade Comment |
#property copyright "Pipsgrowth.com"
#property link "https://pipsgrowth.com"
#property version "2.00"
#property strict
#property description "Pipsgrowth.com EX16043 Lock_Profit — Lock profit trailing EA, full 12-layer stack."
#include <Trade/Trade.mqh>
#define MAX_LOG_ENTRIES 20 // MOVED TO GLOBAL SCOPE
//--- Inputs
enum ENUM_SL_TRAIL_MODE
{
TRAIL_BY_POINTS = 0,
TRAIL_BY_PIPS,
TRAIL_BY_PROFIT_USD
};
input group "=== Trailing Settings ==="
input ENUM_SL_TRAIL_MODE TrailMode = TRAIL_BY_PROFIT_USD;
input double InitialTriggerValue = 20; // Initial profit to activate trailing (Points/Pips/USD)
input double InitialSLValue = 9; // First locked profit amount (Points/Pips/USD)
input double StepTriggerValue = 20; // Additional profit needed for next SL move
input double StepSLIncrement = 9; // How much to move SL at each step
input group "=== Display ==="
input bool EnableDebugPrints = true; // Print debug messages to journal
input bool EnablePanelDisplay = true; // Show info panel on chart
input color PanelTextColor = clrWhite; // Panel text color
input group "=== Identity ==="
input ulong InpMagicNumber = 22216043; // Magic Number (positions to manage)
input string InpTradeComment = "Psgrowth.com Expert_16043"; // Trade Comment
//--- Global
CTrade trade;
#define PANEL_OBJ_NAME "LockProfitPanel_EA" // Added _EA to make it more unique
string lastPanelText = ""; // Stores the last text drawn to optimize panel updates
long lastTrailLevels[]; // Dynamically sized array for ticket-indexed profit levels
string actionLog[MAX_LOG_ENTRIES]; // MOVED DECLARATION HERE AFTER MAX_LOG_ENTRIES IS DEFINED
int logIndex = 0; // MOVED DECLARATION HERE
//+------------------------------------------------------------------+
//| Expert initialization function |
//+------------------------------------------------------------------+
int OnInit()
{
// Initialize trade object (optional, defaults are usually fine)
trade.SetExpertMagicNumber((long)InpMagicNumber); // identify this EA when modifying positions
// trade.SetDeviationInPoints(10);
ArrayResize(lastTrailLevels, 0); // Start with an empty array
DeletePanel(); // Clean up any old panel objects
LogAction("[INFO] Lock Profit EA initialized - Mode: " + GetTrailModeString(TrailMode));
return(INIT_SUCCEEDED);
}
//+------------------------------------------------------------------+
//| Expert deinitialization function |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
DeletePanel();
LogAction("[INFO] Lock Profit EA stopped. Reason: " + IntegerToString(reason));الكود المصدري الكامل متاح عند التحميل
لأغراض تعليمية فقط. لا تستخدمه بأموال حقيقية. اختبر على حساب تجريبي فقط.
تحذير صريح: لأغراض تعليمية فقط
تحذير صريح: هذا الإكسبرت لأغراض تعليمية واختبارية فقط. لا تستخدمه بأموال حقيقية. اختبره فقط على حساب تجريبي. التداول بأموال حقيقية ينطوي على مخاطر فقدان رأس المال. لا يشكل هذا نصيحة استثمارية.
وسطاء موصى بهم لهذا الإكسبرت
هذه الروبوتات تعمل على MT5 — استخدم وسيطاً موثوقاً بتنفيذ سريع وسبريد منخفض
إكسبرتات مشابهة
عرض جميع الإكسبرتاتإكسبرتات أخرى بنفس استراتيجية متابعة الاتجاه
Pipsgrowth EX16080 Trend — إكسبرت أدفايزر متابعة اتجاه
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 مفتوح المصدر.
Pipsgrowth EX16081 Trend — إكسبرت أدفايزر متابعة اتجاه
Pipsgrowth EX16081 Trend — Gold trend EA catching major XAUUSD trends using EMA 50/ 200 crossover on H4 with daily structure swing high/low and Fib. إكسبرت أدفايزر MT5 مفتوح المصدر.
Pipsgrowth EX16033 Trend — إكسبرت أدفايزر متابعة اتجاه
Pipsgrowth EX16033 Trend — Price-action scalping EA using distance-based grid entries with net-take-profit targeting and optional lot multiplier. 1. إكسبرت أدفايزر MT5 مفتوح المصدر.
مجتمع المستخدمين
لأغراض تعليمية فقط. لا تستخدمه بأموال حقيقية. اختبر على حساب تجريبي فقط.