리소스 로딩... 로딩...

적응 동력 평균 역전 크로스오버 전략

저자:차오장, 날짜: 2025-01-10 15:26:18
태그:ROCBBSMA

Adaptive Momentum Mean-Reversion Crossover Strategy

전반적인 설명

이 전략은 추진력과 평균 역전 이론을 결합한 하이브리드 거래 시스템이다. 변화율 (ROC) 지표와 볼링거 밴드를 사용하여 시장 과잉 구매 및 과잉 판매 조건을 식별하고 특정 임계값이 넘어가면 거래를 촉발한다. 핵심 개념은 추진력 변화를 감지하고 평균으로 가격 역전을 활용하는 것입니다.

전략 원칙

이 전략은 단기 가격 변화를 계산하기 위해 2 기간 ROC 지표를 사용하며, 두 개의 볼링거 밴드 세트를 사용합니다: 과잉 판매 조건과 진입 신호에 대한 단기 (18 기간, 1.7 표준 편차) 및 과잉 구매 조건과 출구 신호에 대한 장기 (21 기간, 2.1 표준 편차) 로 로그 포지션은 ROC가 하부 볼링거 밴드 위에 넘어가면 시작되며, 약자에서 강한 추진력으로의 전환을 나타냅니다. ROC가 상부 볼링거 밴드 아래에 넘어가면 폐쇄됩니다. 약화 추진력을 나타냅니다. 이 전략은 또한 과잉 구매 (붉은) 및 과잉 판매 (녹색) 영역을 강조하기 위해 배경 색상을 사용합니다.

전략적 장점

  1. 높은 적응성: 볼링거 밴드는 시장 변동성에 따라 자동으로 폭을 조정하여 다른 시장 조건에서 효과를 유지합니다.
  2. 강력한 위험 관리: 피라미딩은 비활성화 (피라미딩=0) 한 번에 한 위치만 보장
  3. 신뢰할 수 있는 신호: 동력과 평균 반전 전략의 조합은 시장 전환점을 더 잘 식별합니다.
  4. 실용성: 실제 거래 조건에 대한 거래 비용 및 미끄러짐 고려 사항을 포함합니다.

전략 위험

  1. 시장 위험: 범주 시장에서 손실을 초래하는 빈번한 거래를 일으킬 수 있습니다.
  2. 거짓 파업 위험: ROC 지표는 거짓 파업 신호를 생성할 수 있습니다.
  3. 매개 변수 민감도: 전략 성과는 볼린저 밴드 및 ROC 매개 변수 설정에 크게 의존합니다.
  4. 시장 환경 의존성: 전략은 트렌딩 시장에서 더 잘 수행되지만 극심한 변동성 중 실패 할 수 있습니다.

전략 최적화 방향

  1. 트렌드 필터를 도입: 시장 트렌드를 필터링하고 방향 정확도를 향상시키기 위해 장기 이동 평균을 추가
  2. 매개 변수 최적화: 최적의 ROC 기간과 볼링거 밴드 매개 변수 조합을 찾기 위해 역사 데이터 백테스팅을 수행합니다.
  3. 스톱 로스 메커니즘을 추가합니다. 위험 통제를 위해 고정 또는 후속 스톱 로스를 구현합니다.
  4. 부피 확인을 포함: 가격 분포를 검증하기 위해 부피 지표를 포함합니다.

요약

어댑티브 모멘텀 미인-리버션 크로스오버 전략은 ROC 지표와 이중 볼링거 밴드를 결합하여 다른 시장 환경에 적응할 수있는 거래 시스템을 구축합니다. 유연성을 유지하면서 전략은 위험 통제를 강조하고 실용적 가치를 보여줍니다. 지속적인 최적화와 개선으로이 전략은 실제 거래에서 더 나은 성과를 낼 수 있습니다.


/*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)")

관련

더 많은