
이 전략은 머신 러닝을 기반으로 하는 적응형 슈퍼트렌드 거래 시스템입니다. 변동성 클러스터링, 적응형 ATR 트렌드 감지 및 구조화된 진입 및 종료 메커니즘을 통합하여 기존 슈퍼트렌드 지표의 신뢰성을 개선합니다. 전략의 핵심은 머신 러닝 방법을 통해 시장 변동성을 분류하고, 적절한 시장 환경에서 추세 추적 거래를 수행하고, 동적 손절매 및 이익실현을 사용하여 위험을 통제하는 것입니다.
전략은 세 가지 핵심 요소로 구성됩니다. 1) 추세 방향 및 전환점을 결정하기 위한 ATR 기반 적응형 슈퍼트렌드 계산, 2) 시장 상태를 높음, 중간, 낮음의 세 가지 범주로 분류하기 위한 K-평균 알고리즘 기반 변동성 클러스터링. 변동성 환경 ; 3) 변동성 환경에 따른 차별화된 거래 규칙. 변동성이 낮은 환경에서는 추세 기회를 찾고, 변동성이 높은 환경에서는 신중을 기하세요. 이 시스템은 ta.crossunder 및 ta.crossover 함수를 통해 추세 반전 신호를 포착하고 가격과 SuperTrend 선 간의 위치 관계에 따라 거래 방향을 결정합니다.
이 전략은 머신 러닝 기술과 전통적인 기술 분석 방법을 결합하여 지능형 추세 추종 시스템을 만들어냅니다. 이 전략의 핵심적인 장점은 적응성과 위험 관리 능력에 있으며, 이를 통해 변동성 클러스터링을 통해 시장 상황을 지능적으로 식별할 수 있습니다. 매개변수 민감성과 같은 위험이 있지만, 지속적인 최적화와 개선을 통해 이 전략은 다양한 시장 환경에서 안정적인 성과를 유지할 것으로 기대됩니다. 거래자는 실시간으로 적용할 때 매개변수 민감도를 완전히 테스트하고 시장의 특정 특성에 따라 타겟팅된 최적화를 수행하는 것이 좋습니다.
/*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")