Esta estrategia es un sistema de negociación de SuperTrend adaptativo basado en aprendizaje automático que mejora la confiabilidad del indicador tradicional de SuperTrend mediante la integración de agrupación de volatilidad, detección de tendencia ATR adaptativa y mecanismos de entrada / salida estructurados.
La estrategia consta de tres componentes clave: 1) El cálculo de SuperTendencia Adaptativa basado en ATR para determinar la dirección de la tendencia y los puntos de inflexión; 2) El agrupamiento de volatilidad basado en K-medios que categoriza los estados del mercado en entornos de alta, media y baja volatilidad; 3) Reglas de negociación diferenciadas basadas en entornos de volatilidad. Busca oportunidades de tendencia en entornos de baja volatilidad mientras mantiene la cautela en condiciones de alta volatilidad. El sistema captura señales de inversión de tendencia utilizando las funciones ta.crossunder y ta.crossover, combinadas con la posición de precio en relación con la línea SuperTendencia.
Esta estrategia crea un sistema inteligente de seguimiento de tendencias mediante la combinación de técnicas de aprendizaje automático con métodos de análisis técnico tradicionales. Sus principales ventajas se encuentran en su capacidad de adaptabilidad y control de riesgos, logrando la identificación inteligente del estado del mercado a través del agrupamiento de volatilidad. Si bien existen riesgos como la sensibilidad de parámetros, la optimización y el refinamiento continuos pueden ayudar a mantener un rendimiento estable en varios entornos de mercado. Se aconseja a los operadores que prueben a fondo la sensibilidad de parámetros y optimicen en función de características específicas del mercado al implementar la estrategia en el comercio en vivo.
/*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")