이동 평균을 기반으로 한 적응형 추세 추종 전략

SMA MA RR
생성 날짜: 2025-02-18 14:23:08 마지막으로 수정됨: 2025-02-18 14:23:08
복사: 0 클릭수: 322
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이동 평균을 기반으로 한 적응형 추세 추종 전략

개요

이 전략은 양평선 교차를 기반으로 한 트렌드 추적 시스템으로, 단기 및 장기 이동 평균의 교차로 시장의 흐름을 포착하고, 1:3의 리스크 수익 비율을 사용하여 거래 위험을 관리합니다. 이 전략은 고정된 중지 손실 및 수익 목표를 사용하며, 이동 손실 장치를 결합하여 수익을 보호합니다.

전략 원칙

전략은 74주기의 단기 이동 평균 (Short SMA) 과 70주기의 장기 이동 평균 (Long SMA) 을 주요 지표로 사용한다. 단기 평균이 장기 평균을 상향으로 가로질렀을 때, 시스템은 더 많은 신호를 발생시킨다; 단기 평균이 장기 평균을 하향으로 가로질렀을 때, 시스템은 공백 신호를 발생시킨다. 거래 당 포지션 크기는 0.002로 고정되어 있으며, 353달러의 스톱로스트가 설정되어 있으며, 수익 목표가 스톱로스트의 3배이다. 전략은 또한 날짜 범위 제한을 포함하고 있으며, 지정된 재검사 기간 ([[2025년 2월 13일~2025년 3월 31일]]) 에서만 거래한다.

전략적 이점

  1. 리스크 관리: 고정 1: 3 리스크 수익률을 적용하여 장기 거래에서 안정적인 수익을 얻을 수 있습니다.
  2. 신호 명확성: 고전적인 평선 교차 전략을 사용하여 거래 신호가 명확하고 이해하기 쉽고 실행됩니다.
  3. 높은 자동화: 완전한 입출장 논리를 포함하고, 인적 개입이 필요하지 않습니다.
  4. 모바일 중지 보호: 모바일 중지 메커니즘을 통해 이미 달성 된 수익을 효과적으로 잠금 할 수 있습니다.
  5. 포지션 통제: 포지션 크기를 고정하여 과도한 위험을 피하십시오.

전략적 위험

  1. 평균 지연성: 이동 평균은 본질적으로 지연 지표이며, 빠르게 변동하는 시장에서 지연 신호를 일으킬 수 있습니다.
  2. 흔들림 시장은 적용되지 않습니다: 가로 수평 흔들림 시장에서 종종 잘못된 신호가 발생하여 연속 손실이 발생할 수 있습니다.
  3. 고정 스톱 리스크: 고정 달러 스톱은 가격의 급격한 변동에 대해 유연하지 않을 수 있습니다.
  4. 시간 범위 제한: 전략은 특정 시간 범위에서만 실행되며 중요한 거래 기회를 놓칠 수 있습니다.

전략 최적화 방향

  1. 동적 조정 평균 주기: 시장의 변동에 따라 자동으로 평균 주기 조정하여 전략 적응력을 향상시킵니다.
  2. 변동률 필터를 도입: ATR 또는 다른 변동률 지표를 추가하여 높은 변동 동안 중지 손실을 조정합니다.
  3. 포지션 관리를 최적화: 계좌의 순가치에 기반한 역동적인 포지션 조정으로 자금 활용 효율을 높여주기
  4. 시장 환경 필터링을 추가: 트렌드 강도 지표를 도입하여 흔들리는 시장에서 자동으로 거래 빈도를 낮추기
  5. 출전 메커니즘 개선: 가격 돌파구 또는 동력 지표와 결합하여 더 유연한 수익 획득 메커니즘을 개발

요약하다

이것은 구조가 완전하고, 논리가 명확한 트렌드 추적 전략이다. 동선 교차로 트렌드를 캡처하고, 엄격한 위험 관리 및 포지션 제어를 적용하여 중·장기 거래에 적합하다. 동선 지각과 같은 고유한 결점이 있음에도 불구하고, 제안된 최적화 방향, 특히 동적 매개 변수 조정 및 시장 환경 필터링을 도입함으로써 전략의 안정성과 수익성이 더욱 향상될 것으로 보인다.

전략 소스 코드
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-17 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Bitcoin Strategy by Jag", overlay=true)

// Input Parameters
shortSMALength = input.int(74, title="Short SMA Length")
longSMALength = input.int(70, title="Long SMA Length")
trailStopOffset = input.float(353, title="Trailing Stop Offset (USD)")  // Trailing Stop Loss Offset in USD
tradeSize = input.float(1, title="Trade Size")

// Automatically set Take Profit as 3 times Stop Loss
fixedTakeProfit = trailStopOffset * 3

// Backtesting Date Range
startDate = timestamp(2025, 02,13, 0, 0)
endDate = timestamp(2025, 03, 31, 23, 59)
withinDateRange = true

// Indicators
shortSMA = ta.sma(close, shortSMALength)
longSMA = ta.sma(close, longSMALength)

// Crossover Conditions
longCondition = withinDateRange and ta.crossover(shortSMA, longSMA)
shortCondition = withinDateRange and ta.crossunder(shortSMA, longSMA)

// Entry Logic
if (strategy.position_size == 0)  // Only allow new trades if no position is open
    if (longCondition)
        strategy.entry("Long", strategy.long, tradeSize)

    if (shortCondition)
        strategy.entry("Short", strategy.short, tradeSize)

// Exit Logic for Long Position
if (strategy.position_size > 0)
    strategy.exit("Long exit", "Long", stop=strategy.position_avg_price - trailStopOffset, limit=strategy.position_avg_price + fixedTakeProfit)  // Using stop and limit

// Exit Logic for Short Position
if (strategy.position_size < 0)
    strategy.exit("Short Exit", "Short", stop=strategy.position_avg_price + trailStopOffset, limit=strategy.position_avg_price - fixedTakeProfit)  // Using stop and limit

// Plot Moving Averages
plot(shortSMA, color=color.blue, title="Short SMA")
plot(longSMA, color=color.black, title="Long SMA")

// Visual Signals
plotshape(series=longCondition and strategy.position_size == 0, style=shape.labelup, location=location.belowbar, color=color.green, text="BUY", size=size.small)
plotshape(series=shortCondition and strategy.position_size == 0, style=shape.labeldown, location=location.abovebar, color=color.red, text="SELL", size=size.small)