
Bei der Strategie handelt es sich um ein hybrides Handelssystem, das die Momentum- und Mean-Reversion-Theorie kombiniert. Es verwendet den Rate of Change (ROC)-Indikator und Bollinger-Bänder, um überkaufte und überverkaufte Bedingungen auf dem Markt zu identifizieren und löst Handelssignale aus, wenn bestimmte Schwellenwerte überschritten werden. Der Kern der Strategie besteht darin, durch das Erkennen von Wendepunkten des Momentums und durch Ausnutzen der Eigenschaft der Preisrückkehr zum Mittelwert Renditen zu erzielen.
Die Strategie verwendet einen 2-Perioden-ROC-Indikator zur Berechnung kurzfristiger Preisänderungen und verwendet zwei Sätze von Bollinger-Bändern mit unterschiedlichen Parametern: Kurzfristige Bollinger-Bänder (18 Perioden, 1,7 Standardabweichungen) werden verwendet, um überverkaufte Bedingungen und Einstiegssignale zu bestimmen , und langfristige Bollinger-Bänder (21 Perioden, 2,1 Standardabweichung) werden verwendet, um überkaufte Bedingungen und Ausstiegssignale zu bestimmen. Wenn ROC das untere Bollinger-Band nach oben kreuzt, deutet dies darauf hin, dass die Preisdynamik von schwach zu stark wechselt, und das System öffnet eine Long-Position; wenn ROC das obere Bollinger-Band nach unten kreuzt, deutet dies darauf hin, dass die Dynamik schwächer wird, und das System schließt die Position. Die Strategie kennzeichnet die überkauften und überverkauften Bereiche auch durch eine Hintergrundfarbe: Grün bedeutet überverkauft (wahrscheinlicher Anstieg) und Rot bedeutet überkauft (wahrscheinlicher Rückgang).
Die adaptive Momentum-Mean-Reversion-Crossover-Strategie kombiniert den ROC-Indikator und das doppelte Bollinger-Band, um ein Handelssystem aufzubauen, das sich an unterschiedliche Marktumgebungen anpassen kann. Die Strategie konzentriert sich auf die Risikokontrolle bei gleichzeitiger Wahrung der Flexibilität und hat einen guten praktischen Wert. Durch kontinuierliche Optimierung und Verbesserung soll diese Strategie im tatsächlichen Handel eine bessere Performance erzielen.
/*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)")