ForexBestRobots.comCompare EAs →
EN

Scalping indicator combination strategies · Strategy 1

EMA and RSI M5 Forex Scalping Strategy: Fresh Reset, Protected Entry and Fixed Exits

A complete EURUSD M5 EMA20/50 and RSI14 research strategy with fresh resets, timed entries, Bid/Ask exits, cost-aware sizing and reproducible fictional cases.

EMA20/50 context, a fresh RSI reset and one protected entry decision. All plotted prices and execution cases are fictional.
EMA20/50 context, a fresh RSI reset and one protected entry decision. All plotted prices and execution cases are fictional.

Turn the EMA–RSI timing guide into a complete, frozen trading specification. A valid reset can qualify one entry decision; it cannot wait indefinitely for confirmation, a tighter spread or another order attempt.

1. Freeze the complete research model

Use EURUSD · M5 · Bid OHLC · Close, a USD account and completed bars only. EMA context selects direction; RSI supplies a fresh reset and recovery. This is a reproducible research candidate, with no claimed win rate, expected return or optimum settings. A chart signal alone does not establish that an order was executable.

Allow one owned position or unresolved entry request per symbol. No averaging, pyramiding, hedge, partial exit, trailing stop or break-even adjustment. Ignore new reset events while an order is pending or a position is open; after a verified exit, wait for a later independent reset. Missing required bars cancel the observation: rebuild contiguous history before looking for a new origin.

2. Fix indicator inputs, finite seeds and precision

Seed E_n(n−1)=mean(C[0...n−1]), then use E_n(k)=E_n(k−1)+2/(n+1)*(C(k)−E_n(k−1)). For RSI14, seed average gains U and losses D from changes 1...14; thereafter U=(13U_prev+up)/14; D=(13D_prev+down)/14. Define RSI=100U/(U+D); only D zero gives 100, only U zero gives 0, both zero gives our convention 50.

EMA20 begins at k19, EMA50 at k49, RSI at k14; slope context begins at k52. Read completed terminal buffers with shift=1 and predecessors with shift=2; chart displacement is zero. The reference uses exact fractions before decimal export. Other initial history can change values; these seeds do not establish parity with a live terminal. Contract, tick size and lot constraints in the table are fictional assumptions to verify at the broker.

ComponentDeclared referenceRole / assumption
Price and inputsEURUSD · Bid · M5 · CloseEMA20 / EMA50 · RSI14
Contract and gridpip=0.0001 · tick=0.00001100000 EUR · 10 USD/pip/lot
Account limits0.25% · 1% · 2Per-entry budget · daily equity floor · requests/day

3. BUY: a fresh reset and a finite recovery

Require T+=[E20>E50 AND E50(k)>E50(k−3)]. A fresh reset P needs RSI_prev>45 AND 35≤RSI(P)≤45, valid T+ and no active origin. A persistent RSI in the band is not a fresh reset. At each later completed bar, first cancel on failed context, then on RSI<35, then expire if k>P+3; only then qualify a fresh RSI_prev≤50 AND RSI>50.

Only P+1, P+2 and P+3 can qualify. An additional reset while P is active never moves its deadline. Qualification, cancellation or expiry consumes P, with no rearming on that same processed bar. A later independent reset may start a new episode if every condition passes anew. Strict comparisons use underlying values, not rounded labels.

BUY context and a fresh RSI reset open one three-bar recovery window. Cancellation or expiry consumes the episode.
BUY context and a fresh RSI reset open one three-bar recovery window. Cancellation or expiry consumes the episode. On small screens, scroll the chart horizontally to keep labels readable.

4. SELL: mirror the signal, specify the quote side

Require T−=[E20<E50 AND E50(k)<E50(k−3)]. A fresh reset needs RSI_prev<55 AND 55≤RSI(P)≤65. Cancel first on lost context, then RSI>65, expire after P+3, and qualify only a fresh RSI_prev≥50 AND RSI<50 inside the same three-bar window. The same consumption and rearming rules apply.

SELL enters at Bid and closes at Ask; BUY enters at Ask and closes at Bid. The SELL stop below is an Ask-side numerical threshold calculated from completed Bid highs. It is not an observed historical Ask swing high. Bid-only OHLC cannot reconstruct an Ask path, spread changes or the order of intrabar exits.

SELL mirrors the RSI direction. Stop and target are Ask-side thresholds, although indicators use completed Bid closes.
SELL mirrors the RSI direction. Stop and target are Ask-side thresholds, although indicators use completed Bid closes. On small screens, scroll the chart horizontally to keep labels readable.

5. Gate the session, account and daily exposure

Accept qualification times only at 07:00≤q UTC<09:30; flatten at 10:00 UTC. These fixed UTC hours are model choices, not a claim about a daylight-saving-adjusted London session. Record the broker-to-UTC mapping. Require bar detection within 1s, candidate quote timestamp at or after q and quote age at most 250ms at send. Millisecond checks require suitable recorded timestamps and a monotonic clock, not invented precision from second-resolution server time.

At most 2 transmitted entry requests/day, including rejections and timeouts. A preflight skip consumes q without using a transmitted attempt. Record verified day-start equity Eday; block new entries and close owned exposure at the first available valid quote when equity reaches 0.99*Eday. Unknown baseline, cash flows or unresolved account state pauses the model. Reset the day only when flat and reconciled. No automatic news filter is included in this specification.

StageDeadline / windowAction
q07:00 ≤ UTC < 09:30Qualification times
q+1s≤1000msLatest first bar detection
q+2s≤2000ms · age≤250msAt most one request
q+6×M5 / 10:00min(q+30min, 10:00 UTC)First available quote to exit

6. Freeze stop and target from the first candidate quote

Let d=abs(E0−S)/pip, with 3≤d≤12. The stop uses all completed Bid extrema from P through q, plus one pip, rounded outward to the tick grid. The table defines side-specific levels. Fix both levels from the first candidate quote; do not recenter them after the actual fill. The target is twice the gross reference distance, not a guarantee of net 2R.

Plan adverse entry tolerance 0.2pip=2points. BUY worst entry is Fmax=Ask_ref+0.2pip; SELL is Fmin=Bid_ref−0.2pip. Add round-trip commission 0.6 pip and exit-execution reserve 0.4 pip once to planned loss, subtract them from target reward, and require net reward/planned loss≥1.30. Entry tolerance is already in F; the 0.4 reserve covers exit execution only. Fixed levels that violate broker constraints cause a skip, not a wider stop.

Reference entryFixed stopFixed target
BUYE0=Ask_refS_bid=floor_tick(min BidLow[P..q]−1pip)T_bid=E0+2(E0−S_bid)
SELLE0=Bid_refS_ask=ceil_tick(max BidHigh[P..q]+1pip)T_ask=E0−2(S_ask−E0)

7. Consume the first quote and send at most once

At the first detection of q, capture the first candidate Bid/Ask. Require spread ≤1.0pip and absolute Bid deviation from q’s completed Bid close ≤1.0pip. Complete preflight and transmit no later than q+2s, inclusive. Recheck current quote validity, age, costs, risk, permissions, margin and protection before send; any failure consumes q. A changed quote must remain inside the original entry tolerance and pass these checks; original levels and reference stay frozen.

Use one request with attached stop and target; skip if the execution environment cannot support this protected entry. No entry retry follows rejection, stale data, a bad spread, missed deadline or timeout. In bad_quote the first spread is 1.5 pip and later narrows to 0.8; no request follows. In late_request preflight finishes at q+2.5s: the deadline fails before any send. A later favourable quote does not revive either qualification.

8. Walk through the accepted BUY case

In buy_target, P=k73 / 08:00 UTC has RSI about 44.5994. Context persists and RSI crosses above 50 at q=k76 / 08:15 UTC, the last eligible bar, with RSI about 53.1680. First Bid/Ask at q+250ms is 1.10293 / 1.10301; request is at +400ms. Fixed levels are S_bid=1.10241; T_bid=1.10421. Reference distance is 6 pips.

Worst entry 1.10303 gives planned loss 7.2 pips, net target 10.8 and ratio 1.50. Independent starting equity 10000 USD gives budget 25 USD; rounding down to 0.34 lots risks 24.48 USD in the planning model. Verified fictional fill is 1.10302 at +550ms. Bid reaches the target at 08:20:20: gross 11.9 pips less actual commission 0.6 gives 11.3 pips / 38.42 USD. No reserve is charged as an actual fee.

buy_target: completed Bid candles, exact EMA lines and RSI lead to q at k76. The target is reached later on the explicit quote tape, not at the qualification close.
buy_target: completed Bid candles, exact EMA lines and RSI lead to q at k76. The target is reached later on the explicit quote tape, not at the qualification close. On small screens, scroll the chart horizontally to keep labels readable.
SideBid / AskS / TLoss (pip)Net target (pip)RatioLotsRisk USD
BUY1.10293 / 1.103011.10241 / 1.104217.210.81.500.3424.48
SELL1.09699 / 1.097071.09759 / 1.095797.210.81.500.3424.48

9. Walk through the accepted SELL case

The independent sell_target prehistory reflects the BUY Bid closes around 2.20000. Its reset RSI is about 55.4006, recovering below 50 to about 46.8320 at the same q. First Bid/Ask is 1.09699 / 1.09707; frozen S_ask=1.09759; T_ask=1.09579. The SELL Ask threshold comes from Bid highs plus one pip, as declared, rather than from an unavailable historical Ask extreme.

Worst Bid entry 1.09697 yields the same 7.2-pip planned loss, 10.8-pip net target and 0.34-lot volume. The verified fill is 1.09698. At 08:20:20, Ask reaches 1.09579; net result is again 11.3 pips and 38.42 USD in this constructed case. The execution chart uses Ask candles; its RSI still comes from Bid closes. The symmetry is engineered for verification, not evidence that both directions trade equally well.

sell_target: Ask candles show the executable exit side. The lower RSI panel is still calculated from Bid closes; the frozen Ask target is reached on a later tick.
sell_target: Ask candles show the executable exit side. The lower RSI panel is still calculated from Bid closes; the frozen Ask target is reached on a later tick. On small screens, scroll the chart horizontally to keep labels readable.

10. Keep late and cancelled recoveries rejected

In late_signal, P is k73 but RSI crosses above 50 only at k77 / 08:20 UTC=P+4. Expiry precedes the raw cross, so Q=0. In cancelled_signal, RSI falls to about 33.1588 at k75, cancelling P before a later recovery. That later cross has no active origin. Neither branch sends an order.

Distinguish an unqualified signal from an otherwise valid signal rejected by execution preflight. The CSV retains context, raw reset and crossing flags, origin, qualification and action. A no-order case has no trading return: blank PnL is not an invented zero-return fill. The constant-price case uses RSI 50 and equal EMAs, so it creates neither strict context nor a qualifying episode.

late_signal: the raw RSI cross at k77=P+4 arrives after expiry. Q stays zero and no entry request is sent.
late_signal: the raw RSI cross at k77=P+4 arrives after expiry. Q stays zero and no entry request is sent. On small screens, scroll the chart horizontally to keep labels readable.

11. Use fixed exits, including time and gaps

After a verified fill, indicator reversals do not close or adjust the trade. BUY protection triggers on Bid≤S_bid OR Bid≥T_bid; SELL on Ask≥S_ask OR Ask≤T_ask. Use chronological quotes and actual broker fills. A bar containing both levels without tick order cannot identify the first exit; do not assign the favourable one.

Time exit is the first valid quote after min(q+6 completed M5 bars, 10:00 UTC), unless already closed. In time_exit it occurs at 08:45:00.200, Bid 1.10295, net −1.3 pips / −4.42 USD. In buy_gap the stop is crossed and the actual exit is 1.10226, 1.5 pips worse than its level: net −8.2 pips / −27.88 USD, exceeding the 25 USD budget. Stops and reserves do not cap real losses; outages can also delay flattening.

buy_gap: the Bid jumps through the fixed stop. The worse actual exit produces a cash loss larger than the planning budget.
buy_gap: the Bid jumps through the fixed stop. The worse actual exit produces a cash loss larger than the planning budget. On small screens, scroll the chart horizontally to keep labels readable.

12. Reconcile unknown outcomes and failed protection

A request acknowledgement must match the owned symbol, side, volume, stop and target. Log a unique attempt identifier and reconcile the actual order book and fill history. A timeout means unresolved≠rejected≠flat; pause new entries, do not resend, and do not infer a fill or PnL. unknown_request deliberately leaves those fields blank because the account outcome is unavailable.

If reconciliation finds a fill outside the planned adverse bound or missing/wrong protection, attempt an emergency close of the verified owned ticket and halt new entries. Verify the close result and continue risk reconciliation if uncertain; never widen the fixed stop to repair the trade. Emergency risk actions are separate from the entry-attempt cap. No instruction here authorizes interference with unrelated account positions.

13. Size cash risk and distinguish reserves from fees

Use B=min(0.0025*equity, equity−0.99*Eday), requiring positive headroom. With assumed 10 USD/pip/standard lot and 0.01 lot step, lots=floor_step(B/(planned loss pips*10)). Skip below minimum lot or on failed maximum-volume, margin or contract checks. Recompute quote-to-account conversion when needed; EURUSD and a USD account make the fictional pip value direct.

For BUY planned loss is (Fmax−S_bid)/pip+1.0 and net reward (T_bid−Fmax)/pip−1.0; SELL mirrors the distances from Fmin. Spread is already represented by executable sides and must not be added again. Actual net PnL uses actual entry/exit and actual fees; the 0.4-pip exit reserve is not a fee. The target fixture’s actual 38.42 USD and the planning reward answer different questions.

Worst planned entry, commission and exit reserve determine volume. Actual PnL uses actual fills and commission; the reserve is not charged as a fee.
Worst planned entry, commission and exit reserve determine volume. Actual PnL uses actual fills and commission; the reserve is not charged as a fee. On small screens, scroll the chart horizontally to keep labels readable.

14. Rebuild the three public data files

The bar file has 10 independent cases ×83 bars=830 rows, with scheduled UTC closes beginning at 2026-01-06 01:55 UTC. Bid closes drive every indicator. Pre-q Ask bars are explicitly constructed at Bid+0.8 pip; post-q Bid/Ask OHLC aggregates the listed quote tape. These are artificial paths, not historical terminal data or a recovered live Ask feed.

The event file supplies chronological quotes, the request, known acknowledgements, exits and the unresolved timeout. The ledger separates references, worst planned entry, actual fills, costs and nullable outcomes. Its last quote at q+30min+200ms belongs to the next open bar and supplies the time exit; it is not retroactively inserted into the previous completed candle. Recalculate seeds, signals, levels, volume and PnL independently before implementation.

Download fictional M5 bars and indicators (CSV)

Download chronological execution events (CSV)

Download independent case ledger (CSV)

15. Validate mechanics before assessing performance

The casebook contains 7 qualifications; 5 transmitted requests; 4 known closed fills; 1 unresolved request. These counts verify branch coverage. The other cases deliberately exercise first-quote rejection, missed deadline, late recovery, cancellation and strict equality. Each case starts independently; they are not a ten-trade portfolio, a winning-rate sample or a backtest equity curve.

For market research freeze the specification and all tried parameter variants, then test suitable unseen Bid/Ask tick data, variable costs, gaps, rejected and unknown requests, outages and clock mapping. Compare expectancy, drawdown, turnover and uncertainty after costs. Also test risk-floor breaches and protection failures in a controlled environment. The downloadable teaching fixtures do not establish live readiness or economic advantage.

Ten independent synthetic cases exercise accepted entries, skipped decisions and an unresolved order. Branch counts do not estimate trading performance.
Ten independent synthetic cases exercise accepted entries, skipped decisions and an unresolved order. Branch counts do not estimate trading performance. On small screens, scroll the chart horizontally to keep labels readable.
Independent caseRequestsOutcome
buy_target1Target; known fill
sell_target1Ask target; known fill
buy_gap1Gap stop; −27.88 USD
time_exit1Time exit; −4.42 USD
bad_quote0First spread rejected
late_request0Send deadline missed
late_signal0Recovery after expiry
cancelled_signal0Reset cancelled
unknown_request1Unknown; reconciliation required
flat0No strict context or signal

16. Implement the same state machine without discretion

Keep the sequence explicit: completed data, eligible reset, finite recovery, consumed first-quote decision, one entry request, verified protection, fixed exit and reconciled flat state. Log every failed gate and its priority. Broker stop-distance and freeze restrictions can still block an operation even when a reported minimum is zero. Validate actual platform behaviour rather than treating API parameters as execution guarantees.

This is the first complete strategy in the scalping indicator-combination group. The related EMA–RSI guide explains its signal foundation; the backtesting and sizing guides cover data and account-currency checks. Other combinations need their own complete rules and independent evidence. Publish and audit this material before extending the cluster; no outcome from these fictional examples justifies a profitable-trading claim.

Frequently asked questions

Can a late RSI recovery revive a reset?

No. Only the three completed bars after P are eligible, with cancellation checked before expiry and recovery. A later independent reset is required after the old episode closes.

Can a narrower spread rescue the first rejected quote?

No. The first candidate consumes q. A failed spread or deadline gate produces no request for that qualification, even if the next quote looks attractive.

Does twice the gross stop distance guarantee net 2R?

No. Adverse entry, commission and exit execution reduce net reward and increase planned loss. The declared net ratio gate is 1.30; actual fills can be worse.

Why does the SELL chart use Ask candles?

SELL closes on Ask, so Ask determines its stop and target triggers. Indicators still use completed Bid closes. The numerical Ask stop is derived from Bid highs, not a claimed observed Ask swing high.

Does a timeout permit another entry request?

No. Pause and reconcile the actual owned order and fills. An unknown result is neither rejection nor evidence of being flat; its PnL stays unknown.

Do the examples demonstrate that the strategy is profitable?

No. They are synthetic independent verification cases. Suitable unseen tick data, realistic execution and further controlled validation are needed before assessing performance.

Sources and research notes

MetaQuotes documents indicator buffers, quote sides and trade functions. The finite seeds, thresholds, clocks and risk settings below are our declared research choices, not broker guarantees or optimized recommendations.

Educational research specification. Prices, quotes and outcomes here are fictional. Forex trading involves risk. Stops, slippage settings and planning reserves cannot guarantee execution prices, profitable returns or a maximum actual loss.