이중 가중 이동 평균 추세 추적 및 적응형 트레일링 손절매 전략

ATR WMA DD
생성 날짜: 2025-07-08 10:16:38 마지막으로 수정됨: 2025-07-08 10:21:22
복사: 0 클릭수: 204
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

이중 가중 이동 평균 추세 추적 및 적응형 트레일링 손절매 전략 이중 가중 이동 평균 추세 추적 및 적응형 트레일링 손절매 전략

개요

이중 가중 이동 평균 트렌드 추적 및 적응 후속 손실 전략은 기술 분석에 기반한 정량 거래 전략으로, 핵심 논리는 두 개의 다른 주기에서 가중 이동 평균 ((WMA) 의 교차 신호를 통해 시장 추세의 전환점을 식별하고, ATR ((진정한 진폭 평균) 필터와 적응 후속 손실 메커니즘을 결합하여 진입 시기를 최적화하고 위험 제어한다. 이 전략은 5 분 시간 주기에서 설계되었으며, 중장기 거래자에게 적합하며, 시장의 추세 변화를 효과적으로 포착하고 수익을 보호 할 수 있습니다.

전략 원칙

이 전략의 핵심에는 다음과 같은 핵심 요소들이 포함되어 있습니다.

  1. 이중 가중 이동 평균 교차 시스템전략은 8주기 및 21주기 중화 이동 평균 ((WMA) 을 트렌드 지표로 사용한다. 짧은 기간 WMA가 아래에서 긴 기간 WMA를 통과하면 다중 신호가 발생한다. 반대로 짧은 기간 WMA가 위에서 긴 기간 WMA를 통과하면 공백 신호가 발생한다.

  2. ATR 다운 필터: 입시 품질을 높이기 위해, 전략은 ATR 필터링 메커니즘을 도입했다. ATR이 3 회 연속으로 떨어지면만 거래 신호가 유발됩니다. 이 필터는 선택적으로 활성화됩니다.

  3. 적응 후속 손해 차단 장치이 전략은 2단계로 구성되어 있습니다.

    • 첫째, 이윤이 기본 트리거 임계 (기본 1.2%) 에 도달했을 때만 추적 손해 중지 기능이 활성화됩니다.
    • 활성화되면, 정지수준은 최고/최저 가격에서 특정 비율을 회수하도록 설정됩니다 (부정값은 0.6%)
    • 이 메커니즘은 거래 초기에는 더 많은 휴식 공간을 허용하고 수익 이후에는 이미 얻은 수익을 보호합니다.
  4. 최대 보호 철회: 단일 거래 손실을 막기 위해, 전략은 최대 철회 보호 장치를 설정했습니다 (비용: 5%).

전략 논리 명확 지역은 다중 헤드 및 공백을 처리하는 방법을 분할하고 포지션 기간 동안 정점 및 하위 값을 지속적으로 업데이트하여 추적 손실을 정확하게 실행합니다.

전략적 이점

  1. 트렌드를 인식하는 능력: 다른 주기적 WMA의 교차를 통해, 전략은 트렌드 전환점을 효과적으로 식별할 수 있고, 평형 시장에서 자주 거래되는 것을 피할 수 있다. 중도 이동 평균은 최근 가격에 더 높은 무게를 부여하여, 시장 변화에 대한 신호에 더 민감하게 반응한다.

  2. 자율적 위험 관리이 전략의 2단계 후속 손실 메커니즘은 매우 혁신적입니다. 그것은 작은 가격 변동을 허용하면서 트렌드가 확립된 후 수익을 엄격하게 보호합니다. 이 메커니즘은 전통적인 고정 손실의 과잉 침착 문제를 해결합니다.

  3. ATR 필터링 장치: 변동성이 낮을 때만 입문함으로써 전략은 매우 불안정한 시장 환경을 피할 수 있으며 신호 품질을 향상시킬 수 있습니다. 이 방법은 가짜 돌파구와 시장 소음을 피하는 데 도움이됩니다.

  4. 최대 철회 제어전략: 명확한 한 거래 최대 손실 제한을 설정하고, 리스크 을 효과적으로 제어하고, 자금의 안전을 보호한다.

  5. 유연한 변수 조정전략은 여러 가지 조정 가능한 파라미터를 제공합니다 (WMA 주기, 트리거 비율, 회수 비율 등) 트레이더가 다른 시장 환경과 개인 위험 선호도에 따라 최적화 할 수 있도록합니다.

전략적 위험

  1. 가짜 침입 위험: ATR 필터를 사용함에도 불구하고, 전략은 시장이 급격하게 변동할 때 잘못된 신호를 일으킬 수 있습니다. 특히 중요한 뉴스 또는 사건 전후에서 이동 평균 교차는 충분히 신뢰할 수 없습니다.

  2. 매개변수 민감도: 전략 효과는 파라미터 설정에 크게 의존한다. 다른 시장과 시간 주기에는 다른 파라미터 조합이 필요할 수 있으며, 잘못된 파라미터는 과도한 거래 또는 중요한 기회를 놓칠 수 있다.

  3. 슬라이드 포인트와 유동성 위험5분 시간 주기에서 실행되는 전략은 특히 유동성이 낮은 시장에서 더 높은 슬라이드 리스크에 직면할 수 있습니다. 이것은 전략의 실제 실행 효과에 영향을 줄 수 있습니다.

  4. 트렌드 반전 지연: 전략이 이동 평균의 교차에 기반하기 때문에, 신호는 본질적으로 지연되어 트렌드의 초기 단계에 진입할 수 없거나, 트렌드가 끝나면 빠르게 탈퇴할 수 있다.

  5. ATR 필터에 대한 과잉 신뢰3일 연속으로 ATR이 하락하는 것은 항상 변동성이 실제로 하락하는 것을 의미하지 않으며, 때로는 일시적인 현상일 수 있으며, 이로 인해 유리한 거래 기회를 놓치게 됩니다.

해결 방법은 다음과 같습니다: 최적화 파라미터 설정, 다른 기술 지표 또는 기본 분석과 결합, 다양한 시장 조건에서 전략의 성능을 테스트하고, 추가 확인 신호를 추가하는 것을 고려하십시오.

전략 최적화 방향

  1. 동적 변수 조정: 현재 전략은 고정된 WMA 주기 및 중지 변수를 사용한다. 중요한 최적화 방향은 시장의 변동성에 따라 WMA 주기를 자동으로 조정하거나 다른 시장 상태에 따라 ((트렌드 / 흔들림) 동적으로 중지 손실 촉발 조건을 조정하는 것과 같은 적응 변수를 도입하는 것이다.

  2. ATR 필터 개선: 현재 ATR 필터는 연속적인 하락만을 고려하며, ATR의 상대적인 수준이나 변화율을 고려하기 위해 최적화할 수 있으며, 심지어 ATR을 사용하여 고정된 비율이 아닌 동적 스톱 손실 수준을 설정할 수 있다.

  3. 거래량 분석거래량 지표 (OBV 또는 Chaikin Money Flow와 같은) 와 결합하여 트렌드 확인의 신뢰성을 높이고 낮은 거래량으로 인한 가짜 돌파구를 피할 수 있습니다.

  4. 시간 필터: 시간 필터 기능을 추가하여 시장 개시와 종료 전의 높은 변동성을 피하거나 특정 높은 변동성을위한 시간 (경제 데이터 발표와 같은) 을 일시 중지하십시오.

  5. 다중 시간 주기 분석: 더 긴 시간 사이클 (예: 15 분 또는 1 시간) 의 트렌드 확인 신호를 통합하여, 큰 트렌드 방향에서만 거래하여 승률을 높인다.

  6. 정지 메커니즘 최적화현재 전략은 후속 상쇄로 빠져나갈 수 있으며, 지지/저항 지점이나 가격 목표에 기반한 상쇄 메커니즘을 추가하여 강력한 저항 지점에서 조기 수익을 창출하는 것을 고려할 수 있습니다.

  7. 리포트 최적화: 다양한 시장 환경에서의 성과를 종합적으로 재검토하고, 특히 추세 시장과 흔들림 시장에서 각각 최적화한 매개 변수, 다른 시장 상태에 대해 다른 매개 변수 세트를 설계해야 할 수 있습니다.

이러한 최적화 방향은 주로 신호 품질을 높이고, 가짜 돌파 위험을 줄이고, 자금 관리를 최적화하고, 다양한 시장 조건에 적응하여 전략의 전반적인 안정성을 효과적으로 향상시킬 수 있습니다.

요약하다

이중 가중 이동 평균 트렌드 추적과 적응된 후속 손해 전략은 전통적인 이동 평균 교차 전략과 현대적 위험 관리 기술을 결합한 잘 설계된 정량 거래 시스템이다. 전략은 8과 21주기 WMA의 교차 인식으로 트렌드를 전환하고, ATR 필터와 결합하여 신호 품질을 향상시킨다. 가장 큰 혁신은 두 단계의 적응된 후속 손해 중지 장치에 있다.

전략의 장점은 명확한 논리 구조, 완벽한 위험 제어 및 유연한 매개 변수 설정이지만, 매개 변수 민감도가 높거나 신호 지연 등의 위험도 존재한다. 동적 매개 변수 조정, ATR 적용 방식을 개선하고, 다중 시간 주기 분석을 통합하는 등의 최적화 방향을 도입함으로써 전략의 성능과 적응력을 더욱 향상시킬 수 있다.

중·단기 동향 거래를 추구하는 양적 투자자에게 이 전략은 다양한 시장 환경에서 거래 기회를 찾고 위험을 효과적으로 관리할 수 있는 이상적인 프레임워크를 제공합니다. 전략의 원리를 올바르게 이해하고 자신의 거래 스타일과 함께 적절하게 조정하는 것은 이 전략의 잠재력을 최대한 발휘하는 데 도움이 될 것입니다.

전략 소스 코드
/*backtest
start: 2024-07-07 00:00:00
end: 2025-07-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/


//@version=6
strategy("Reverscope 5M", overlay=true)

wmaLen1 = input.int(8, title="WMA 1 Periyodu")
wmaLen2 = input.int(21, title="WMA 2 Periyodu")

trail_trigger_pct = input.float(1.2, title="Tetikleme Oranı (%)")
trail_offset_pct  = input.float(0.6, title="Geri Çekilme Oranı (%)")
max_dd_pct        = input.float(5.0, title="Maksimum Zarar (%)")

use_atr_filter = input.bool(true, title="ATR Düşüş Filtresi Aktif")
atr_period     = input.int(8, title="ATR Periyodu")

trail_trigger = trail_trigger_pct / 100
trail_offset  = trail_offset_pct / 100
max_dd        = max_dd_pct / 100

var float entry_price  = na
var float peak_price   = na
var float trough_price = na
var bool  is_long      = false
var bool  triggered    = false

wma1 = ta.wma(close, wmaLen1)
wma2 = ta.wma(close, wmaLen2)
atr  = ta.atr(atr_period)

// ATR 3 barda üst üste düşüyor mu?
atrFalling = atr < atr[1] and atr[1] < atr[2] and atr[2] < atr[3]
atrFilterPass = not use_atr_filter or atrFalling

plot(wma1, "WMA 1", color=color.yellow, linewidth=3)
plot(wma2, "WMA 2", color=color.red, linewidth=3)

longSignal  = wma1[1] < wma2[1] and wma1[2] >= wma2[2]
shortSignal = wma1[1] > wma2[1] and wma1[2] <= wma2[2]

plotshape(longSignal and atrFilterPass,  title="Long",  location=location.belowbar, color=color.lime, style=shape.triangleup, size=size.small, offset=-1)
plotshape(shortSignal and atrFilterPass, title="Short", location=location.abovebar, color=color.red,  style=shape.triangledown, size=size.small, offset=-1)

if longSignal and atrFilterPass
    strategy.close("Short")
    strategy.entry("Long", strategy.long)
    entry_price := close
    is_long := true
    peak_price := close
    trough_price := close
    triggered := false

if shortSignal and atrFilterPass
    strategy.close("Long")
    strategy.entry("Short", strategy.short)
    entry_price := close
    is_long := false
    peak_price := close
    trough_price := close
    triggered := false

if strategy.position_size != 0
    profit = is_long ? (close - entry_price) / entry_price : (entry_price - close) / entry_price
    drawdown = is_long ? (entry_price - close) / entry_price : (close - entry_price) / entry_price

    if not triggered and drawdown > max_dd
        strategy.close_all(comment="Max DD")

    if is_long
        peak_price := math.max(peak_price, close)
        if not triggered and profit > trail_trigger
            triggered := true
        if triggered and close < peak_price * (1 - trail_offset)
            strategy.close_all(comment="Trailing Stop")
    else
        trough_price := math.min(trough_price, close)
        if not triggered and profit > trail_trigger
            triggered := true
        if triggered and close > trough_price * (1 + trail_offset)
            strategy.close_all(comment="Trailing Stop")