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

동적 듀얼 인디케이터 모멘텀 트렌드 양적 전략 시스템

저자:차오장, 날짜: 2025-01-17 16:40:55
태그:RSIMAATRTP/SL

 Dynamic Dual-Indicator Momentum Trend Quantitative Strategy System

전반적인 설명

이 전략은 상대적 강도 지수 (RSI) 와 이동 평균 (MA) 를 결합하여 시장 추세와 거래 기회를 식별하는 양적 거래 시스템이다. 이 시스템은 거래 신호의 신뢰성을 향상시키기 위해 볼륨 및 변동성 필터도 포함합니다. 핵심 개념은 RSI를 사용하여 추진력을 확인하는 동안 빠르고 느린 이동 평균의 크로스오버를 통해 트렌드 방향을 결정하는 것입니다. 궁극적으로 완전한 거래 결정 프레임워크를 형성합니다.

전략 원칙

이 전략은 이중 신호 확인 메커니즘을 사용합니다. 트렌드 확인 계층: 시장 추세를 결정하기 위해 빠른 이동 평균 (FastMA) 과 느린 이동 평균 (SlowMA) 의 교차를 사용합니다. 빠른 선이 느린 선 위에 넘을 때 상승 추세가 설정됩니다. 빠른 선이 느린 선 아래에 넘을 때 하락 추세가 설정됩니다. 2. 모멘텀 확인 계층: 모멘텀 확인 도구로 RSI를 사용합니다. 상승 트렌드에서 RSI는 상승 잠재력을 나타내는 50 이하여야합니다. 하락 트렌드에서 RSI는 하락 잠재력을 나타내는 50 이상해야합니다. 3. 거래 필터: 유동성 또는 변동성이 충분하지 않은 신호를 필터링하기 위해 볼륨 및 ATR 변동성에 대한 최소한의 문턱을 설정합니다.

전략적 장점

  1. 다차원 신호 확인: 트렌드 및 모멘텀 지표를 결합하여 잘못된 신호의 확률을 줄입니다.
  2. 포괄적 리스크 관리: %에 기반한 리스크 제어 포인트와 함께 스톱 로스 및 리프트 취업 기능을 통합합니다.
  3. 유연한 필터링 메커니즘: 시장 조건에 따라 볼륨 및 변동성 필터를 활성화 또는 비활성화 할 수 있습니다.
  4. 자동 포지션 폐쇄: 반전 신호가 회수되는 것을 피하는 것처럼 보일 때 자동으로 포지션을 닫습니다.

전략 위험

  1. 시장 위험: 범위에 묶인 시장에서 잘못된 브레이크오웃 신호가 자주 발생할 수 있습니다.
  2. 미끄러짐 위험: 변동적인 시장 조건에서 실제 실행 가격은 신호 트리거 가격과 크게 다를 수 있습니다.
  3. 매개 변수 민감성: 전략 성능은 매개 변수 설정에 크게 의존하며, 다른 시장 환경은 다른 매개 변수 조합을 요구할 수 있습니다.

전략 최적화 방향

  1. 동적 매개 변수 조정: 시장 변동성에 따라 이동 평균 기간과 RSI 임계치를 동적으로 조정하기 위해 적응적 매개 변수 메커니즘을 도입합니다.
  2. 신호 중량 시스템: 신호 강도 점수 시스템을 구축하고, 지표 성능에 따라 다른 무게를 할당합니다.
  3. 시장 환경 분류: 다른 시장 조건에서 다른 거래 전략을 사용하도록 시장 상태 식별 모듈을 추가합니다.
  4. 증강된 위험 통제: 시장 변동성에 따라 자동으로 중지 손실 포지션을 조정하기 위해 동적 스톱 손실 메커니즘을 도입합니다.

요약

이 전략은 트렌드 및 모멘텀 지표의 통합적 사용을 통해 포괄적인 거래 시스템을 구축한다. 이 시스템의 강점은 다층 신호 확인 메커니즘과 포괄적인 리스크 관리 프레임워크에 있다. 그러나 실질적인 적용은 실제 상황에 따라 전략 성과 및 매개 변수 최적화에 대한 시장 조건의 영향에 대한 관심을 필요로 한다. 지속적인 개선과 최적화를 통해 이 전략은 다양한 시장 환경에서 안정적인 성과를 유지할 잠재력을 가지고 있다.


/*backtest
start: 2024-01-17 00:00:00
end: 2025-01-16 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT","balance":49999}]
*/

// © Boba2601
//@version=5
strategy("RSI-MA Synergy", overlay=true, margin_long=100, margin_short=100)

// === Налаштування індикаторів ===
length_rsi = input.int(14, title="RSI Period", group="Індикатори")
fastMALength = input.int(9, title="Fast MA Length", group="Індикатори")
slowMALength = input.int(21, title="Slow MA Length", group="Індикатори")

// === Налаштування стоп-лосу і тейк-профіту ===
useStopLossTakeProfit = input.bool(true, title="Використовувати стоп-лос і тейк-профіт", group="Стоп-лос і Тейк-профіт")
stopLossPercent = input.float(2.0, title="Стоп-лос (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт")
takeProfitPercent = input.float(4.0, title="Тейк-профіт (%)", minval=0.1, step=0.1, group="Стоп-лос і Тейк-профіт")

// === Налаштування об'єму та волатильності ===
useVolumeFilter = input.bool(false, title="Використовувати фільтр об'єму", group="Об'єм та Волатильність")
volumeThreshold = input.int(50000, title="Мінімальний об'єм", group="Об'єм та Волатильність")
useVolatilityFilter = input.bool(false, title="Використовувати фільтр волатильності", group="Об'єм та Волатильність")
atrLength = input.int(14, title="Період ATR для волатильності", group="Об'єм та Волатильність")
volatilityThreshold = input.float(1.5, title="Мінімальна волатильність (ATR)", step=0.1, group="Об'єм та Волатильність")


// === Розрахунок індикаторів ===
rsiValue = ta.rsi(close, length_rsi)
fastMA = ta.sma(close, fastMALength)
slowMA = ta.sma(close, slowMALength)

// === Розрахунок об'єму та волатильності ===
averageVolume = ta.sma(volume, 20)
atrValue = ta.atr(atrLength)

// === Умови входу в позицію ===
longCondition = ta.crossover(fastMA, slowMA) and rsiValue < 50
if useVolumeFilter
    longCondition := longCondition and volume > volumeThreshold
if useVolatilityFilter
    longCondition := longCondition and atrValue > volatilityThreshold

shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue > 50
if useVolumeFilter
    shortCondition := shortCondition and volume > volumeThreshold
if useVolatilityFilter
    shortCondition := shortCondition and atrValue > volatilityThreshold

// === Логіка входу та виходу з позиції ===
if (longCondition)
    strategy.entry("Long", strategy.long)
    if (useStopLossTakeProfit)
        stopLossPrice = close * (1 - stopLossPercent / 100)
        takeProfitPrice = close * (1 + takeProfitPercent / 100)
        strategy.exit("Exit Long", "Long", stop = stopLossPrice, limit = takeProfitPrice)

if (shortCondition)
    strategy.entry("Short", strategy.short)
    if (useStopLossTakeProfit)
        stopLossPrice = close * (1 + stopLossPercent / 100)
        takeProfitPrice = close * (1 - takeProfitPercent / 100)
        strategy.exit("Exit Short", "Short", stop = stopLossPrice, limit = takeProfitPrice)

// === Закриття позицій за зворотнім сигналом ===
if (strategy.position_size > 0 and (ta.crossunder(fastMA, slowMA) or rsiValue > 50))
    strategy.close("Long", comment="Закрито по сигналу")

if (strategy.position_size < 0 and (ta.crossover(fastMA, slowMA) or rsiValue < 50))
    strategy.close("Short", comment="Закрито по сигналу")

관련

더 많은