Esta estratégia é um sistema de negociação SuperTrend adaptativo baseado em aprendizado de máquina que aumenta a confiabilidade do indicador tradicional SuperTrend, integrando aglomeração de volatilidade, detecção de tendência ATR adaptativa e mecanismos estruturados de entrada / saída.
A estratégia consiste em três componentes principais: 1) Cálculo de SuperTendência Adaptativo baseado em ATR para determinar a direção da tendência e pontos de virada; 2) Aglomeração de volatilidade baseada em K-means que categoriza os estados do mercado em ambientes de alta, média e baixa volatilidade; 3) Regras de negociação diferenciadas baseadas em ambientes de volatilidade. Ele busca oportunidades de tendência em ambientes de baixa volatilidade, mantendo cautela em condições de alta volatilidade.
Esta estratégia cria um sistema inteligente de seguimento de tendências, combinando técnicas de aprendizado de máquina com métodos tradicionais de análise técnica. Suas principais vantagens estão em sua capacidade de adaptabilidade e controle de riscos, alcançando a identificação inteligente do estado do mercado através do agrupamento de volatilidade. Embora existam riscos como sensibilidade de parâmetros, a otimização e refinamento contínuos podem ajudar a manter um desempenho estável em vários ambientes de 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")