Join today
Strategies / Mean reversion / Buy After Price Fall

Buy After Price Fall Swing Strategy

The idea is to buy a bounce after a decline. It enters long when the close sits above the 50 EMA but below the 100 EMA, closes higher than the previous bar, and the 100-bar regression slope is still negative. Trades exit at a 2.75% target, a 10% stop, or when the close slips below the 7 EMA while staying above the 28 EMA.

Mean reversionLong onlySwingDAX 404 hours
1.88Profit factor
11,042Net profit EUR
52.24%Win rate
312Trades
-2,379Max drawdown
35.39Avg trade

Best run of 10. DAX 40, 4 hours, spread 3, from run pf:2026-09-24-DAX40-4h.tsv:4.

Entry rules, long

  1. Close is above the 50 EMA and below the 100 EMA
  2. Close is higher than the previous close
  3. Members only

Exit rules

  1. Stop loss 10%
  2. Profit target 2.75%
  3. Members only

Test conditions

PeriodUp to 2026-09-25
InstrumentDAX 40, 4 hours
Spread3 points
Contracts1
Starting capital1,000,000
CostsSpread only. Commissions and overnight financing are not included.
BarsUp to 200,000 bars, fewer where the instrument has less history
Last tested2026-09-25

Parameters

positionSize
Contracts per trade
1
fastPeriod
EMA close must be above
50
slowPeriod
EMA close must be below
100
slopePeriod
Regression slope length
100
exitFastPeriod
Exit EMA, fast
7
exitSlowPeriod
Exit EMA, slow
28
stopLossPct
Protective stop, percent
10
takeProfitPct
Profit target, percent
2.75

Every run

Markets and timeframes tested

MarketTimeframePFTradesWin %NetMax DD
DAX 40Best run4 hours1.88 31252.2411,042 EUR-2,379
Nikkei 2254 hoursn/a 23754.0114,883 USD-6,264
Dow Jones4 hoursn/a 8052.5011,974 EUR-2,523
Dow JonesDailyn/a 11552.179,031 EUR-2,364
US Crude Oil4 hoursn/a 26753.184,896 EUR-1,304
Nasdaq 1001 hourn/a 1,14042.194,650 EUR-2,798
Nasdaq 10030 minn/a 1,82542.584,458 EUR-2,282
FTSE 1004 hoursn/a 30851.304,000 EUR-1,154
SilverDailyn/a 16856.553,809 USD-3,597
S&P 5004 hoursn/a 23958.161,689 EUR-1,003

Charts

Results by run

Net profit against max drawdown

Net profitMax drawdown
0-10K-5K10K20KNikkei 225 · 4 hoursDow Jones · 4 hoursDAX 40 · 4 hoursDow Jones · DailyUS Crude Oil · 4 hoursNasdaq 100 · 1 hourNasdaq 100 · 30 minFTSE 100 · 4 hoursSilver · DailyS&P 500 · 4 hours

The code

ProBuilder, rewritten to house standard

Every file in the library uses the same header, the same section order and the same variable names. The numbers above were produced by the original version before the rewrite, and the rewrite has not yet been compiled in ProRealTime.

// ============================================================
// Buy After Price Fall
// ProRealAlgos Strategy Library  |  prorealalgos.com
// Type: Mean reversion
// Direction: Long only
// Timeframe tested: 4 hours
// ============================================================

// --- Settings ---
DEFPARAM CumulateOrders = false

// --- Parameters ---
positionSize = 1          // contracts per trade
fastPeriod = 50           // close must be above this EMA
slowPeriod = 100          // close must be below this EMA
slopePeriod = 100         // regression slope length, must be falling
exitFastPeriod = 7        // exit EMA, close must drop below it
exitSlowPeriod = 28       // exit EMA, close must still be above it
stopLossPct = 10          // protective stop, percent of entry price
takeProfitPct = 2.75      // profit target, percent of entry price

// --- Indicators ---
fastMA = ExponentialAverage[fastPeriod](close)
slowMA = ExponentialAverage[slowPeriod](close)
regressionSlope = LinearRegressionSlope[slopePeriod](close)
exitFastMA = ExponentialAverage[exitFastPeriod](close)
exitSlowMA = ExponentialAverage[exitSlowPeriod](close)

18 more lines: the entry and exit rules.

Read this first

Known weaknesses

  • The 10% stop is almost four times the 2.75% target, so a single stopped trade can erase several winners.
  • The best run on DAX 40 4 hours had 312 trades and a win rate of 52.24%, with an average trade of EUR 35.39. Spread of 3 points was included but commissions were not.
  • Only the DAX 40 run has a recorded profit factor. The other markets, such as Nikkei 225 and Dow Jones, come from sweeps without it.
  • It only buys, and the entry needs a negative 100-bar slope, so in a lasting downtrend it keeps buying bounces that may fail.

Indicators used

EMALinear Regression

How to load it

  1. Copy the code with the copy button above the code block.
  2. In ProRealTime, open a chart of the instrument and timeframe you want to test, then open ProOrder > New trading system and choose "Create with programming".
  3. Paste the code, give the system a name and save it.
  4. Click "Backtest", set your own spread and position size, and run it before you consider trading it live.

Questions

About this strategy

Can Buy After Price Fall run in ProOrder?

Yes, it uses standard entries and exits. The code was rewritten after testing and not compile-checked, so verify it in ProBacktest before live use.

How did it do outside the DAX?

All 9 other runs in the table were profitable, including Nikkei 225 4 hours at USD 14,882.5 and Dow Jones 4 hours at EUR 11,974. S&P 500 4 hours made the least, EUR 1,688.92.

What drawdown should I expect at 1 contract?

The DAX 40 best run had a max drawdown of EUR 2,378.6 against EUR 11,042 net profit at a position size of 1.

Why a 4 hour chart?

The 4 hour timeframe gave the best DAX result and most of the strongest rows in the table, which suits a pullback system that holds for several bars.

Related

Strategies like this one

Monday Dip Buy

Uses the same indicator.

n/a PF · 146 trades

Volatility Breakout

Best run on the same market, DAX 40.

1.39 PF · 475 trades

Morning Range Breakout

A similar profit factor.

1.89 PF · 434 trades

Want pullback systems that are already running live? Join the ProRealAlgos waitlist.

The ProRealAlgos community gets the full rules, the complete code and the automated portfolio.

Past backtest results do not guarantee future results. This is not financial advice. Curated and maintained by ProRealAlgos. ProRealTime™ is a trademark of ProRealTime SAS. prorealalgos.comStatsDocs