Strategi ini adalah sistem perdagangan hibrida yang menggabungkan teori momentum dan reversi rata-rata. Ini mengidentifikasi kondisi pasar yang terlalu banyak dibeli dan terlalu banyak dijual menggunakan indikator Rate of Change (ROC) dan Bollinger Bands, memicu perdagangan ketika ambang batas tertentu dilewati. Konsep inti adalah mendeteksi pergeseran momentum dan memanfaatkan reversi harga ke rata-rata mereka.
Strategi ini menggunakan indikator ROC 2 periode untuk menghitung perubahan harga jangka pendek, bersama dengan dua set Bollinger Band: jangka pendek (18 periode, 1,7 standar deviasi) untuk kondisi oversold dan sinyal masuk, dan jangka panjang (21-periode, 2.1 standar deviasi) untuk kondisi overbought dan sinyal keluar. Posisi panjang dimulai ketika ROC melintasi Band Bollinger bagian bawah, menunjukkan pergeseran dari momentum yang lemah ke momentum yang kuat, dan posisi ditutup ketika ROC melintasi di bawah Band Bollinger bagian atas, menandakan momentum yang melemah.
Adaptive Momentum Mean-Reversion Crossover Strategy membangun sistem perdagangan yang mampu beradaptasi dengan lingkungan pasar yang berbeda dengan menggabungkan indikator ROC dan dual Bollinger Bands.
/*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)")