Strategi ini adalah sistem perdagangan supertrend adaptif yang berbasis pada pembelajaran mesin. Sistem ini meningkatkan keandalan indikator SuperTrend tradisional dengan mengintegrasikan pengelompokan volatilitas, deteksi tren ATR adaptif, dan mekanisme masuk dan keluar yang terstruktur. Inti dari strategi ini adalah mengklasifikasikan volatilitas pasar melalui metode pembelajaran mesin, melakukan transaksi pelacakan tren di lingkungan pasar yang tepat, dan menggunakan stop-loss dan take-profit dinamis untuk mengendalikan risiko.
Strategi ini terdiri dari tiga komponen utama: 1) Perhitungan SuperTrend Adaptif berdasarkan ATR untuk menentukan arah tren dan titik balik; 2) Pengelompokan volatilitas berdasarkan algoritma K-means untuk mengklasifikasikan status pasar menjadi tiga kategori: tinggi, sedang dan rendah. lingkungan volatilitas ; 3) aturan perdagangan yang dibedakan berdasarkan lingkungan volatilitas. Carilah peluang tren dalam lingkungan volatilitas rendah dan tetap berhati-hati dalam lingkungan volatilitas tinggi. Sistem menangkap sinyal pembalikan tren melalui fungsi ta.crossunder dan ta.crossover, dan menentukan arah perdagangan berdasarkan hubungan posisi antara harga dan garis SuperTrend.
Strategi ini menciptakan sistem pengikut tren yang cerdas dengan menggabungkan teknik pembelajaran mesin dengan metode analisis teknis tradisional. Keuntungan inti dari strategi ini terletak pada kemampuan beradaptasi dan pengendalian risiko, yang memungkinkan identifikasi kondisi pasar secara cerdas melalui pengelompokan volatilitas. Meskipun terdapat risiko seperti sensitivitas parameter, melalui optimalisasi dan perbaikan berkelanjutan, strategi ini diharapkan dapat mempertahankan kinerja yang stabil di berbagai lingkungan pasar. Disarankan agar pedagang menguji sepenuhnya sensitivitas parameter saat menerapkannya secara real-time, dan melakukan optimasi yang ditargetkan berdasarkan karakteristik pasar tertentu.
/*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")