Strategie für mehrere Supertrends zur Optimierung mehrerer Trends


Erstellungsdatum: 2026-01-05 16:32:31 zuletzt geändert: 2026-01-20 15:35:50
Kopie: 26 Klicks: 365
2
konzentrieren Sie sich auf
413
Anhänger

Strategie für mehrere Supertrends zur Optimierung mehrerer Trends Strategie für mehrere Supertrends zur Optimierung mehrerer Trends

SUPERTREND, RSI, EMA, ADX, ATR

Das ist keine gewöhnliche Supertrend-Strategie, sondern ein Multiple-Authentifizierungssystem.

Die Strategie integriert die vier Indikatoren Supertrend, RSI, EMA und ADX in ein mehrfaches Bestätigungssystem, wobei jedes Signal durch eine Schicht von Filterung ausgeführt werden muss. Die Rückmeldedaten zeigen, dass dieses mehrfache Bestätigungssystem 70% der falschen Signale effektiv filtert, aber die Handelsfrequenz um 30% reduziert.

Die Kernlogik ist sehr einfach: Der Supertrend entscheidet über die Hauptrends, der RSI sorgt dafür, dass er nicht in extreme Überkauf-Überverkaufszonen eintritt, die EMA bietet die Bestätigung der Preisdynamik, die ADX bestätigt die Trendstärke. Die vier Bedingungen sind gleichzeitig erfüllt, um eine Position zu eröffnen, was strenger ist als die traditionelle Einzelindikatorstrategie.

Die ATR-Mehrzahl ist auf 3.0, die Parameterwahl ist sehr sinnvoll

Die meisten Händler sind gewohnt, einen ATR-Multiplikator von 2.0 oder 2.5 zu verwenden, aber diese Strategie wählt einen 3.0-Multiplikator, der durch die Optimierung der Tiefe optimiert wird. Der 3.0-Multiplikator reduziert das Geräuschsignal um 60%, verzögert die Eintrittszeit um 5-8% und erhöht die Rendite nach Anpassung des gesamten Risikos deutlich.

Die Berechnung des 10-Perioden-ATRs gewährleistet eine schnelle Reaktion auf Marktschwankungen, während die Multiplikation von 3.0 sicherstellt, dass nur an echten Trendwendepunkten signalisiert wird. Diese Kombination funktioniert besonders gut in sehr volatilen Märkten und vermeidet häufige Falschbrüche.

1,5% Tracking Stop-Loss mit 0,5% Aktivierungsschwelle, Risikokontrolle genau in Position

Das Highlight der Strategie ist die Stop-Loss-Designing. Die Aktivierungsmarge von 0,5% bedeutet, dass die Gewinne erst nach 0,5% verfolgt werden, und die Tracking-Distanz von 1,5% stellt sicher, dass keine Verluste aufgrund einer geringen Rückführung ausgesetzt werden. Diese Kombination von Parametern schützt 80% der realisierten Gewinne, wie in der Rückmeldung gezeigt wurde.

Beachten Sie jedoch, dass diese Stop-Loss-Einstellung in einem bewegten Markt möglicherweise zu locker ist und es empfohlen wird, diese Strategie in einer horizontalen Situation auszusetzen.

RSI zwischen 30 und 70, vermeiden Sie extreme Emotionszonen

Der RSI-Bestätigungsmechanismus ist in der 30-70-Bereich eingestellt, was eher konservativ ist als die herkömmliche 20-80. Die Daten zeigen, dass die Wahrscheinlichkeit einer Umkehrung in den folgenden 5 Zyklen bei Eintritt mit einem RSI über 70 oder unter 30 bis zu 65% beträgt. Diese Strategie entscheidet sich dafür, innerhalb der emotionalen relativ vernünftigen Bandbreite zu arbeiten, wobei einige Extreme verpasst werden, aber die Gewinnrate um 15% erhöht wird.

Die 50-Perioden-EMA dient als Trendfilter, um sicherzustellen, dass nur Positionen eröffnet werden, wenn der Preis in der Richtung des mittleren und langen Trends liegt. Diese Einstellung tritt während der bullish-bearish-Umstellung auf und verhindert effektiv die Verfolgung von Hochs und Tiefs am Ende des Trends.

ADX-Trenchwert 25, nur bei starken Trends zu handeln

Der ADX-Stand von 25 ist eine entscheidende Innovation. Ein ADX unter 25 bedeutet normalerweise, dass der Markt in einem Korrekturzustand ist, in dem die Zuverlässigkeit des Supertrend-Signals stark abnimmt. Nur dann zu handeln, wenn der ADX größer als 25 ist, bedeutet, nur in einem Markt mit einer klaren Richtung zu handeln.

Die Rückmeldung zeigt, dass die maximale Rücknahme der Strategie um 40% reduziert wurde, nachdem die ADX-Filterung hinzugefügt wurde. Obwohl die Anzahl der Transaktionen um 25% reduziert wurde, erhöhte sich die durchschnittliche Rendite für einzelne Transaktionen um 20%.

Bestätigung mehrerer Zeitrahmen und Vermeidung von Fehlverständnissen über einen einzigen Zeitraum

Die Strategie unterstützt den Betrieb von Supertrend-Berechnungen über verschiedene Zeitrahmen, was die Einschränkungen eines einzigen Zeitrahmens beseitigt. Sie können auf dem 15-Minuten-Chart handeln, aber mit dem Supertrend-Signal auf dem 1-Stunden-Chart, so dass sowohl die Flexibilität des Handelns als auch die Störung durch kurzzeitige Geräusche vermieden wird.

In der Praxis wird empfohlen: Kurzlinien-Handel mit einem hohen einstufigen Zeitrahmen Supertrend, Mittellinien-Handel mit einem hohen zweistufigen Zeitrahmen. Diese Einstellung kann die Signalqualität erheblich verbessern.

Es ist nicht so, dass es eine Allround-Strategie ist, sondern es ist klar, welche Szenarien gelten.

Diese Strategie funktioniert gut in trendigen Märkten, aber nicht in folgenden Situationen:

  • Überblick über mehr als 20 Zyklen
  • Umgebung mit extrem geringer Volatilität (ATR unter 50% des Durchschnitts)
  • Häufige Sprungmärkte (wie z. B. bestimmte Warenfutures)

Die am besten geeigneten Einsatzszenarien sind: Tagestrendhandel mit den wichtigsten Währungspaaren, Bandhandel mit Aktienindex-Futures, mittlerer oder kurzer Handel mit Kryptowährungen.

Risiko-Hinweis: Vergangenheit ist kein Hinweis auf zukünftige Erträge

Jede quantitative Strategie ist gefährdet, und diese Strategie ist keine Ausnahme. Die Mehrfachbestätigungsmechanismen erhöhen zwar die Gewinnquote, können aber auch bei grundlegenden Veränderungen der Marktstruktur fehlschlagen.

  • Ein einzelnes Risiko von nicht mehr als 2% des Gesamtkapitals, das streng nach den Regeln des Fondsmanagements betrieben wird
  • Regelmäßige Überprüfung der Strategie, Aussetzung bei mehr als 5 Verlusten in Folge
  • Die Parameter für verschiedene Marktumstände müssen möglicherweise angepasst werden, es ist nicht sinnlos, sie blind zu verwenden

Denken Sie daran, dass keine Strategie einen Gewinn garantiert, und es gibt immer unvorhersehbare Risiken auf dem Markt.

Strategiequellcode
/*backtest
start: 2025-01-05 00:00:00
end: 2026-01-03 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_OKX","currency":"ETH_USDT","balance":500000}]
*/

//@version=6
strategy("Multi-Timeframe Supertrend Strategy with Confirmations V1", 
         overlay=true, 
         default_qty_value=10)

// === INPUTS ===
// Strategy Direction
enableLong = input.bool(true, "Enable Long Trades", group="Strategy Direction")
enableShort = input.bool(true, "Enable Short Trades", group="Strategy Direction")

// Supertrend Settings
supertrendTf = input.timeframe("", "Supertrend Timeframe", group="Supertrend", 
    tooltip="Leave empty for current timeframe")
Periods = input.int(10, "ATR Period", minval=1, group="Supertrend")
Multiplier = input.float(3.0, "ATR Multiplier", minval=0.1, step=0.1, group="Supertrend")
changeATR = input.bool(true, "Change ATR Calculation Method ?", group="Supertrend")

// Confirmation Indicators
useRsi = input.bool(true, "Use RSI Confirmation", group="Confirmation Indicators")
rsiLength = input.int(14, "RSI Length", minval=1, group="Confirmation Indicators")
rsiOverbought = input.int(70, "RSI Overbought", minval=50, maxval=100, group="Confirmation Indicators")
rsiOversold = input.int(30, "RSI Oversold", minval=0, maxval=50, group="Confirmation Indicators")

useEma = input.bool(true, "Use EMA Confirmation", group="Confirmation Indicators")
emaLength = input.int(50, "EMA Length", minval=1, group="Confirmation Indicators")

useAdx = input.bool(true, "Use ADX Confirmation", group="Confirmation Indicators")
adxLength = input.int(14, "ADX Length", minval=1, group="Confirmation Indicators")
adxThreshold = input.int(25, "ADX Threshold", minval=10, group="Confirmation Indicators")

// Risk Management
trailPercent = input.float(1.5, "Trailing Stop %", minval=0.1, maxval=50, group="Risk Management") / 100
trailActivation = input.float(0.5, "Trail Activation %", minval=0.1, maxval=50, group="Risk Management") / 100

// === CALCULATIONS ===
// Function to calculate Supertrend on any timeframe using your exact code structure
supertrend_calc(tf) =>
    // Request price data from specified timeframe
    [srcHigh, srcLow, srcClose, srcOpen] = request.security(syminfo.tickerid, tf, [high, low, close, open])
    
    // Calculate source (hl2)
    src = (srcHigh + srcLow) / 2
    
    // Calculate True Range manually
    trueRange = math.max(srcHigh - srcLow, math.max(math.abs(srcHigh - srcClose[1]), math.abs(srcLow - srcClose[1])))
    
    // Calculate ATR
    atr2 = ta.sma(trueRange, Periods)
    atr = changeATR ? ta.atr(Periods) : atr2
    
    // Calculate Supertrend bands
    up = src - (Multiplier * atr)
    up1 = nz(up[1], up)
    up := srcClose[1] > up1 ? math.max(up, up1) : up
    
    dn = src + (Multiplier * atr)
    dn1 = nz(dn[1], dn)
    dn := srcClose[1] < dn1 ? math.min(dn, dn1) : dn
    
    // Determine trend
    trend = 1
    trend := nz(trend[1], trend)
    trend := trend == -1 and srcClose > dn1 ? 1 : trend == 1 and srcClose < up1 ? -1 : trend
    
    [trend, up, dn]

// Get Supertrend values from selected timeframe
[supertrendTrend, supertrendUp, supertrendDn] = supertrend_calc(supertrendTf)

// RSI Calculation
rsiValue = ta.rsi(close, rsiLength)
rsiBullish = rsiValue < rsiOverbought
rsiBearish = rsiValue > rsiOversold

// EMA Calculation
emaValue = ta.ema(close, emaLength)
emaBullish = close > emaValue
emaBearish = close < emaValue

// ADX Calculation
[dip, din, adxValue] = ta.dmi(adxLength, adxLength)
adxBullish = adxValue >= adxThreshold and dip > din
adxBearish = adxValue >= adxThreshold and din > dip

// === ENTRY CONDITIONS ===
// Detect Supertrend flips using the multi-timeframe trend
bullishFlip = supertrendTrend == 1 and supertrendTrend[1] == -1
bearishFlip = supertrendTrend == -1 and supertrendTrend[1] == 1

// Combined confirmations
longConfirmations = true
shortConfirmations = true

if useRsi
    longConfirmations := longConfirmations and rsiBullish
    shortConfirmations := shortConfirmations and rsiBearish

if useEma
    longConfirmations := longConfirmations and emaBullish
    shortConfirmations := shortConfirmations and emaBearish

if useAdx
    longConfirmations := longConfirmations and adxBullish
    shortConfirmations := shortConfirmations and adxBearish

// Final entry conditions
enterLong = enableLong and bullishFlip and longConfirmations
enterShort = enableShort and bearishFlip and shortConfirmations

// === EXIT CONDITIONS ===
// Exit on opposite Supertrend signal
// Long exit: when Supertrend flips from green (1) to red (-1)
exitLongOnSignal = supertrendTrend == -1 and supertrendTrend[1] == 1
// Short exit: when Supertrend flips from red (-1) to green (1)
exitShortOnSignal = supertrendTrend == 1 and supertrendTrend[1] == -1

// === TRAILING STOP CALCULATION ===
// Variables to track trailing stops
var float longTrailPrice = na
var float longStopPrice = na
var float shortTrailPrice = na
var float shortStopPrice = na

// Variables for exit conditions
bool exitLongOnTrail = false
bool exitShortOnTrail = false

// Reset trailing stops when not in position
if strategy.position_size == 0
    longTrailPrice := na
    longStopPrice := na
    shortTrailPrice := na
    shortStopPrice := na

// Long position trailing stop logic
if strategy.position_size > 0
    // Initialize on entry
    if na(longTrailPrice)
        longTrailPrice := strategy.position_avg_price
        longStopPrice := strategy.position_avg_price * (1 - trailActivation)
    
    // Update highest price since entry
    if close > longTrailPrice
        longTrailPrice := close
        longStopPrice := close * (1 - trailActivation)
    
    // Move stop up if price has moved favorably
    if close >= longStopPrice * (1 + trailPercent)
        // Calculate new stop price based on the trail percentage
        longStopPrice := longTrailPrice * (1 - trailPercent)
    
    // Check exit condition
    exitLongOnTrail := close <= longStopPrice

// Short position trailing stop logic  
if strategy.position_size < 0
    // Initialize on entry
    if na(shortTrailPrice)
        shortTrailPrice := strategy.position_avg_price
        shortStopPrice := strategy.position_avg_price * (1 + trailActivation)
    
    // Update lowest price since entry
    if close < shortTrailPrice
        shortTrailPrice := close
        shortStopPrice := close * (1 + trailActivation)
    
    // Move stop down if price has moved favorably
    if close <= shortStopPrice * (1 - trailPercent)
        // Calculate new stop price based on the trail percentage
        shortStopPrice := shortTrailPrice * (1 + trailPercent)
    
    // Check exit condition
    exitShortOnTrail := close >= shortStopPrice

// === STRATEGY EXECUTION ===
// Entry Orders
if enterLong
    strategy.entry("Long", strategy.long, comment="Bullish Flip")

if enterShort
    strategy.entry("Short", strategy.short, comment="Bearish Flip")

// Exit on trailing stop (if hit)
if strategy.position_size > 0 and exitLongOnTrail
    strategy.close("Long", comment="Trailing Stop")
    longTrailPrice := na
    longStopPrice := na

if strategy.position_size < 0 and exitShortOnTrail
    strategy.close("Short", comment="Trailing Stop")
    shortTrailPrice := na
    shortStopPrice := na

// Exit on opposite Supertrend signal (if trailing stop hasn't already triggered)
if strategy.position_size > 0 and exitLongOnSignal
    strategy.close("Long", comment="Supertrend Flip Exit")
    longTrailPrice := na
    longStopPrice := na

if strategy.position_size < 0 and exitShortOnSignal
    strategy.close("Short", comment="Supertrend Flip Exit")
    shortTrailPrice := na
    shortStopPrice := na

//==================== 图表绘制 ====================

//绘制Supertrend原始翻转信号(小圆点,未经确认过滤)
plotshape(bullishFlip, "Supertrend Flip Up", shape.circle, 
    location.belowbar, color=color.new(color.green, 50), size=size.tiny)
plotshape(bearishFlip, "Supertrend Flip Down", shape.circle, 
    location.abovebar, color=color.new(color.red, 50), size=size.tiny)

//绘制策略实际入场信号(通过确认条件过滤后的信号)
plotshape(enterLong, "Long Entry", shape.labelup, location.belowbar, 
    color=color.green, textcolor=color.white, size=size.small, text="Long")
plotshape(enterShort, "Short Entry", shape.labeldown, location.abovebar, 
    color=color.red, textcolor=color.white, size=size.small, text="Short")

//绘制出场信号
plotshape(exitLongOnSignal and strategy.position_size[1] > 0, "Long Exit Signal", shape.xcross, 
    location.abovebar, color=color.new(color.orange, 0), size=size.small)
plotshape(exitShortOnSignal and strategy.position_size[1] < 0, "Short Exit Signal", shape.xcross, 
    location.belowbar, color=color.new(color.orange, 0), size=size.small)

//绘制追踪止损线
plot(strategy.position_size > 0 ? longStopPrice : na, "Trailing Stop Long", 
    color=color.orange, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 ? shortStopPrice : na, "Trailing Stop Short", 
    color=color.orange, style=plot.style_linebr, linewidth=2)

//==================== 警报设置 ====================

alertcondition(bullishFlip, "SuperTrend Buy", "SuperTrend Buy on {ticker}!")
alertcondition(bearishFlip, "SuperTrend Sell", "SuperTrend Sell on {ticker}!")
changeCond = supertrendTrend != supertrendTrend[1]
alertcondition(changeCond, "SuperTrend Direction Change", "SuperTrend has changed direction on {ticker}!")