EA LAB · TRADING STRATEGY #010 · PRICE ACTION
Demand Trap: supply & demand reversals
A strong impulse defines a zone. A return to that zone creates a candidate. A completed rejection candle confirms the setup. The trade then uses a structural stop and a target selected from the available price structure.
Explore EA010 for MT5Read the manual
The idea: a return to the origin of an impulse
Demand Trap makes a supply-and-demand reversal idea explicit enough to test. A small base precedes a forceful directional candle. The EA records a price zone around the base, waits for a return and checks for rejection. It trades both demand-side buys and supply-side sells. The name uses SMC vocabulary, but the robot reads OHLC prices; it does not measure institutional orders or the order book.
A zone is a location, not a prediction. Price can pass straight through it, reject briefly and reverse again, or leave too little space to the next target. The confirmation, stop placement and distance to an opposing zone matter as much as finding the zone itself.
How a zone becomes eligible
- Choose two timeframes. Zone detection uses InpZoneTF; signal confirmation uses InpEntryTF. The zone timeframe must be at least as large. Factory defaults are H1/M5; the supplied historical example is M20/M15.
- Build the base. Take the configured number of candles immediately before the impulse. There is no separate base-compression threshold.
- Confirm the impulse. Its body must be at least the impulse multiplier times a pre-impulse mean true-range estimate. A bullish close must exceed the base high; a bearish close must fall below the base low.
- Select the boundaries. WIDE uses the full high/low range of the base. OB uses the most recent opposite-colour candle in it; without one, no OB zone is created.
- Apply optional structure confirmation. With BOS enabled, the impulse must also close beyond a qualifying older confirmed swing. The example does not enable this filter.
BUY at demand
A bullish impulse leaves a demand zone. On return, the closed entry candle overlaps that eligible zone and passes the selected bullish rejection rule. The stop is below the formation.
SELL at supply
A bearish impulse leaves supply. A return and an accepted bearish closed-candle pattern permit a short. The stop is above the formation.
What actually confirms the trade?
| ANY | False break OR pin bar OR engulfing. A false break is not mandatory. |
|---|---|
| False break | Demand: low below the outer boundary, close back above it. Supply: high above the outer boundary, close back below it. Excursion cannot exceed the configured entry-ATR depth. |
| Pin bar | Rejection wick passes wick/body and wick/range thresholds; the close is in the favourable half. Candle colour alone is not decisive. |
| Engulfing | An opposite-colour previous candle is followed by a body that fully engulfs it. |
| False break + candle | False break AND either pin bar or engulfing. This is more restrictive than ANY. |
Only closed entry candles qualify. FreshOnly restricts the recorded first retest to a configured window; the signal can appear on the contact candle. Historically touched zones found during discovery are not automatically fresh. InvalidateOnClose=true uses a closed zone-timeframe candle beyond the outer boundary; false uses an outer wick breach.
Two entry modes with different execution
Close entry: send a market order on the first tick of the next entry candle. The fill is not guaranteed to equal the historical signal close. Buys use ask and sells use bid.
Break extreme: store a virtual trigger above the formation high for a buy or below the low for a sell. A later tick must strictly cross it before expiry. This is terminal-side logic, not a pending stop order parked at the broker; MT5 must remain running. Version 1.07 retains the formation extremes and identifies the original zone even when the zone array rolls over.
Structural stops and targets that can shorten
BUY SL is formation low minus the configured fraction of formation range; SELL SL is formation high plus that buffer. If the signal candle also qualifies as engulfing, the formation includes the previous candle even if another selected rule admitted the setup.
The fixed-RR setting is the initial ceiling. An enabled nearer opposite zone or confirmed swing ahead of the trade can shorten the target. A farther target does not extend it. TP remains fixed after entry. There is no trailing, break-even, partial close, pyramiding or minimum effective R/R filter.
Actual demand retest: a winning long

On 4 March 2025, 0.20 lots bought EURUSD.pro at 1.05151 at 16:30:00. SL was 1.04942 and TP 1.05486. TP filled at 19:08:26, yielding +265.66 PLN with no reported commission or swap. The target is approximately 1.60R, despite a configured 3R ceiling. The screenshot illustrates a return to demand and lower-wick rejection; the report does not log which particular signal branch admitted the order.
Actual supply rejection: a profitable short

On 15 January, SELL 0.27 lots entered at 1.03335 at 15:45:00. Initial SL 1.03470 and TP 1.03060 imply about 2.04R. The TP exit filled at 1.03055 at 16:48:40 for +312.18 PLN. Marked levels and actual execution can differ; use report fills when measuring realised results.
A valid-looking setup can lose

The 14 April BUY entered at 1.14005, 0.26 lots, at 04:15:00. SL 1.13790 and TP 1.14091 give only about 0.40R. The stop filled at 1.13788 at 04:38:35 for -212.47 PLN. The code has no explicit rule forbidding a buy inside a visible opposite supply zone. A zone label and confirmation cannot remove loss risk.
Example historical backtest: profit and drawdown together
5,000.00 initial deposit → 16,096.97 final balance.
1,011.72 PLN at the relative-DD event. Largest monetary equity drawdown: 1,138.22 PLN (9.00% at that event).
| Expert / symbol | EA_010_Demand_Trap_EALAB_v1_07 / EURUSD.pro |
|---|---|
| Period / timeframes | 2025-01-01 to 2026-10-01 / M20 zones, M15 entries |
| Broker/server / leverage | OANDATMS-MT5 report, build 6230 / 1:100 |
| Profit factor / expected payoff | 2.45 / 97.34 PLN per completed trade |
| Trades / deals / wins | 114 completed trades / 228 trade deals / 89 wins, 25 losses (78.07% win rate) |
| Balance drawdown | Maximum relative 8.31% (756.11 PLN) |
| Test settings | WIDE zones; base 3; ATR 22; impulse 1.75; first retest 5 bars; ANY signal; next-bar market entry; initial 3R ceiling, opposite-zone and swing targets enabled; 3% equity risk; hours/EMA filters off; spread filter 100 points |
| Data and costs | 99% reported quality; 48,328,314 ticks. Commission 0.00 PLN; swap -66.76 PLN. Explicit modelling selection and spread schedule not provided in source report. |
Historical simulation, not live performance or a forecast. The owner supplied the compiled EX5 and a new v1.07 report; the MQ5 matches the reviewed source exactly. No compiler log, untouched out-of-sample or forward report was supplied. Costs, tick sequence and broker contract settings can change results. Download the original report and its images.
Risk, operating filters and restart limits
Equity-percent sizing estimates the one-lot stop loss with OrderCalcProfit and rounds volume down. Fixed lots are an alternative; invalid volume steps are rejected. The example’s 3% equity risk is a historical configuration, not a live recommendation. Fees, gaps and slippage can exceed nominal risk. Any existing position on the symbol, including another EA or a manual position, blocks a new entry.
Optional broker-time hours, higher-timeframe EMA and ask/bid spread filters constrain entries. Spread is in points, not pips; 100 points on a five-digit EURUSD quote equals 10 pips. Hours and EMA are off in the supplied example.
Used-zone status persists on demo/live for the same account, server, symbol, magic, timeframe/mode and zone identity. Contact, retest window and pending state are not fully restored. State does not migrate across terminals or from v1.06. Changing settings can create a different identity.
How to test the strategy
- Start with a single run using the packaged example preset; compare all values with the report.
- Hold exposure fixed while comparing zone formation and signal modes. Test target choices separately.
- Use small, valid parameter ranges. Select explicit timeframe pairs; do not blindly retain the original SET’s optimization selections.
- Choose Custom max. SMOOTH EQUITY ranks profit, sampled equity linearity and weekly progress, penalising stagnation, Ulcer and relative equity drawdown. Defaults reject fewer than 40 trades or DD above 35%; these are ranking gates, not live circuit breakers.
- Reserve untouched chronological data, assess neighbouring parameters, validate realistic costs and run a demo forward test.
Frequently asked questions
Is every zone touch an entry?
No. Eligibility, a completed confirmation candle, operating filters, position capacity and broker constraints still apply.
Does the strategy need a false break?
Only in the relevant selected modes. ANY also accepts a pin or engulf without a false break.
Can I reproduce the report with factory defaults?
No. Defaults use H1/M5; the historical example uses M20/M15 and other specific values.
Does Strategy Tester activate a license?
No. Tester/optimization are offline. Demo and live charts require a valid EA010 purchase license.
Educational explanation of supplied software. Historical results do not guarantee future performance.
