Join today
Strategies / Mean reversion / Storm Short PEMA HMA

Storm Short PEMA HMA: Shorting the First Dip in an Extended Rally

Storm Short looks for an uptrend that has run far: close above the PEMA (eight chained 50-period EMAs), which itself sits above the 100-period Hull average. It sells the first down close after an up close, if ATR(5) is above 40. Trades use a 2% stop and a 2% target, and skip Mondays, April and October.

Mean reversionShort onlySwingDAX 404 hours
n/aProfit factor
5,089Net profit EUR
53.89%Win rate
321Trades
-4,615Max drawdown
15.85Avg trade

Best run of 9. DAX 40, 4 hours, spread 3, from run sweeps:2026-09-23-DAX40-4h-opt.tsv:2.

Entry rules, short

  1. Close is above the PEMA (eight chained 50-period EMAs)
  2. PEMA is above the 100-period Hull moving average
  3. Members only
  4. ATR(5) is above 40
  5. Bar opens Tuesday to Friday and not in April or October

Exit rules

  1. Stop loss at 2% from entry
  2. Members only

Test conditions

PeriodUp to 2026-09-23
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-24

Parameters

positionSize
Contracts per trade
1
pemaPeriod
EMA length inside the PEMA
50
hullPeriod
Hull moving average length
100
atrPeriod
ATR length for the volatility filter
5
atrMinimum
Only trade when ATR is above this
40
skipMonthA
No trades in April
4
skipMonthB
No trades in October
10
firstTradeDay
Trade from Tuesday
2
lastTradeDay
To Friday
5
stopLossPct
Protective stop, percent of entry price
2
takeProfitPct
Target, percent of entry price
2

Every run

Markets and timeframes tested

MarketTimeframePFTradesWin %NetMax DD
DAX 40Best run4 hoursn/a 32153.895,089 EUR-4,615
FTSE 100Dailyn/a 11557.392,066 EUR-1,127
FTSE 1001 hourn/a 7757.141,153 EUR-926
FTSE 10015 minn/a 1968.42819 EUR-351
Gold10 minn/a 2100.00199 EUR-46.10
S&P 50030 minn/a 771.43178 EUR-78.70
Gold15 minn/a 1100.00103 EUR-15.60
Gold5 minn/a 1100.0097.90 EUR-64.20
Gold3 minn/a 1100.0097.60 EUR-78.70

Charts

Results by run

Net profit against max drawdown

Net profitMax drawdown
0-5K-3K5K10KDAX 40 · 4 hoursFTSE 100 · DailyFTSE 100 · 1 hourFTSE 100 · 15 minGold · 10 minS&P 500 · 30 minGold · 15 minGold · 5 minGold · 3 min

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.

// ============================================================
// Storm Short PEMA HMA
// ProRealAlgos Strategy Library  |  prorealalgos.com
// Type: Mean reversion
// Direction: Short only
// Timeframe tested: 4 hours
// ============================================================

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

// --- Parameters ---
positionSize = 1          // contracts per trade
pemaPeriod = 50           // EMA length inside the PEMA
hullPeriod = 100          // Hull moving average length
atrPeriod = 5             // ATR length for the volatility filter
atrMinimum = 40           // only trade when ATR is above this
skipMonthA = 4            // no trades in April
skipMonthB = 10           // no trades in October
firstTradeDay = 2         // trade from Tuesday
lastTradeDay = 5          // to Friday
stopLossPct = 2           // protective stop, percent of entry price
takeProfitPct = 2         // target, percent of entry price

// --- Indicators ---
// PEMA: eight chained EMAs combined with binomial weights to cut lag
emaOne = ExponentialAverage[pemaPeriod](close)
emaTwo = ExponentialAverage[pemaPeriod](emaOne)
emaThree = ExponentialAverage[pemaPeriod](emaTwo)
emaFour = ExponentialAverage[pemaPeriod](emaThree)
emaFive = ExponentialAverage[pemaPeriod](emaFour)
emaSix = ExponentialAverage[pemaPeriod](emaFive)
emaSeven = ExponentialAverage[pemaPeriod](emaSix)
emaEight = ExponentialAverage[pemaPeriod](emaSeven)
pemaValue = (8 * emaOne) - (28 * emaTwo) + (56 * emaThree) - (70 * emaFour) + (56 * emaFive) - (28 * emaSix) + (8 * emaSeven) - emaEight

hullMA = WeightedAverage[ROUND(SQRT(hullPeriod))](2 * WeightedAverage[ROUND(hullPeriod / 2)](close) - WeightedAverage[hullPeriod](close))

atrValue = AverageTrueRange[atrPeriod](close)

tradingWindow = OpenMonth <> skipMonthA AND OpenMonth <> skipMonthB AND OpenDayOfWeek >= firstTradeDay AND OpenDayOfWeek <= lastTradeDay

11 more lines: the entry and exit rules.

Read this first

Known weaknesses

  • Several runs rest on almost nothing: Gold on 3, 5 and 15 minutes had 1 trade each, and Gold 10 minutes had 2.
  • The headline DAX 40 4 hour run had a 4,615.10 EUR drawdown against 5,089.30 EUR of profit.
  • Short only. It sells into strength, so a strong bull run can produce a string of stop-outs.
  • Profit factor was not recorded because only sweep data exists.

Indicators used

EMAHull MAATR

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 Storm Short run in ProOrder?

Yes, it is fully automated with a fixed 2% stop and target. The rewritten code has not been compile checked yet, so test in demo first.

Which markets was it tested on?

DAX 40 4 hours made 5,089.30 EUR over 321 trades. FTSE 100 Daily made 2,065.60 EUR, and S&P 500 and Gold produced only a handful of trades.

What drawdown came with 1 contract?

With 1 contract and a 3 point spread, DAX 40 4 hours had a max drawdown of 4,615.10 EUR.

Why the 4 hour chart?

The ATR(5) filter of 40 needs bars with real range, which the 4 hour DAX 40 chart delivers. On short Gold charts it barely triggered.

Related

Strategies like this one

Monday Dip Buy

Uses the same indicator.

n/a PF · 146 trades

Buy After Price Fall

Best run on the same market, DAX 40.

1.88 PF · 312 trades

ATR Band

Also a mean reversion strategy.

10.31 PF · 53 trades

Join the ProRealAlgos waitlist to see how short systems balance a long book.

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