
Esta estrategia es un sistema de negociación de supertendencias adaptativo basado en el aprendizaje automático. Mejora la fiabilidad de los indicadores SuperTrend tradicionales al integrar la agrupación de volatilidad, la detección de tendencias ATR adaptativa y mecanismos de entrada y salida estructurados. El núcleo de la estrategia es clasificar la volatilidad del mercado a través de métodos de aprendizaje automático, realizar transacciones de seguimiento de tendencias en entornos de mercado apropiados y utilizar stop-loss y take-profit dinámicos para controlar los riesgos.
La estrategia consta de tres componentes clave: 1) Cálculo de SuperTrend adaptativo basado en ATR para determinar la dirección de la tendencia y los puntos de inflexión; 2) Agrupamiento de volatilidad basado en el algoritmo K-means para clasificar el estado del mercado en tres categorías: alta, media y baja. entorno de volatilidad ; 3) reglas comerciales diferenciadas en función del entorno de volatilidad. Busque oportunidades de tendencia en un entorno de baja volatilidad y mantengase cauteloso en un entorno de alta volatilidad. El sistema captura señales de inversión de tendencia a través de las funciones ta.crossunder y ta.crossover, y determina la dirección comercial en función de la relación posicional entre el precio y la línea SuperTrend.
La estrategia crea un sistema inteligente de seguimiento de tendencias combinando técnicas de aprendizaje automático con métodos tradicionales de análisis técnico. La principal ventaja de la estrategia radica en su adaptabilidad y capacidad de control de riesgos, lo que permite la identificación inteligente de las condiciones del mercado a través de la agrupación de la volatilidad. Si bien existen riesgos como la sensibilidad de los parámetros, a través de la optimización y mejora continuas, se espera que la estrategia mantenga un desempeño estable en diversos entornos de mercado. Se recomienda que los operadores prueben completamente la sensibilidad de los parámetros cuando apliquen en tiempo real y realicen una optimización específica en función de las características específicas del mercado.
/*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")