Two pullback legs need an intervening recovery, not just more candles moving against the impulse. This educational M1 model fixes an earlier impulse target, requires a higher second low or lower second high, and permits only the immediately following recovery close. It then inspects one quote and allows one entry request. Invented prices and supplied execution reports make the rules reproducible; they do not establish profitability.
1. Define one complete M1 price-action hypothesis
This model studies a directional impulse followed by two separate countertrend legs and a first confirmed recovery. It adds a distinct price-only structure to the scalping cluster: no EMA, SAR, RSI, ADX or ATR gate and no future-confirmed pivot. A failed breakout and re-entry is a different event sequence from the one specified here.
These rules are an educational research specification, not a validated live system or installable EA. The exact candle counts and thresholds are hypotheses, not proven optimal settings. All prices, quote paths and execution reports are invented. Evaluate the whole specification on reliable unseen data before drawing any conclusion about performance.
For a complete first-return model, see limit-order scalping with timed cancellation: it separates chart touches, actual fills and unresolved cancellation requests.
2. Fix the contract, UTC window and account guard
Use completed EURUSD M1 Bid OHLC with pip=0.0001; point=tick=0.00001; contract=EUR100,000/lot; pip_value=$10/lot for a USD account. Every pattern bar opening and close, plus the entry request, must satisfy 09:00<=UTC<12:00. Require verified account-wide flatness: no position, pending order, other exposure or unresolved entry/close request. Margin, contract rules and initial attached protection must be supported and known.
Recheck context through formation and at the first quote. A predeclared known UTC event list blocks entry during [event−15 min,event+15 min]; that is an assumed policy, not a universal safety interval. Unknown calendar, contract or data blocks entry. After failure, verified exit, reconciled rejection, data restoration or hold release, clear the old pattern. All new impulse-bar openings must be at or after that release boundary. The fictional cases explicitly assume a known empty event list.
3. Find the first disjoint three-bar impulse
Search only while verified flat with no active setup. A BUY impulse uses three consecutive bullish bars with C1>O1; C2>O2; C3>O3; H1<H2<H3; L1<L2<L3; C1<C2<C3. The first complete triple is I; consume its bars before testing 8<=W/pip<=18; W=H3−L1. Freeze the anchor low and high from those bars. An opposite body, doji, failed progression or missing interval breaks the search run. Do not keep sliding an already consumed triple to find a better anchor.
If I qualifies, stop searching for another impulse until this setup ends. In the main example I=k2 / 09:03 UTC; anchor_low=1.19995; anchor_high=1.20175; W=18 pip. The only allowed continuation is I→A1→A2→B→D1→D2→R; R=I+6, with successive actually completed minutes. Verify closure after the terminal creates the next bar; a clock boundary or empty native history alone is insufficient. Never use a later interval to replace a missing one.
4. Require exactly two first-leg bars
For BUY, A1 is the immediate next bearish bar and closes below I's close. A2 is the next bearish bar with Close(A2)<Close(A1); High(A2)<High(A1); Low(A2)<Low(A1). Each required body is strictly bearish. There is no waiting for an extra countertrend candle to make the leg look better.
Throughout formation after I, BUY bars must retain Low>anchor_low; High<T_bid. A touch cancels the setup before the role test; it is a geometric pre-entry rule. The main first leg ends at A2=k4 / 09:05; Low(A2)=1.20035. All these extrema are already observed closed-bar values; no right-hand pivot bars or later swing selection are needed.
| UTC time | Role | Open | High | Low | Close |
|---|---|---|---|---|---|
| 09:01 UTC | P1 | 1.20000 | 1.20065 | 1.19995 | 1.20060 |
| 09:02 UTC | P2 | 1.20060 | 1.20125 | 1.20055 | 1.20120 |
| 09:03 UTC | I | 1.20120 | 1.20175 | 1.20115 | 1.20170 |
5. Separate the legs with one real recovery bridge
B is exactly the next bar after A2. For BUY require Close(B)>Open(B); Close(B)>High(A2); Low(B)>Low(A2). It must also remain within the formation boundaries. The main bridge has B=k5 / 09:06; Close=1.20080; High(A2)=1.20075; Low(B)=1.20039.
A doji, a third bearish bar, equality at the bridge breakout or a bridge low that is not higher cancels this setup. Several uninterrupted countertrend bars are one extended move, not two independent legs under this definition. Do not wait for a later bounce and relabel it B. A new setup needs a wholly new disjoint impulse.
6. Confirm a higher second low with the first recovery only
D1 is the next bearish bar: its high is below B high and its close below B close. D2 is the next bearish bar with Close(D2)<Close(D1); High(D2)<High(D1); Low(D2)<Low(D1); Low(D2)−Low(A2)>=0.2 pip. The main second low is Low(D2)=1.20061; Low(A2)=1.20035; difference=2.6 pip. Fix the stop from D2 before reading R.
Only R=D2+1=I+6 may confirm. BUY requires Close(R)>Open(R); Low(R)>=Low(D2); 0<Close(R)−High(D1)<=1.5 pip; 2<=r/pip<=8, where r is the close-to-fixed-stop distance. The main recovery is R=k8 / 09:09; Close=1.20085; High(D1)=1.20082; break=0.3 pip; r=2.9 pip. Reject a failed R permanently. No additional confirmation bar is required or permitted.
| UTC time | Role | High | Low | Close |
|---|---|---|---|---|
| 09:04 UTC | A1 | 1.20172 | 1.20065 | 1.20070 |
| 09:05 UTC | A2 | 1.20075 | 1.20035 | 1.20040 |
| 09:06 UTC | B | 1.20085 | 1.20039 | 1.20080 |
| 09:07 UTC | D1 | 1.20082 | 1.20066 | 1.20070 |
| 09:08 UTC | D2 | 1.20074 | 1.20061 | 1.20064 |
| 09:09 UTC | R | 1.20088 | 1.20063 | 1.20085 |
7. Write the complete SELL mirror and its price side
SELL starts with three bearish bars whose highs, lows and closes strictly decrease. Freeze their full anchor range and apply the same width test. A1 and A2 are bullish, with rising closes and A2 high/low strictly above A1. B is bearish, closes strictly below A2 low and keeps its high below A2 high. D1 is bullish with low above B low and close above B close. D2 is bullish with higher close, high and low than D1, while High(A2)−High(D2)>=0.2 pip.
The next R must be bearish and satisfy High(R)<=High(D2); 0<Low(D1)−Close(R)<=1.5 pip; 2<=r/pip<=8. During formation, Bid bars retain High<anchor_high; Low>T_ask. That is a Bid-geometry cancellation rule; the chosen SELL exit levels are absolute Ask triggers, not recovered Ask OHLC. The first quote must keep Ask below D1 low. SELL enters on Bid and exits on Ask; no automatic reversal, averaging or additional position is allowed.
8. Freeze the earlier target and the second-leg stop
At I, BUY fixes T_bid=anchor_high−0.2 pip; at D2 it fixes S_bid=Low(D2)−0.5 pip; r=Close(R)−S_bid. SELL uses T_ask=anchor_low+0.2 pip; S_ask=High(D2)+0.5 pip; r=S_ask−Close(R). Prices must align to the declared tick. The target is fixed before the pullback; the stop before R. Neither is reanchored to the entry quote or actual fill.
The main BUY levels are S_bid=1.20056; T_bid=1.20173; SELL has S_ask=1.19944; T_ask=1.19827. Structural r differs from fill-to-stop risk. Fixed exits remain after acceptance; no SAR trailing, break-even move, partial exit or opposite-signal reversal is part of this model. The separate time cap below still requires an actual closure report.
9. Evaluate only the first post-recovery quote
Consume the first pair received after R's scheduled close, requiring arrival<=R_close+1.000 s; 0<=quote_age<=250 ms; 0<=spread<=0.6 pip. BUY retains Bid>High(D1); SELL retains Ask<Low(D1). Check positive noncrossed prices, tick, current broker distances/volume, known context, margin and support for both initial exits. Unknown rules block. A zero reported stop level does not guarantee server acceptance.
Use F_plan=Ask+0.2 pip for BUY; F_plan=Bid−0.2 pip for SELL; c=0.3 exit reserve+0.6 linear round-trip commission=0.9 pip. BUY uses L=(F_plan−S_bid)/pip+c; W=(T_bid−F_plan)/pip−c; SELL uses L=(S_ask−F_plan)/pip+c; W=(F_plan−T_ask)/pip−c. Require L>0; W>0; W/L>=1.50. Spread is already represented by the proper quote sides; do not add it again. No other fees or financing are assumed.
| Observation | Quote | Loss, pips | Net target, pips | Net W/L | Plan lots |
|---|---|---|---|---|---|
| BUY | 1.20085 / 1.20091 | 4.6 | 7.1 | 1.5434783 | 0.54 |
| SELL | 1.19909 / 1.19915 | 4.6 | 7.1 | 1.5434783 | 0.54 |
| BUY | 1.20088 / 1.20094 | 4.9 | 6.8 | 1.3877551 | — |
| BUY / Later diagnostic | 1.20085 / 1.20091 | 4.6 | 7.1 | 1.5434783 | — |
| BUY | 1.20135 / 1.20141 | 4.6 | 7.1 | 1.5434783 | 0.54 |
10. Keep a failed first recovery rejected
In the failed-recovery fixture, the impulse and both legs qualify, but R8 Close=1.20082=High(D1). Equality is not a breakout. The next bar reaches k9 Close=1.20085 with a bullish body and acceptable geometry, but it is outside the only recovery slot. There is no request and no later-R substitution.
Continue searching only after this setup is consumed and the release boundary is known. A future setup needs three new complete impulse bars and the entire new two-leg sequence. Do not reuse the previous impulse, extend D2, or reinterpret a failed R as the beginning of a discretionary entry. The account and context guards remain independent requirements.
11. Reject one long leg and a broken second low
The single-leg case replaces the required bridge with B5 Open=1.20040; Close=1.20030. It is another bearish candle, so the setup ends at B. A later recovery does not create the missing bridge retrospectively. The second-leg case instead has Low(D2)=1.20033<Low(A2)=1.20035 and is rejected at D2.
These are different failure reasons: absent separation versus a second extreme that violates the higher-low condition. Record the failed stage and timestamp even if later prices look attractive. No fill, eligible volume or realised result is assigned to an entry that was never requested. The SELL mirror applies the same distinction to its lower second high.
12. Do not replace a bad or expired first quote
The accepted BUY starts from Bid/Ask=1.20085/1.20091; F_plan=1.20093; L=4.6; W=7.1; W/L=1.5434783. Another case first receives 1.20088/1.20094; F_plan=1.20096; L=4.9; W=6.8; W/L=1.3877551 and fails net room despite the allowed spread. A smaller volume cannot repair a linear net ratio.
Its later pair 1.20085/1.20091 would restore the main diagnostic ratio, but creates no eligible volume or request. In the expiry case, the first arrival is 09:09:02.120, later than the inclusive entry deadline 09:09:01.000. It also produces no request. The first received pair consumes permission even when it is rejected; no later replacement is allowed.
13. Size within a plan and keep the fixed time cap
The illustrative account uses equity=$10,000; risk_fraction=0.25%; budget=$25; lot_min=lot_step=0.01; lot_max=1.00. Use lots=floor_step(25/(L×10),0.01); incompatible broker rules or unavailable margin reject the request. The main plans give 0.54 lot; planned_loss=$24.84; planned_net_target=$38.34. This is a planned budget, not a guaranteed loss cap. The supplied SELL stop execution beyond its trigger produces −$25.92, exceeding that budget.
The deadline is D=min(R_close+10 min,12:00 UTC). With no prior protective exit, request closure once on the first reliable available proper-side quote at or after D. BUY tests Bid, SELL Ask; protective levels take priority on the same quote. Protection remains active while a close reply is pending. Missing quotes or an uncertain reply do not prove flatness; reconcile and retain the guard rather than inventing a boundary fill.
14. Separate a new setup, rejection and unknown execution
After the failed R8, the independent example starts a new impulse I14 / 09:15 and reaches its own R20 / 09:21; S_bid=1.20106; T_bid=1.20223. It makes one request, definitively rejected in the supplied report with error=130 despite a reported zero stop level. This complete new setup is not a retry of R8. A definite rejection plus verified flatness requires another fresh start.
Permit one request per event with 0.2 pip=2 points planning reserve; a terminal slippage argument is not a universal fill guarantee. Distinguish entry_deadline=R_close+1 s from ack_timeout=request_time+2 s. A timeout does not cancel a possibly accepted request. The unknown-response case leaves fill and P&L blank even after reference prices reach the target; reconcile positions and history before any new entry. Unsupported initial protection blocks entry. An unexpected unprotected fill permits one emergency close on a reliable quote, then reconciliation if unresolved; never widen the frozen exits to force acceptance.
15. Reproduce the invented observations and supplied reports
The files contain 400 closed Bid bars; 11 started setups; 1,610 quote updates; 5 simulated entry requests; 3 supplied fills; 0 live orders. Each independent case has 40 bars. The assumed piecewise-constant path visits Open+100 ms; Low/High+20 s; High/Low+40 s; Close+59.9 s; Ask=Bid+0.6 pip, visiting Low first on bullish/doji bars and High first on bearish bars. The expired first Open is delayed; the timestamps show it explicitly. This construction cannot recover historical intrabar ordering or Ask from OHLC.
Independently recompute eligible impulses, each failed stage, recovery identity, first quote, costs, volume and proper-side exit. Supplied net outcomes after the stated commission and fills are BUY target +$40.50; SELL gap stop −$25.92; time exit −$7.56. These are constructed cash calculations, not measured returns, win rate or expectancy. Rejected and unresolved cases have no filled volume or P&L. A next-forming-bar quote confirms the last complete interval without adding an invented closed bar.
Download fictional M1 Bid inputs (CSV)
Download started setups and failed stages (CSV)
Download fictional quotes and execution reports (CSV)
| Status | Entry requests | Reported fill | Reported exit | Fictional net P&L, USD |
|---|---|---|---|---|
| CLOSED_TARGET | 1 | 1.20092 | 1.20173 | +40.50 USD |
| CLOSED_STOP | 1 | 1.19908 | 1.19950 | -25.92 USD |
| CLOSED_TIME | 1 | 1.20092 | 1.20084 | -7.56 USD |
| SERVER_REJECTED | 1 | — | — | — |
| REQUEST_UNCERTAIN | 1 | — | — | — |
16. Test the whole sequence on unseen chronological data
Freeze the pattern definition, prices, deadlines, costs and context rules before research. Retain the full chronological inputs and every started setup, including failed impulse width, missing bridge, broken second extreme, failed recovery, bad quote, expiry and unknown response. A change to the pattern or account guard can change the eligible setup calendar; report that effect rather than comparing only the trades that survived.
Use reliable paired quotes and execution evidence. Keep unknown outcomes unknown and include gaps, rejected requests, missing intervals, fees, broker rules and margin constraints. Compare market regimes and news holds under the same account assumptions. Three supplied closed outcomes cannot establish an edge. The specification makes a bounded hypothesis testable, without establishing suitability for live deployment.
Frequently asked questions
Do several bearish candles automatically make two BUY pullback legs?
No. This definition needs two first-leg bars, one immediately following bullish bridge, then two second-leg bars that retain the higher low. A third uninterrupted bearish candle in the bridge slot rejects the setup. A later bounce cannot repair it.
Can a later M1 candle replace a failed recovery?
No. Only the immediately next completed candle after D2 may be R. Equality at its breakout level fails. A later attractive recovery requires a new disjoint impulse and the complete new pattern, rather than a replacement R.
Can I wait for a better quote after the first one fails?
No. The first received pair consumes quote permission, including age, spread, level, deadline and net-room failures. A later diagnostic ratio can improve without creating eligible volume or another request.
Why are the stop and target not moved to the actual fill?
The model tests a target from the earlier impulse and protection from D2. Reanchoring changes the hypothesis and its net room. Reject insufficient room at the first quote; smaller volume cannot repair its linear reward-to-loss ratio.
Does an entry timeout prove rejection or a zero result?
No. A submitted request can remain unresolved after the entry window ends. Block new entry and reconcile positions and order history. A missing response proves neither fill nor rejection, and it does not establish zero P&L or a cancelled order.
Do the supplied gains and losses demonstrate profitable scalping?
No. The prices and reports are invented with no live orders. They verify stage rules, quote sides and cash arithmetic only. The gap loss also shows that a reserved risk budget is not a guaranteed cap. No historical performance or optimal settings are established.
Sources and research notes
Official MetaTrader and MQL4 references support bar-time access, Bid/Ask order sides and broker protection/volume constraints. The price-action pattern, thresholds, deadlines, quote paths and execution reports below are declared teaching assumptions. They are not an optimal-parameter claim or historical performance evidence. No trading API is called.
- MQL4: OrderSend and broker protection restrictions
- MetaTrader4: order types, Bid/Ask triggers and chart prices
- MQL4: iTime and bar intervals
- MQL4: symbol contract and volume properties
Educational price-action specification. Invented quotes and supplied execution reports; no live orders, historical backtest or measured profitability.