P
PipsGrowth
OtherOpen Source – Free

Pipsgrowth EX15016 SMC-OrderBlock

MT5 Expert Advisor (Open Source) · XAUUSD · M5

Pipsgrowth.com EX15016 XAUUSD Liquidity Trap EA v3.5.1 — liquidity-zone scalper with dynamic profit management, full 12-layer stack.

Overview

EX15016 is an XAUUSD scalper built around one design decision: instead of holding positions to a fixed take-profit and hoping, the EA actively ratchets the stop-loss upward as a trade moves into profit, using a dynamic profit-lock system that becomes more aggressive the further price travels in your favor. The version-numbered file ships as v3.5.1, but the source contains three different version strings — #property version 2.00, the description line that says v3.5.1, the OnInit print that says v3.5.1, and the dashboard title that says v3.0 — so treat the build as v3.5.1 (the most recent of the labels) and ignore the dashboard string.

The trading idea starts with swing liquidity zones. On every new bar the EA scans the last Max(20, SwingBarCount*2+5) bars for 3-bar fractals — FindSwingHigh walks the high array and returns the first index where high[i] > high[i-1] AND high[i] > high[i+1] for SwingBarCount=1 bar on each side; FindSwingLow does the mirror. Every fresh swing high becomes an upper liquidity zone, every fresh swing low becomes a lower zone, each one drawn on the chart as a clrCrimson or clrDodgerBlue OBJ_HLINE with STYLE_DASH and a tooltip. The AddLiquidityZone helper de-duplicates new candidates against existing zones at a 0.3% price tolerance, so the chart accumulates a sparse map of recent swing pivots rather than a wall of overlapping lines. Zones auto-deactivate after MaxZoneAge=24 hours, and CleanupInactiveZones runs every four hours to compact the arrays.

Once a zone is on the chart, the entry check is a 5-condition AND gate. For buys, the EA looks at every active lower zone and asks whether the current Ask is inside that zone's 1% band — zoneLower <= currentPrice <= zoneLower * 1.01. If price is in the band, five conditions are evaluated: (1) CheckPriceSurge returns true when the MathMax of the open-to-current percentage over the last 10 bars AND the 5-bar high-low range percentage exceeds PriceSurgePercent*100 = 0.1%; (2) IsVolumeSurge returns true when current tick volume is at least VolumeSurgeMultiplier=1.5x the 20-bar average — but the function short-circuits to true because RequireVolumeSurge=false by default, so volume is currently a dormant gate; (3) IsZoneConfirmedByHigherTimeframe calls DetermineTrend(ConfirmationTimeframe) to read the MA(20) vs MA(50) cross on H4 by default — but this also short-circuits to true because UseHigherTimeframeConfirmation=false, so the higher-timeframe filter is dormant; (4) the price-surge condition is the only always-on filter beyond zone containment; (5) IsBullishEngulfingPattern walks back EngulfingLookback=3 bars looking for a current bullish candle whose body completely engulfs a prior bearish body's range — currentOpen <= previousClose AND currentClose >= previousOpen — and is on by default. The mirror sell path checks upper zones with the inverted band [zoneUpper*0.99, zoneUpper] and a bearish engulfing. In practice the EA is running as a price-surge + engulfing + zone-proximity strategy with two dormant confirmation toggles available if you want to tighten it.

The stop-loss and take-profit geometry is fixed by the zone, not by the indicator state. For a buy, the SL is zoneLower * 0.995 — half a percent below the lower band — and the TP is computed as a clean 1:2 reward-to-risk: takeProfit = currentPrice + (currentPrice - stopLoss) * RewardToRiskRatio. With RewardToRiskRatio=2.0 default, a 1% zone SL gives a 2% target. Sells mirror the geometry on the upper zone. Lot sizing is the simplest part of the system: CalculatePositionSize ignores the stop-loss-points argument entirely and returns FixedLotSize=0.01 after NormalizeLotSize clamps it to the broker's min/max and lot-step. This is a fixed-lot EA — not a risk-percent one — so position sizing scales only by changing the input, not by equity.

The dynamic profit-lock system is the reason this EA exists as a separate file from the rest of the EX15 family. On every tick ManageOpenPositions walks every open position with this EA's magic and calls ApplyDynamicProfitLock(ticket). The function first reads the entry price, current SL/TP, and current Bid (for buys) or Ask (for sells), then calculates profitPoints = (currentPrice - entryPrice) / point. It then derives currentLockLevel = floor(profitPoints / LockProfitEvery_X_Points), which is floor(profitPoints / 30) with the default. Whenever the detected level exceeds the stored lockLevelCount[posIndex], the EA computes a new stop-loss that locks in profit: newSL = entryPrice + (currentLockLevel * 30 - buffer) * point for buys (mirror for sells). The buffer is LockMinusBuffer=15 points by default, but if EnableProgressiveBuffer=true, CalculateProgressiveBuffer multiplies the buffer by ProgressiveBufferRatio=0.8 once per lock level — so level 1 sees a 15-point buffer, level 2 sees 12, level 3 sees ~9.6, level 4 sees ~7.7, and so on, with a hard floor of 1 point. The ratchet is one-directional: a buy only updates SL when newSL > currentSL (or current SL is 0); a sell only updates when newSL < currentSL. If the new SL is too close to the current price relative to the broker's SYMBOL_TRADE_STOPS_LEVEL, the modify is skipped. The actual PositionModify call goes through a fresh local CTrade tradeMod with SetDeviationInPoints(10) — it does not go through the main Trade object and does not use the TryModify_EX15016 retry helper. Every successful lock event increments totalLockEvents and adds the locked points to totalProfitLocked; both numbers are reported in the OnDeinit print.

The partial-close path is a separate, opt-in layer wired into the same lock-step. When EnablePartialClose=true and the position has not yet had a partial close, the EA computes partialCloseDone[posIndex] = true and tries to close PartialClosePercent=50% of the position via a fresh CTrade tradePartial with the same magic and 10-point deviation. With the default config the partial close is disabled and never fires; turning it on lets the EA book half the position at the first lock level and then continue managing the remainder with the ratchet. The standard trailing stop is a third, parallel management path: when EnableTrailingStop=true the ApplyTrailingStop function fires from ManageOpenPositions and uses the TryModify_EX15016 retry helper (3 attempts, progressive 100ms/200ms/300ms backoff on REQUOTE/TIMEOUT/PRICE_CHANGED) to move the SL to entryPrice + profitPoints * TrailingStopPercent/100 — by default 50% of the unlocked profit. This is a separate code path from the dynamic lock: if you enable the trailing stop and the dynamic lock at the same time, both will try to push the SL, and whichever fires last with a higher SL wins.

Risk controls are short. A per-tick spread filter rejects any tick where SymbolInfo.Spread() * point > MaxSpreadPoints * point (3 pips default). On every close, UpdateTradeStatistics increments consecutiveLosses on a loss and resets it to zero on a win; once consecutiveLosses >= MaxConsecutiveLosses=3, pauseUntilTime = TimeCurrent() + PauseMinutes * 60 blocks all new entries for an hour. MaxPositions=5 caps concurrent exposure. EnableTimeFilter=false by default — set to true to gate entries between TradingHoursStart='08:00' and TradingHoursEnd='20:00' broker time. The two inputs AvoidHighImpactNews=true and the news-buffer minutes are decorative: there is no IsHighImpactNewsTime function in the source, no news feed integration, and the filter is functionally dormant.

Code-quality notes worth knowing about: the MapTimeframeInt helper is declared six separate times in the source (lines 35, 58, 82, 106, 133, 163), each with the same switch on tf 1-7 — the duplicate declarations compile because of how MQL5 handles identical signatures, but they are dead-weight clutter. The header advertises a 12-layer architecture (REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester) but the source actually only implements roughly seven of those layers — there is no formal regime classifier, no capital-cap engine, and no OnTester fitness function. The UpdateLiquidityZones call is gated to new bars; the position-management call runs every tick. The dashboard is a 7-line label panel (title / status / lot+RR / zone counts / trade stats / profit factor / current signal) with a separate UpdateProfitLockDashboard section that shows locked levels per ticket — ShowProfitDashboard=true by default.

For backtests expect: 1-4 trades per session depending on how often price tags the recent swing zones, a 1:2 reward-to-risk on the static TP leg, and a ratcheting SL on the dynamic leg that turns roughly half of all trades into breakeven-or-better exits. The fixed 0.01 lot keeps the dollar risk identical regardless of stop distance — if you want the EA to scale position size to account, multiply FixedLotSize manually when changing symbols. This EA is for traders who specifically want a level-ratcheting profit-lock on a swing-zone reversal framework and are willing to accept the two dormant confirmation gates as configured.

Strategy Deep Dive

Every new bar the EA scans price with FindSwingHigh / FindSwingLow (3-bar fractals, SwingBarCount=1) and registers each fresh swing pivot as a liquidity zone drawn on the chart as a clrCrimson / clrDodgerBlue OBJ_HLINE with STYLE_DASH. AddLiquidityZone de-duplicates at a 0.3% tolerance; zones auto-deactivate after MaxZoneAge=24h and CleanupInactiveZones compacts the arrays every 4h. CheckBuySignals walks active lower zones and asks if Ask sits in the 1% band [zoneLower, zoneLower*1.01] — when it does, the EA evaluates a price surge (MathMax of 10-bar open-to-current move and 5-bar high-low range, threshold 0.1%) plus a bullish engulfing within 3 bars; sells mirror on upper zones with the inverted band and bearish engulfing. SL sits 0.5% past the zone, TP runs 1:2 RR, and CalculatePositionSize returns the fixed 0.01 lot regardless of stop distance. ApplyDynamicProfitLock fires on every tick, derives currentLockLevel = floor(profitPoints / 30), and whenever the detected level exceeds the stored count it ratchets SL with a progressive buffer (15 points at level 1, then multiplied by 0.8 per level down to a 1-point floor). The modify goes through a local CTrade tradeMod with 10-point deviation; the function only moves the SL in the trade-favorable direction. ManageOpenPositions also calls ApplyTrailingStop when EnableTrailingStop=true (uses TryModify_EX15016 retry helper) and increments consecutiveLosses on every losing close — three in a row triggers a 60-minute pause via pauseUntilTime.

Entry Signal

Triggers a long when price enters a 1% band above a lower liquidity zone (3-bar fractal swing low) AND a price surge exceeds 0.1% (MathMax of 10-bar open-to-current move and 5-bar high-low range) AND a bullish engulfing pattern appears within the last 3 bars. Sells mirror on upper zones. Two confirmation gates (volume surge, higher-timeframe MA-trend) are dormant by default.

Exit Signal

Static 1:2 RR take-profit is the primary exit. The ApplyDynamicProfitLock function also ratchets the stop-loss in 30-point steps (3 pips) on every tick as profit grows, using a progressive buffer that shrinks 20% per lock level from 15 points to a 1-point floor. An optional 50% partial close fires at the first lock level when EnablePartialClose=true.

Stop Loss

Static initial SL sits 0.5% past the active liquidity zone (zoneLower0.995 for buys, zoneUpper1.005 for sells). Once price moves 30+ points in profit, the EA ratchets the SL toward entry in 30-point steps with a 15-point buffer that shrinks per level. There is no portfolio-level drawdown cap; the only global safety is the 60-minute pause after 3 consecutive losses.

Take Profit

Fixed 1:2 reward-to-risk target computed from the entry price minus the zone-anchored SL: takeProfit = currentPrice + (currentPrice - stopLoss) * RewardToRiskRatio. With the default 0.5% zone SL and RewardToRiskRatio=2.0, this produces a 2% static target. The TP is placed at the broker; the dynamic lock can also close trades earlier by ratcheting the SL to a level that gets tagged.

Best For

Minimum recommended balance: $100 at the default 0.01 fixed lot. Pair: XAUUSD on the trading timeframe set by the Timeframe input (default integer 4 maps to M30; database tags M5 — confirm the input matches the chart before going live). Broker: ECN / RAW-spread with sub-3-pip spreads — the 30-point spread filter plus the 0.5%-past-zone SL gives tight entries that get eaten by wide spreads. Session: London and New York overlap, when XAUUSD regularly sweeps the prior session's swing pivots and the engulfing pattern has volume. Best for traders who want a level-ratcheting profit-lock on a swing-zone reversal and are willing to manage the dormant volume/HTF toggles manually.

Strategy Logic

Pipsgrowth EX15016 SMC-OrderBlock — Strategy Logic Analysis (from .mq5 source)

Family: SMC-OrderBlock Magic: 22215016 Version: 2.00

BRIEF: Liquidity-trap scalper with enhanced dynamic profit management — detects swing liquidity zones, price surges and volume spikes, enters on engulfing confirmation with dynamic profit-locking, progressive buffers and partial close. 12 layers: REGIME, SIGNAL, ENTRY, CONFIRM, NO-TRADE, CAPITAL CAP, RISK, SIZING, MANAGE, EXIT, SCALING, OnTester

INDICATOR STACK:

  • Standard MT5 indicators

KEY FUNCTIONS:

  • LogMessage()
  • LogDynamicProfitMessage()
  • GetPositionIndex()
  • RemovePositionFromProfitLock()
  • ApplyDynamicProfitLock()
  • ApplyTrailingStop()
  • InitializeProfitLockArrays()
  • ErrorDescription()
  • ExecutePartialClose()
  • CalculateProgressiveBuffer()
  • UpdateProfitLockDashboard()
  • CalculateProfitLockMetrics()
  • ...and 32 more

INTERNAL CONSTANTS (0 total):

INPUT PARAMETERS (39 total across 6 groups):

  • [=== General Settings ===] MagicNumber = 22215016 // Magic Number
  • [=== General Settings ===] InpTradeComment = "Psgrowth.com Expert_15016" // Trade Comment
  • [=== General Settings ===] EnableDebug = true // Enable Debug Messages
  • [=== General Settings ===] Timeframe = 4 // Timeframe (1=M1,2=M5,3=M15,4=M30,5=H1,6=H4,7=D1) // Trading Timeframe
  • [=== Liquidity Trap Settings ===] SwingBarCount = 1 // Number of bars for swing detection (smaller value = more swings)
  • [=== Liquidity Trap Settings ===] MaxZoneAge = 24 // Maximum zone age in hours
  • [=== Liquidity Trap Settings ===] PriceSurgePercent = 0.001 // Percent of price movement to consider as surge (0.001-0.2 recommended)
  • [=== Liquidity Trap Settings ===] RequireVolumeSurge = false // Require volume surge with price movement
  • [=== Liquidity Trap Settings ===] VolumeSurgeMultiplier = 1.5 // Volume threshold as multiplier of average
  • [=== Entry Confirmation ===] UseHigherTimeframeConfirmation = false // Use higher g_Timeframe for trend confirmation
  • [=== Entry Confirmation ===] ConfirmationTimeframe = 6 // Timeframe (1=M1,2=M5,3=M15,4=M30,5=H1,6=H4,7=D1) // Higher timeframe for confirmation
  • [=== Entry Confirmation ===] RequireVolumeConfirmation = false // Require volume confirmation for entry
  • [=== Entry Confirmation ===] UseEngulfingPattern = true // Use engulfing pattern as confirmation
  • [=== Entry Confirmation ===] EngulfingLookback = 3 // Number of bars to look back for engulfing pattern
  • [=== Risk Management ===] FixedLotSize = 0.01 // Fixed lot size for all trades
  • [=== Risk Management ===] RewardToRiskRatio = 2.0 // Reward to risk ratio
  • [=== Risk Management ===] EnableTrailingStop = false // Enable trailing stop
  • [=== Risk Management ===] TrailingStopPercent = 50.0 // Trailing stop as percentage of profit
  • [=== Risk Management ===] MaxSpreadPoints = 30 // Maximum spread in points
  • [=== Risk Management ===] MaxConsecutiveLosses = 3 // Max consecutive losses before pausing
  • [=== Risk Management ===] PauseMinutes = 60 // Minutes to pause after max losses
  • [=== Risk Management ===] MaxPositions = 5 // Maximum open positions
  • [=== Dynamic Profit Management ===] EnableDynamicLockProfit = true // Lock profit dynamically
  • [=== Dynamic Profit Management ===] LockProfitEvery_X_Points = 30.0 // Lock profit every X points
  • [=== Dynamic Profit Management ===] LockMinusBuffer = 15.0 // Buffer below locked level (points)
  • [=== Dynamic Profit Management ===] EnableProgressiveBuffer = true // Decrease buffer as profit increases
  • [=== Dynamic Profit Management ===] ProgressiveBufferRatio = 0.8 // Buffer reduction ratio per level (0.5-0.9)
  • [=== Dynamic Profit Management ===] EnablePartialClose = false // Enable partial position closing
  • [=== Dynamic Profit Management ===] PartialClosePercent = 50.0 // Percentage to close at first profit level (%)
  • [=== Dynamic Profit Management ===] PartialCloseLevels = 1 // Number of levels at which to close partially
  • [=== Dynamic Profit Management ===] EnableDynamicProfitManagementDebug = false // Debug for dynamic profit management
  • [=== Dynamic Profit Management ===] ForceDynamicProfitDebug = true // Force debug output for profit locks (regardless of debug setting)
  • [=== Dynamic Profit Management ===] ShowProfitDashboard = true // Show profit lock details on dashboard
  • [=== Trade Filters ===] EnableTimeFilter = false // Enable trading hours filter
  • [=== Trade Filters ===] TradingHoursStart = "08:00" // Trading hours start (broker time)
  • [=== Trade Filters ===] TradingHoursEnd = "20:00" // Trading hours end (broker time)
  • [=== Trade Filters ===] AvoidHighImpactNews = true // Avoid trading during high impact news
  • [=== Trade Filters ===] NewsBufferMinutesBefore = 30 // Minutes to avoid trading before news
  • [=== Trade Filters ===] NewsBufferMinutesAfter = 30 // Minutes to avoid trading after news
Pseudocode
// Pipsgrowth EX15016 SMC-OrderBlock — Execution Flow (from source analysis)
// Family: SMC-OrderBlock
// Liquidity-trap scalper with enhanced dynamic profit management — detects swing liquidity zones, price surges and volume spikes, enters on engulfing confirmation with dynamic profit-locking, progressive buffers and partial close. 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)

Optimization Profile

Optimized Brokers:
ExnessIC Markets
Optimized Symbols:
XAUUSD
Optimized Timeframes:
M5

How to Install This EA on MT5

  1. 1Download the .mq5 file using the button above
  2. 2Open MetaTrader 5 on your computer
  3. 3Click File → Open Data Folder in the top menu
  4. 4Navigate to MQL5 → Experts and paste the .mq5 file there
  5. 5In MT5, right-click Expert Advisors in the Navigator panel → Refresh
  6. 6Drag the EA onto a chart matching the recommended timeframe
  7. 7Configure parameters according to the table on this page
  8. 8Enable Allow Algo Trading and click OK

EA Parameters

ParameterDefaultDescription
MagicNumber22215016Magic Number
InpTradeComment"Psgrowth.com Expert_15016"Trade Comment
EnableDebugtrueEnable Debug Messages
Timeframe4Timeframe (1=M1,2=M5,3=M15,4=M30,5=H1,6=H4,7=D1) // Trading Timeframe
SwingBarCount1Number of bars for swing detection (smaller value = more swings)
MaxZoneAge24Maximum zone age in hours
PriceSurgePercent0.001Percent of price movement to consider as surge (0.001-0.2 recommended)
RequireVolumeSurgefalseRequire volume surge with price movement
VolumeSurgeMultiplier1.5Volume threshold as multiplier of average
UseHigherTimeframeConfirmationfalseUse higher g_Timeframe for trend confirmation
ConfirmationTimeframe6Timeframe (1=M1,2=M5,3=M15,4=M30,5=H1,6=H4,7=D1) // Higher timeframe for confirmation
RequireVolumeConfirmationfalseRequire volume confirmation for entry
UseEngulfingPatterntrueUse engulfing pattern as confirmation
EngulfingLookback3Number of bars to look back for engulfing pattern
FixedLotSize0.01Fixed lot size for all trades
RewardToRiskRatio2.0Reward to risk ratio
EnableTrailingStopfalseEnable trailing stop
TrailingStopPercent50.0Trailing stop as percentage of profit
MaxSpreadPoints30Maximum spread in points
MaxConsecutiveLosses3Max consecutive losses before pausing
PauseMinutes60Minutes to pause after max losses
MaxPositions5Maximum open positions
EnableDynamicLockProfittrueLock profit dynamically
LockProfitEvery_X_Points30.0Lock profit every X points
LockMinusBuffer15.0Buffer below locked level (points)
EnableProgressiveBuffertrueDecrease buffer as profit increases
ProgressiveBufferRatio0.8Buffer reduction ratio per level (0.5-0.9)
EnablePartialClosefalseEnable partial position closing
PartialClosePercent50.0Percentage to close at first profit level (%)
PartialCloseLevels1Number of levels at which to close partially
EnableDynamicProfitManagementDebugfalseDebug for dynamic profit management
ForceDynamicProfitDebugtrueForce debug output for profit locks (regardless of debug setting)
ShowProfitDashboardtrueShow profit lock details on dashboard
EnableTimeFilterfalseEnable trading hours filter
TradingHoursStart"08:00"Trading hours start (broker time)
TradingHoursEnd"20:00"Trading hours end (broker time)
AvoidHighImpactNewstrueAvoid trading during high impact news
NewsBufferMinutesBefore30Minutes to avoid trading before news
NewsBufferMinutesAfter30Minutes to avoid trading after news
Source Code (.mq5)Open Source
Pipsgrowth_com_EX15016.mq5
#property copyright "Pipsgrowth.com"
#property link      "https://pipsgrowth.com"
#property version   "2.00"
#property strict
#property description "Pipsgrowth.com EX15016 XAUUSD Liquidity Trap EA v3.5.1 — liquidity-zone scalper with dynamic profit management, full 12-layer stack."

#include <Trade/Trade.mqh>
#include <Trade/SymbolInfo.mqh>

// Input parameters: General Settings
ENUM_TIMEFRAMES MapTimeframeInt(int tf)
{
   switch(tf)
   {
      case 1: return PERIOD_M1;
      case 2: return PERIOD_M5;
      case 3: return PERIOD_M15;
      case 4: return PERIOD_M30;
      case 5: return PERIOD_H1;
      case 6: return PERIOD_H4;
      case 7: return PERIOD_D1;
      default: return PERIOD_H1;
   }
}
ENUM_TIMEFRAMES g_Timeframe = PERIOD_H1;
ENUM_TIMEFRAMES g_ConfirmationTimeframe = PERIOD_H1;
input group "=== General Settings ==="
input int    MagicNumber = 22215016;           // Magic Number
input string InpTradeComment = "Psgrowth.com Expert_15016"; // Trade Comment
input bool   EnableDebug = true;               // Enable Debug Messages
input int Timeframe = 4; // Timeframe (1=M1,2=M5,3=M15,4=M30,5=H1,6=H4,7=D1)   // Trading Timeframe

// Input parameters: Liquidity Trap Settings
ENUM_TIMEFRAMES MapTimeframeInt(int tf)
{
   switch(tf)
   {
      case 1: return PERIOD_M1;
      case 2: return PERIOD_M5;
      case 3: return PERIOD_M15;
      case 4: return PERIOD_M30;
      case 5: return PERIOD_H1;
      case 6: return PERIOD_H4;
      case 7: return PERIOD_D1;
      default: return PERIOD_H1;
   }
}
ENUM_TIMEFRAMES g_Timeframe = PERIOD_H1;
ENUM_TIMEFRAMES g_ConfirmationTimeframe = PERIOD_H1;
input group "=== Liquidity Trap Settings ==="
input int    SwingBarCount = 1;                // Number of bars for swing detection (smaller value = more swings)
input int    MaxZoneAge = 24;                  // Maximum zone age in hours
input double PriceSurgePercent = 0.001;        // Percent of price movement to consider as surge (0.001-0.2 recommended)
input bool   RequireVolumeSurge = false;       // Require volume surge with price movement
input double VolumeSurgeMultiplier = 1.5;      // Volume threshold as multiplier of average

// Input parameters: Entry Confirmation
ENUM_TIMEFRAMES MapTimeframeInt(int tf)
{
   switch(tf)

Full source code available on download

Educational purposes only. Do NOT use with real money. Test on demo accounts only.

Tags:ex15016smc-orderblockpipsgrowthfreemt5xauusd

Clear Warning: Educational Purposes Only

Clear Warning: This Expert Advisor is for educational and testing purposes only. Do NOT use it with real money. Test only on demo accounts. Trading with real money involves substantial risk of capital loss. This does not constitute investment advice.

Recommended Brokers for This EA

These EAs run on MT5 — use a regulated broker with fast execution and tight spreads

Community

Sign in to contributeSign In

Educational purposes only. Do NOT use with real money. Test on demo accounts only.

File NamePipsgrowth_com_EX15016.mq5
File Size107.2 KB
Versionv2.00
PlatformMetaTrader 5
File Type.mq5 Source
StrategyOther
Risk LevelMedium Risk
Timeframes
M5
Currency Pairs
XAUUSD
Min. Deposit$100