
Cette stratégie est un système de trading de supertrend adaptatif basé sur l’apprentissage automatique. Il améliore la fiabilité des indicateurs SuperTrend traditionnels en intégrant le clustering de volatilité, la détection de tendance ATR adaptative et des mécanismes d’entrée et de sortie structurés. Le cœur de la stratégie consiste à classer la volatilité du marché grâce à des méthodes d’apprentissage automatique, à effectuer des transactions de suivi des tendances dans des environnements de marché appropriés et à utiliser des stop-loss et des take-profits dynamiques pour contrôler les risques.
La stratégie se compose de trois éléments clés : 1) Calcul adaptatif de SuperTrend basé sur l’ATR pour déterminer la direction de la tendance et les points de retournement ; 2) Regroupement de la volatilité basé sur l’algorithme K-means pour classer l’état du marché en trois catégories : élevé, moyen et faible. environnement de volatilité ; 3) des règles de trading différenciées en fonction de l’environnement de volatilité. Recherchez des opportunités de tendance dans un environnement de faible volatilité et restez prudent dans un environnement de forte volatilité. Le système capture les signaux d’inversion de tendance via les fonctions ta.crossunder et ta.crossover, et détermine la direction du trading en fonction de la relation positionnelle entre le prix et la ligne SuperTrend.
La stratégie crée un système intelligent de suivi des tendances en combinant des techniques d’apprentissage automatique avec des méthodes d’analyse technique traditionnelles. L’avantage principal de la stratégie réside dans son adaptabilité et ses capacités de contrôle des risques, qui permettent une identification intelligente des conditions du marché grâce au regroupement de la volatilité. Bien qu’il existe des risques tels que la sensibilité des paramètres, grâce à une optimisation et une amélioration continues, la stratégie devrait maintenir des performances stables dans divers environnements de marché. Il est recommandé aux traders de tester entièrement la sensibilité des paramètres lors de l’application en temps réel et d’effectuer une optimisation ciblée en fonction des caractéristiques spécifiques du marché.
/*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")