Simple DAX RSI Strategy

A long-only RSI momentum strategy for the DAX that buys strength rather than fading it, with true fixed-cash risk sizing.

Most RSI strategies fade extremes — buy oversold, sell overbought. This one does the opposite. It buys when RSI shows genuine strength, on the premise that rising momentum tends to continue rather than immediately reverse. Designed specifically for the DAX with true fixed-cash risk sizing, so position size adapts to stop distance and every trade risks the same absolute amount.

Most traders first learn RSI as a mean-reversion tool: above 70 or 80 is "overbought", below 30 is "oversold", so the default instinct is to fade extremes.

I do not think that is the best way to use RSI on index markets.

On instruments like the DAX, strong upside momentum often persists longer than people expect. In those conditions, an RSI push above a high threshold is not necessarily a warning sign. It can simply mean buyers are in control and price is accelerating. That is the logic behind this strategy.

This is a very simple long-only momentum model. When RSI(9) crosses above 80 on a confirmed 1-hour bar, the strategy enters long. It then manages the trade with a fixed stop-loss and take-profit in points.

The key improvement is the risk model

A lot of simple examples say they use "fixed risk" when they actually mean fixed size. Those are not the same. Fixed size means every trade uses the same contract quantity. Fixed risk means the position size changes so that the cash amount you lose at the stop stays broadly constant from trade to trade.

That distinction matters. If your stop is 50 points wide and each point is worth more or less depending on the instrument or contract size, then using a hardcoded quantity can distort the strategy badly. True fixed-risk sizing is a much better fit for testing and much more consistent with how a real system should be evaluated.

Why this strategy is long-only

For broad equity indices, I generally prefer to start by testing long-only variants first.

That is not because short trades can never work. They can. But many index markets have a structural upside bias over time, and bullish momentum phases often last longer than bearish squeezes or short-lived pullbacks. If a strategy is built around buying strength, it usually makes sense to test it first in the direction the market tends to reward more consistently.

That is exactly what this strategy does.

Why RSI(9) and 80

The settings here are intentionally aggressive.

A 9-period RSI is more responsive than the classic 14-period version. That makes it better suited to catching momentum bursts rather than waiting for a slower confirmation. The threshold of 80 is also deliberate. We are not trying to catch every small push higher. We only want moments where momentum is clearly strong enough to justify entry.

This gives the indicator a very specific role:

How it works

  1. Calculate RSI(9) on the chart.
  2. Wait for RSI to cross above 80 on a confirmed bar.
  3. Enter a long trade only.
  4. Set the stop-loss and take-profit in DAX points.
  5. Calculate the position size from a fixed cash risk amount.

That last step is the important one.

The sizing formula is:

> position size = fixed cash risk / (stop distance in points × cash value per point per contract)

So if you want to risk 100 units of currency per trade, your stop is 50 points, and each point is worth 1 unit per contract, the strategy will size the trade at 2 contracts.

If the stop remains 50 points but the point value is larger, the size will reduce accordingly. That is what fixed risk is supposed to do.

// This Source Code Form is subject to the terms of the Mozilla Public
// License, v. 2.0. If a copy of the MPL was not distributed with this
// file, You can obtain one at https://mozilla.org/MPL/2.0/.
// Copyright (c) 2026 - BuildTradingStrategies.com / TradeXecution.com

//@version=6
strategy(
     "Simple DAX RSI Strategy",
     overlay=true,
     pyramiding=0,
     initial_capital=10000,
     process_orders_on_close=true
)

// ── Inputs ─────────────────────────────────────────────
rsiLen       = input.int(9, "RSI Length", minval=2)
rsiHigh      = input.float(80.0, "RSI Upper Threshold", minval=50, maxval=100)

tpPoints     = input.float(480.0, "Take Profit (points)", minval=0.1, step=0.1)
slPoints     = input.float(60.0, "Stop Loss (points)", minval=0.1, step=0.1)

riskAmount   = input.float(100.0, "Fixed Cash Risk Per Trade", minval=0.01, step=0.01)
pointValue   = input.float(1.0, "Cash Value Per Point Per Contract", minval=0.0001, step=0.01)
qtyStep      = input.float(1.0, "Quantity Step", minval=0.0001, step=0.0001)
minQty       = input.float(1.0, "Minimum Quantity", minval=0.0001, step=0.0001)

// ── RSI Calculation ───────────────────────────────────
rsiValue = ta.rsi(close, rsiLen)

// ── Long Entry Logic ──────────────────────────────────
// Long-only momentum entry:
// enter when RSI crosses above the threshold on a confirmed bar
longEntry = ta.crossover(rsiValue, rsiHigh) and barstate.isconfirmed and strategy.position_size <= 0

// ── Fixed Cash Risk Position Sizing ───────────────────
// Risk per 1 contract = stop distance in points × cash value per point
riskPerContract = slPoints * pointValue

// Raw quantity required to keep cash risk fixed
rawQty = riskPerContract > 0 ? riskAmount / riskPerContract : na

// Round down to broker quantity step
sizedQty = not na(rawQty) ? math.floor(rawQty / qtyStep) * qtyStep : na

// Only trade if we can still stay within risk budget and meet minimum quantity
canTrade = not na(sizedQty) and sizedQty >= minQty

// ── Execute Entry ─────────────────────────────────────
if longEntry and canTrade
    strategy.entry("RSI Long", strategy.long, qty=sizedQty)

// ── Exit Logic ────────────────────────────────────────
// strategy.exit profit/loss values are in ticks
tpTicks = tpPoints / syminfo.mintick
slTicks = slPoints / syminfo.mintick

strategy.exit("RSI Long Exit", "RSI Long", profit=tpTicks, loss=slTicks)

// ── Visuals ───────────────────────────────────────────
plotshape(longEntry and canTrade, title="Long Signal", style=shape.triangleup, location=location.belowbar, size=size.small, color=color.green, text="RSI Long")
plotshape(longEntry and not canTrade, title="Risk Too Small", style=shape.xcross, location=location.abovebar, size=size.tiny, color=color.red, text="Min Qty")

// Optional RSI reference markers for convenience
hline(rsiHigh, "RSI Threshold", color=color.orange, linestyle=hline.style_dashed, display=display.all)
plot(rsiValue, "RSI", color=color.new(color.blue, 0), display=display.pane)

Why the risk model matters more than the signal

The entry here is deliberately simple. That is fine.

Simple entries can work if the risk model is sensible. In fact, it is often easier to improve a simple strategy by fixing the risk model than by endlessly adding more indicators. A good fixed-risk framework gives you cleaner backtest data, more meaningful losing streaks, and a much better idea of whether the strategy is genuinely tradable.

If the signal has some edge, proper sizing gives it a fair chance to show up in the results. If the signal has no edge, fixed risk helps you discover that without distorting the outcome through inconsistent exposure.

Backtesting considerations

A strategy like this should be tested carefully.

Use confirmed bars. Do not allow the strategy to trigger intrabar unless that is genuinely how you plan to execute it live. Momentum signals can appear during the bar and disappear before the close.

Match the point value to your broker or instrument specification. This is essential. A fixed cash-risk model is only as accurate as the point-value assumption used in the sizing formula.

Test across multiple market environments. A momentum strategy can look excellent during persistent trends and much less convincing during rotational or choppy periods.

Look at clusters of losses, not just the equity curve. If the strategy struggles, it will often do so by generating repeated failed breakouts rather than by one dramatic collapse. That tells you more about what needs fixing.

Sensible next improvements

This strategy is intentionally basic. Good next steps would be:

But I would not add those immediately.

The point of a strategy like this is to start with a clean, testable base model. First find out whether buying RSI strength on the DAX has value. Then improve only the part the backtest shows is weak.