
Diese Strategie ist ein adaptives Supertrend-Handelssystem, das auf maschinellem Lernen basiert. Es verbessert die Zuverlässigkeit traditioneller SuperTrend-Indikatoren durch die Integration von Volatilitätsclusterung, adaptiver ATR-Trenderkennung und strukturierten Ein- und Ausstiegsmechanismen. Der Kern der Strategie besteht darin, die Marktvolatilität durch Methoden des maschinellen Lernens zu klassifizieren, Trendverfolgungstransaktionen in geeigneten Marktumgebungen durchzuführen und dynamische Stop-Loss- und Take-Profit-Aufträge zur Kontrolle der Risiken einzusetzen.
Die Strategie besteht aus drei Hauptkomponenten: 1) Adaptive SuperTrend-Berechnung basierend auf ATR zur Bestimmung der Trendrichtung und Wendepunkte; 2) Volatilitätsclusterung basierend auf dem K-Means-Algorithmus zur Einteilung des Marktstatus in drei Kategorien: hoch, mittel und niedrig. Volatilitätsumgebung ; 3) differenzierte Handelsregeln basierend auf dem Volatilitätsumfeld. Suchen Sie in einem Umfeld geringer Volatilität nach Trendchancen und bleiben Sie in einem Umfeld hoher Volatilität vorsichtig. Das System erfasst Trendumkehrsignale durch die Funktionen ta.crossunder und ta.crossover und bestimmt die Handelsrichtung basierend auf der Positionsbeziehung zwischen Preis und SuperTrend-Linie.
Die Strategie erstellt ein intelligentes Trendfolgesystem, indem sie Techniken des maschinellen Lernens mit traditionellen Methoden der technischen Analyse kombiniert. Der Hauptvorteil der Strategie liegt in ihrer Anpassungsfähigkeit und ihren Risikokontrollmöglichkeiten, die eine intelligente Identifizierung der Marktbedingungen durch Volatilitätsclusterung ermöglichen. Zwar bestehen Risiken, beispielsweise eine Parametersensitivität, doch ist durch kontinuierliche Optimierung und Verbesserung zu erwarten, dass die Strategie in unterschiedlichen Marktumgebungen eine stabile Leistung aufrechterhält. Händlern wird empfohlen, die Parametersensitivität bei der Anwendung in Echtzeit vollständig zu testen und eine gezielte Optimierung basierend auf den spezifischen Merkmalen des Marktes durchzuführen.
/*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")