
Die Strategie ist ein selbstappierendes Handelssystem, das Trendverfolgung und Split-Trading kombiniert. Sie arbeitet mit mehreren technischen Indikatoren zusammen und wechselt flexibel zwischen verschiedenen Handelsmodellen in verschiedenen Marktumgebungen. Die Strategie verwendet Indikatoren wie Supertrend, Moving Average, ADX, RSI und Bollinger Bands, um Marktzustände zu identifizieren und Handelssignale zu ermitteln, während sie in Verbindung mit VWAP für Preisreferenzen verwendet wird und ein Stop-Loss-Mechanismus zur Risikokontrolle eingerichtet wird.
Die Kernlogik der Strategie besteht aus zwei Teilen: Trend-Tracking und Split-Trading. In Trendmärkten (beurteilt durch ADX> 25) erzeugt die Strategie Signale basierend auf der Supertrend-Richtung, EMA-Kreuzungen und VWAP-Positionen.
Es handelt sich um eine durchdachte, logisch integrierte Strategie. Durch die Kombination mehrerer Indikatoren und die Umschaltung von Modellen kann eine gewisse Anpassungsfähigkeit in verschiedenen Marktumgebungen beibehalten werden. Obwohl einige potenzielle Risiken bestehen, hat die Strategie durch vernünftige Risikokontrolle und kontinuierliche Optimierung einen guten praktischen Einsatzwert.
/*backtest
start: 2025-01-27 00:00:00
end: 2025-02-20 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("Nifty/BankNifty Multi-Strategy v2", overlay=true, margin_long=100, margin_short=100)
// ———— Inputs ———— //
// Supertrend
atrPeriod = input.int(10, "ATR Period")
supertrendMultiplier = input.float(2.0, "Supertrend Multiplier", step=0.1)
// EMA
ema20Period = input.int(20, "20 EMA Period")
ema50Period = input.int(50, "50 EMA Period")
// ADX/DMI
adxThreshold = input.int(25, "ADX Trend Threshold")
adxLength = input.int(14, "ADX Length")
// RSI
rsiLength = input.int(14, "RSI Length")
rsiOverbought = input.int(70, "RSI Overbought")
rsiOversold = input.int(30, "RSI Oversold")
// Bollinger Bands
bbLength = input.int(20, "BB Length")
bbStdDev = input.float(2.0, "BB Std Dev", step=0.1)
// Stop-Loss
stopLossPerc = input.float(1.0, "Stop-Loss %", step=0.1)
// ———— Calculations ———— //
// Supertrend
[supertrend, direction] = ta.supertrend(supertrendMultiplier, atrPeriod)
// EMAs
ema20 = ta.ema(close, ema20Period)
ema50 = ta.ema(close, ema50Period)
// ADX via DMI (corrected)
[dip, din, adx] = ta.dmi(adxLength, adxLength) // ta.dmi(diLength, adxSmoothing)
// RSI
rsi = ta.rsi(close, rsiLength)
// Bollinger Bands
basis = ta.sma(close, bbLength)
upperBB = basis + ta.stdev(close, bbLength) * bbStdDev
lowerBB = basis - ta.stdev(close, bbLength) * bbStdDev
// VWAP
vwapValue = ta.vwap(hlc3)
// ———— Strategy Logic ———— //
trendingMarket = adx > adxThreshold
// Trend-Following Strategy
emaBullish = ema20 > ema50
priceAboveVWAP = close > vwapValue
longConditionTrend = trendingMarket and direction < 0 and emaBullish and priceAboveVWAP
shortConditionTrend = trendingMarket and direction > 0 and not emaBullish and close < vwapValue
// Range-Bound Strategy
priceNearLowerBB = close <= lowerBB
priceNearUpperBB = close >= upperBB
longConditionRange = not trendingMarket and priceNearLowerBB and rsi < rsiOversold
shortConditionRange = not trendingMarket and priceNearUpperBB and rsi > rsiOverbought
// ———— Entries/Exits ———— //
if (longConditionTrend or longConditionRange)
strategy.entry("Long", strategy.long)
stopPriceLong = strategy.position_avg_price * (1 - stopLossPerc / 100)
strategy.exit("Exit Long", "Long", stop=stopPriceLong)
if (shortConditionTrend or shortConditionRange)
strategy.entry("Short", strategy.short)
stopPriceShort = strategy.position_avg_price * (1 + stopLossPerc / 100)
strategy.exit("Exit Short", "Short", stop=stopPriceShort)
// Exit on Supertrend flip or RSI extremes
if (direction > 0 or rsi >= rsiOverbought)
strategy.close("Long")
if (direction < 0 or rsi <= rsiOversold)
strategy.close("Short")
// ———— Visualization ———— //
plot(supertrend, "Supertrend", color = direction < 0 ? color.green : color.red)
plot(ema20, "20 EMA", color.blue)
plot(ema50, "50 EMA", color.orange)
plot(vwapValue, "VWAP", color.purple)
plot(upperBB, "Upper BB", color.gray)
plot(lowerBB, "Lower BB", color.gray)