Diese Strategie ist ein maschinelles Lern-basiertes adaptives SuperTrend-Handelssystem, das die Zuverlässigkeit des traditionellen SuperTrend-Indikators durch die Integration von Volatilitätsclustering, adaptive ATR-Trenddetektion und strukturierte Ein-/Ausgangsmechanismen verbessert.
Die Strategie besteht aus drei Schlüsselkomponenten: 1) Adaptive SuperTrend-Berechnung basierend auf ATR zur Bestimmung der Trendrichtung und der Wendepunkte; 2) K-Mittel-basierte Volatilitätsclustering, die Marktzustände in Umgebungen mit hoher, mittlerer und niedriger Volatilität kategorisiert; 3) Differenzierte Handelsregeln basierend auf Volatilitätsumgebungen. Es sucht Trending-Möglichkeiten in Umgebungen mit geringer Volatilität, während es bei hoher Volatilität vorsichtig ist. Das System erfasst Trendumkehrsignale mithilfe von ta.crossunder und ta.crossover-Funktionen in Kombination mit der Preisposition in Bezug auf die SuperTrend-Linie.
Diese Strategie schafft ein intelligentes Trend-Folge-System durch die Kombination von Machine-Learning-Techniken mit traditionellen technischen Analysemethoden. Seine Hauptvorteile liegen in seiner Anpassungsfähigkeit und Risikokontrolle Fähigkeiten, intelligente Marktzustandserkennung durch Volatilitätsclustering zu erreichen. Während Risiken wie Parameterempfindlichkeit bestehen, kann kontinuierliche Optimierung und Verfeinerung helfen, eine stabile Leistung in verschiedenen Marktumgebungen aufrechtzuerhalten. Händlern wird geraten, die Parameterempfindlichkeit gründlich zu testen und auf der Grundlage spezifischer Marktmerkmale zu optimieren, wenn die Strategie im Live-Handel umgesetzt wird.
/*backtest start: 2025-01-09 00:00:00 end: 2025-01-16 00:00:00 period: 10m basePeriod: 10m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}] */ //@version=5 strategy("Adaptive SuperTrend Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=200) // Import Indicator Components atr_len = input.int(10, "ATR Length", group="SuperTrend Settings") fact = input.float(3, "SuperTrend Factor", group="SuperTrend Settings") training_data_period = input.int(100, "Training Data Length", group="K-Means Settings") // Volatility Clustering volatility = ta.atr(atr_len) upper = ta.highest(volatility, training_data_period) lower = ta.lowest(volatility, training_data_period) high_volatility = lower + (upper-lower) * 0.75 medium_volatility = lower + (upper-lower) * 0.5 low_volatility = lower + (upper-lower) * 0.25 cluster = volatility >= high_volatility ? 0 : volatility >= medium_volatility ? 1 : 2 // SuperTrend Calculation pine_supertrend(factor, atr) => src = hl2 upperBand = src + factor * atr lowerBand = src - factor * atr prevLowerBand = nz(lowerBand[1]) prevUpperBand = nz(upperBand[1]) lowerBand := lowerBand > prevLowerBand or close[1] < prevLowerBand ? lowerBand : prevLowerBand upperBand := upperBand < prevUpperBand or close[1] > prevUpperBand ? upperBand : prevUpperBand int _direction = na float superTrend = na prevSuperTrend = superTrend[1] if na(atr[1]) _direction := 1 else if prevSuperTrend == prevUpperBand _direction := close > upperBand ? -1 : 1 else _direction := close < lowerBand ? 1 : -1 superTrend := _direction == -1 ? lowerBand : upperBand [superTrend, _direction] [ST, dir] = pine_supertrend(fact, volatility) // Entry Conditions longEntry = ta.crossunder(dir, 0) and cluster > 1 and close > ST shortEntry = ta.crossover(dir, 0) and cluster == 0 and close < ST // Stop Loss & Take Profit atr_mult = input.float(2, "ATR Multiplier for SL/TP", group="Risk Management") sl = atr_mult * ta.atr(atr_len) longStopLoss = close - sl longTakeProfit = close + (sl * 1.5) shortStopLoss = close + sl shortTakeProfit = close - (sl * 1.5) // Execute Trades if longEntry strategy.entry("Long", strategy.long) strategy.exit("Take Profit", from_entry="Long", limit=longTakeProfit, stop=longStopLoss) if shortEntry strategy.entry("Short", strategy.short) strategy.exit("Take Profit", from_entry="Short", limit=shortTakeProfit, stop=shortStopLoss) // Plot SuperTrend plot(ST, title="SuperTrend", color=dir > 0 ? color.green : color.red, linewidth=2) // Alerts alertcondition(longEntry, title="Long Entry Signal", message="Buy Signal - Trend Shift Up") alertcondition(shortEntry, title="Short Entry Signal", message="Sell Signal - Trend Shift Down")