이 전략은 기계 학습 기반의 적응형 슈퍼 트렌드 거래 시스템으로, 변동성 클러스터링, 적응형 ATR 트렌드 탐지 및 구조화된 엔트리/엑시트 메커니즘을 통합하여 전통적인 슈퍼 트렌드 지표의 신뢰성을 향상시킵니다. 핵심 개념은 기계 학습 방법을 통해 시장 변동성을 분류하고, 적절한 시장 조건에서 트렌드 다음 거래를 실행하며, 동시에 리스크 통제를 위해 동적 스톱 로스 및 영업 수준을 사용합니다.
이 전략은 세 가지 주요 구성 요소로 구성됩니다: 1) 트렌드 방향과 전환점을 결정하기 위해 ATR에 기반한 적응성 슈퍼트렌드 계산; 2) 높은, 중간 및 낮은 변동성 환경에 대한 시장 상태를 분류하는 K-means 기반 변동성 클러스터링; 3) 변동성 환경에 기반한 차별화된 거래 규칙. 높은 변동성 조건에서 신중을 기하면서 낮은 변동성 환경에서 트렌드 기회를 찾습니다. 시스템은 ta.crossunder 및 ta.crossover 함수를 사용하여 트렌드 역전 신호를 캡처하고 슈퍼트렌드 라인에 대한 가격 위치와 결합합니다.
이 전략은 기계 학습 기술을 전통적인 기술 분석 방법과 결합하여 지능적인 트렌드 추적 시스템을 만듭니다. 그것의 핵심 장점은 변동성 클러스터링을 통해 지능적인 시장 상태 식별을 달성하는 적응력과 위험 통제 능력에 있습니다. 매개 변수 민감도와 같은 위험이 존재하지만 지속적인 최적화와 정밀화는 다양한 시장 환경에서 안정적인 성능을 유지하는 데 도움이 될 수 있습니다. 트레이더는 라이브 트레이딩에서 전략을 구현 할 때 매개 변수 민감도를 철저히 테스트하고 특정 시장 특성에 따라 최적화하는 것이 좋습니다.
/*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")