Strategi ini adalah sistem perdagangan SuperTrend adaptif berasaskan pembelajaran mesin yang meningkatkan kebolehpercayaan penunjuk SuperTrend tradisional dengan mengintegrasikan pengelompokan turun naik, pengesanan trend ATR adaptif, dan mekanisme kemasukan / keluar terstruktur.
Strategi ini terdiri daripada tiga komponen utama: 1) Pengiraan SuperTrend adaptif berdasarkan ATR untuk menentukan arah trend dan titik perubahan; 2) Pengelompokan turun naik berasaskan K yang mengkategorikan keadaan pasaran ke dalam persekitaran turun naik tinggi, sederhana, dan rendah; 3) Peraturan perdagangan yang berbeza berdasarkan persekitaran turun naik. Ia mencari peluang trend dalam persekitaran turun naik rendah sambil berhati-hati dalam keadaan turun naik tinggi. Sistem menangkap isyarat pembalikan trend menggunakan fungsi ta.crossunder dan ta.crossover, digabungkan dengan kedudukan harga berbanding dengan garis SuperTrend.
Strategi ini mewujudkan sistem trend yang pintar dengan menggabungkan teknik pembelajaran mesin dengan kaedah analisis teknikal tradisional. Kelebihan utamanya terletak pada keupayaan penyesuaiannya dan kawalan risiko, mencapai pengenalan keadaan pasaran yang pintar melalui pengelompokan turun naik. Walaupun risiko seperti sensitiviti parameter ada, pengoptimuman dan penyempurnaan berterusan dapat membantu mengekalkan prestasi yang stabil di pelbagai persekitaran pasaran. Pedagang dinasihatkan untuk menguji sensitiviti parameter dengan teliti dan mengoptimumkan berdasarkan ciri pasaran tertentu ketika melaksanakan strategi dalam perdagangan langsung.
/*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")