
Strategi ini adalah sistem perdagangan hibrid yang menggabungkan momentum dan teori pembalikan min. Ia menggunakan penunjuk Kadar Perubahan (ROC) dan Bollinger Bands untuk mengenal pasti keadaan terlebih beli dan terlebih jual dalam pasaran, mencetuskan isyarat dagangan apabila ambang tertentu melepasi. Teras strategi adalah untuk mendapatkan pulangan dengan mengesan titik perubahan momentum dan mengambil kesempatan daripada sifat pengembalian harga kepada min.
Strategi ini menggunakan penunjuk ROC 2 tempoh untuk mengira perubahan harga jangka pendek dan menggunakan dua set Bollinger Bands dengan parameter berbeza: Bollinger Bands jangka pendek (18 tempoh, 1.7 sisihan piawai) digunakan untuk menentukan keadaan terlebih jual dan isyarat kemasukan , dan Bollinger Bands jangka panjang (21 tempoh, sisihan piawai 2.1) digunakan untuk menentukan keadaan terlebih beli dan isyarat keluar. Apabila ROC melintasi Jalur Bollinger bawah ke atas, ia menunjukkan bahawa momentum harga bertukar daripada lemah kepada kuat, dan sistem membuka kedudukan panjang apabila ROC melintasi Jalur Bollinger atas ke bawah, ia menunjukkan bahawa momentum melemah, dan sistem menutup; kedudukan. Strategi ini juga menandakan kawasan terlebih beli dan terlebih jual mengikut warna latar belakang, hijau menunjukkan terlebih jual (kemungkinan meningkat), dan merah menunjukkan terlebih beli (mungkin jatuh).
Momentum penyesuaian min strategi crossover reversion menggabungkan penunjuk ROC dan Bollinger Band berganda untuk membina sistem perdagangan yang boleh menyesuaikan diri dengan persekitaran pasaran yang berbeza. Strategi ini memberi tumpuan kepada kawalan risiko sambil mengekalkan fleksibiliti dan mempunyai nilai praktikal yang baik. Melalui pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka mencapai prestasi yang lebih baik dalam dagangan sebenar.
/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-08 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("Adaptive Momentum Reversion Strategy ", overlay=false, initial_capital=50000, pyramiding=0, commission_type=strategy.commission.cash_per_contract, commission_value=0.05, slippage=1)
// Input: ROC Period
rocPeriod = input.int(2, title="ROC Period", minval=1)
// Input: Bollinger Bands Settings (Lower Band)
bbLowerLength = input.int(18, title="Lower Bollinger Band Length", minval=1)
bbLowerStdDev = input.float(1.7, title="Lower Bollinger Band StdDev", minval=0.1, step=0.1)
// Input: Bollinger Bands Settings (Upper Band)
bbUpperLength = input.int(21, title="Upper Bollinger Band Length", minval=1)
bbUpperStdDev = input.float(2.1, title="Upper Bollinger Band StdDev", minval=0.1, step=0.1)
// ROC Calculation
rocValue = (close - close[rocPeriod]) / close[rocPeriod] * 100
// Bollinger Bands Calculation
bbLowerBasis = ta.sma(rocValue, bbLowerLength) // Basis for Lower Band
bbLower = bbLowerBasis - bbLowerStdDev * ta.stdev(rocValue, bbLowerLength) // Lower Band
bbUpperBasis = ta.sma(rocValue, bbUpperLength) // Basis for Upper Band
bbUpper = bbUpperBasis + bbUpperStdDev * ta.stdev(rocValue, bbUpperLength) // Upper Band
// Plot ROC
plot(rocValue, color=color.blue, linewidth=2, title="ROC Value")
// Plot Bollinger Bands
plot(bbLowerBasis, color=color.gray, linewidth=1, title="Lower BB Basis (SMA)")
plot(bbLower, color=color.green, linewidth=1, title="Lower Bollinger Band")
plot(bbUpperBasis, color=color.gray, linewidth=1, title="Upper BB Basis (SMA)")
plot(bbUpper, color=color.red, linewidth=1, title="Upper Bollinger Band")
// Add Zero Line for Reference
hline(0, "Zero Line", color=color.gray, linestyle=hline.style_dotted)
// Entry Condition: Long when ROC crosses above the lower Bollinger Band
longCondition = ta.crossover(rocValue, bbLower)
if (longCondition)
strategy.entry("Long", strategy.long)
// Exit Condition: Exit on Upper Bollinger Band Cross or ROC drops below Lower Band again
exitCondition = ta.crossunder(rocValue, bbUpper)
if (exitCondition)
strategy.close("Long")
// Background Color for Extreme Conditions
bgcolor(rocValue > bbUpper ? color.new(color.red, 80) : na, title="Overbought (ROC above Upper BB)")
bgcolor(rocValue < bbLower ? color.new(color.green, 80) : na, title="Oversold (ROC below Lower BB)")