Join today
Strategies / Momentum / Repulse DPO

Repulse DPO Strategy

On weekday bars, the system buys when both the 3-period DPO and the 3-period Repulse read above 0.1. It sells when either drops back below 0.1. A 1% stop loss and a 3% profit target cap each trade.

MomentumLong onlyIntradayEUR/USD2 min
2.87Profit factor
128,475Net profit USD
53.85%Win rate
104Trades
-7,141Max drawdown
1,235Avg trade

Best run of 11. EUR/USD, 2 min, spread 1, from run pf:2026-09-24-EURUSD-2m.tsv:2.

Entry rules, long

  1. The bar opens Monday to Friday
  2. Members only
  3. 3-period Repulse is above 0.1

Exit rules

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

Test conditions

PeriodUp to 2026-09-24
InstrumentEUR/USD, 2 minutes
Spread1 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-24

Parameters

positionSize
Contracts per trade
1
firstTradeDay
First trading weekday (Monday)
1
lastTradeDay
Last trading weekday (Friday)
5
dpoPeriod
DPO average length
3
dpoLevel
DPO threshold
0.1
repulsePeriod
Repulse smoothing length
3
repulseLevel
Repulse threshold
0.1
stopLossPct
Protective stop, percent
1
takeProfitPct
Profit target, percent
3

Every run

Markets and timeframes tested

MarketTimeframePFTradesWin %NetMax DD
EUR/USDBest run2 min2.87 10453.85128,475 USD-7,141
EUR/USD3 minn/a 6955.0789,267 USD-5,801
EUR/USD5 minn/a 4944.9038,766 USD-14,279
EUR/USD10 minn/a 2343.4816,536 USD-5,776
EUR/USD15 minn/a 1353.8515,969 USD-7,247
Dow JonesDailyn/a 2,57531.8113,132 EUR-6,706
DAX 404 hoursn/a 4,29536.326,778 EUR-4,670
EUR/USD1 hourn/a 366.675,589 USD-1,450
DAX 40Dailyn/a 1,87433.725,115 EUR-4,090
EUR/USD4 hoursn/a 1100.003,518 USD-0.00
GoldDailyn/a 2,37529.431,825 EUR-1,032

Charts

Results by run

Net profit against max drawdown

Net profitMax drawdown
0-20K-10K100K200KEUR/USD · 2 minEUR/USD · 3 minEUR/USD · 5 minEUR/USD · 10 minEUR/USD · 15 minDow Jones · DailyDAX 40 · 4 hoursEUR/USD · 1 hourDAX 40 · DailyEUR/USD · 4 hoursGold · Daily

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.

// ============================================================
// Repulse DPO
// ProRealAlgos Strategy Library  |  prorealalgos.com
// Type: Momentum
// Direction: Long only
// Timeframe tested: 2 minutes
// ============================================================

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

// --- Parameters ---
positionSize = 1       // contracts per trade
firstTradeDay = 1      // Monday
lastTradeDay = 5       // Friday
dpoPeriod = 3          // DPO average length
dpoLevel = 0.1         // DPO must be above this
repulsePeriod = 3      // Repulse smoothing length
repulseLevel = 0.1     // Repulse must be above this
stopLossPct = 1        // protective stop, percent
takeProfitPct = 3      // profit target, percent

// --- Indicators ---
tradingDay = OpenDayOfWeek >= firstTradeDay AND OpenDayOfWeek <= lastTradeDay

// Detrended Price Oscillator, written out
dpoMA = Average[dpoPeriod](close)
dpoShift = ROUND(dpoPeriod / 2) + 1
dpoValue = close - dpoMA[dpoShift]

// Repulse, written out: buying pressure minus selling pressure
bullPressure = 100 * (3 * close - 2 * low - open) / close
bearPressure = 100 * (open + 2 * high - 3 * close) / close
repulseValue = ExponentialAverage[repulsePeriod](bullPressure) - ExponentialAverage[repulsePeriod](bearPressure)

17 more lines: the entry and exit rules.

Read this first

Known weaknesses

  • The best run has only 104 trades, and several EUR/USD runs have very few (23, 13, 3 and even 1 trade).
  • Results swing sharply by timeframe on EUR/USD, from 104 trades on 2 minutes to a single trade on 4 hours.
  • Profit factor is only recorded for the headline run. The rest come from sweep data.
  • On DAX 40 and Gold daily the win rate fell to around 30% (33.72% and 29.43%).

Indicators used

DPORepulse

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 it run automatically in ProOrder?

Yes, at 1 contract, long only, with the stop and target coded in.

Where was it tested?

EUR/USD 2 minutes led with profit factor 2.87 and USD 128,475.00. Dow Jones daily, DAX 40 4 hours and daily, and Gold daily were also profitable.

What risk comes with 1 contract?

The headline run had a max drawdown of USD 7,141.00. On DAX 40 4 hours it was EUR 4,670.10.

Why a 2 minute chart when the name says DAX 4 hours?

The sweep found the most profit on EUR/USD 2 minutes. The DAX 40 4 hour run still made EUR 6,777.70 over 4,295 trades.

Related

Strategies like this one

Seasonal Momentum Long

Uses the same indicator.

1.57 PF · 195 trades

Slow MACD Slope

Best run on the same market, EUR/USD.

6.80 PF · 7,305 trades

Candle Body Sum Intraday

A similar profit factor.

2.86 PF · 124 trades

Momentum entries need a plan around them. 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