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

동적 변동성 필터와 함께 여러 기간 이동 평균 크로스오버 전략

저자:차오장, 날짜: 2024-07-31 12:03:54
태그:SMAATR

img

전반적인 설명

이 전략은 다기간 간단한 이동 평균 (SMA) 크로스오버와 변동성 필터를 결합한 양적 거래 전략이다. 이 전략은 단기 및 장기적인 SMA의 크로스오버를 사용하여 거래 신호를 생성하며, 거짓 신호를 줄이기 위해 평균 진정한 범위 (ATR) 지표를 변동성 필터로 사용합니다. 이 전략은 또한 200일 이동 평균과 고정 수익 목표를 기반으로 동적 스톱 로스 수준을 통합하여 위험 관리를 최적화하고 수익성을 향상시키는 것을 목표로합니다.

전략 원칙

  1. 이동 평균 크로스오버 신호: 이 전략은 단기 (10일) 및 장기 (200일) SMA의 크로스오버를 사용하여 구매 및 판매 신호를 생성합니다. 단기 SMA가 장기 SMA 위에 넘어가면 긴 신호가 생성되며, 아래로 넘어가면 짧은 신호가 생성됩니다.

  2. 변동성 필터: 14일 ATR은 변동성 지표로 사용됩니다. 현재 ATR이 14일 평균의 특정 배수 (사용자 정의 ATR 곱셈자에 의해 결정) 이상일 때만 거래 신호가 실행됩니다. 이것은 낮은 변동성 기간 동안 잠재적 인 잘못된 신호를 필터링하는 데 도움이됩니다.

  3. 동적 스톱 로스: 이 전략은 동적 스톱 로스 레벨의 기준으로 200일 SMA를 사용합니다. 장 포지션의 스톱 로스는 200일 SMA의 99.9%로 설정되며, 단위 포지션의 경우 200일 SMA의 100.1%로 설정됩니다.

  4. 고정 수익 목표: 전략은 각 거래에 대해 고정 수익 목표를 설정합니다. 긴 거래의 수익 목표는 입시 가격 더하기 7.5 가격 단위, 짧은 거래의 경우 입시 가격 빼기 7.5 가격 단위입니다.

전략적 장점

  1. 다중 신호 확인: 이동 평균 크로스오버와 변동성 필터링을 결합함으로써 전략은 잘못된 신호의 위험을 줄이고 거래 신뢰성을 향상시킵니다.

  2. 동적 리스크 관리: 200일 SMA를 기반으로 한 동적 스톱 로스 사용은 전략이 변화하는 시장 조건에 적응하여 보다 유연한 리스크 통제를 제공합니다.

  3. 명확 한 이윤 목표: 고정 된 이윤 목표 는 실현 된 이윤 을 보호 하고 과도 한 탐욕 으로 인해 발생하는 마감 을 방지 하는 데 도움 이 된다.

  4. 높은 적응력: 전략 매개 변수들은 다른 시장과 거래 도구에 맞게 조정될 수 있으며, 전략의 다재다능성을 향상시킵니다.

  5. 시각 보조: 전략은 차트에서 다양한 SMA 라인, 스톱 로스 및 수익 목표 수준을 그래프로 표시하여 거래자에게 직관적인 시장 분석 도구를 제공합니다.

전략 위험

  1. 이동 평균에서 지연: SMA는 본질적으로 지연 지표이며, 빠르게 변화하는 시장에서 지연 신호를 생성하여 비시간 입출로 이어질 수 있습니다.

  2. 과잉 거래: 명확한 트렌드가 없는 매우 변동적인 시장에서 전략은 거래 비용을 증가시키는 너무 많은 거래 신호를 생성 할 수 있습니다.

  3. 고정 수익 목표의 한계: 고정 수익 목표가 강력한 추세에 따라 조기 포지션 폐쇄로 이어질 수 있으며 잠재적인 수익을 제한할 수 있습니다.

  4. 특정 시장 조건에 대한 의존성: 전략은 트렌드 시장에서 잘 수행되지만, 시장의 범위 또는 빠르게 역전되는 시장에서 저조한 성과를 낼 수 있습니다.

  5. 매개 변수 민감성: 전략의 성능은 선택된 매개 변수에 크게 달려 있습니다. 잘못된 매개 변수 설정은 전략 성능이 떨어질 수 있습니다.

전략 최적화 방향

  1. 동적 매개 변수 조정: 다른 시장 환경에 적응하기 위해 시장 조건에 따라 동적으로 SMA 기간과 ATR 곱셈을 조정하는 것을 고려하십시오.

  2. 트렌드 강도 필터 추가: 강한 트렌드 시장에서 거래 할 수 있도록 ADX와 같은 추가 트렌드 강도 지표를 도입하십시오.

  3. 수익 목표를 최적화하십시오: 시장 변동에 더 잘 적응하기 위해 ATR 또는 최근의 가격 변동 범위에 기반한 것과 같은 동적 수익 목표를 사용하는 것을 고려하십시오.

  4. 부분적인 포지션 폐쇄를 도입: 일부 수익을 차단하고 나머지 포지션이 수익을 계속 할 수 있도록 특정 수익 수준에서 부분적인 포지션 폐쇄를 구현하십시오.

  5. 시장 체제 인식을 통합합니다: 다른 시장 상태를 식별하는 알고리즘을 개발합니다 (예를 들어, 트렌드, 범위, 높은 변동성) 및 전략 매개 변수를 조정하거나 그에 따라 거래를 중지하십시오.

  6. 스톱 로스 메커니즘을 강화합니다. 더 유연한 리스크 관리를 제공하기 위해 지원/저항 수준에 기반한 트레일링 스톱 또는 스톱 로스를 사용하는 것을 고려하십시오.

결론

이 다기 이동 평균 크로스오버 전략은 기술 분석의 고전적 요소와 현대적인 리스크 관리 기법을 결합한다. SMA 크로스오버 신호, ATR 변동성 필터링, 동적 스톱 로스 및 고정 수익 목표를 통합함으로써 전략은 리스크를 제어하면서 시장 트렌드를 포착하는 것을 목표로 한다. 일부 고유 한 한계들이 존재하지만, 지속적인 최적화와 적응적 조정을 통해 이 전략은 견고한 거래 시스템으로 발전할 가능성이 있다. 이 전략을 사용하는 거래자는 매개 변수 선택과 백테스팅에 주의를 기울이고, 특정 시장 조건과 개인적인 리스크 선호도에 따라 사용자 정의해야 한다.


/*backtest
start: 2024-06-30 00:00:00
end: 2024-07-30 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("SMA Crossover Strategy with Volatility Filter", overlay=true)

// Define input parameters
shortSMA = input.int(10, title="Short SMA Length", minval=1)
longSMA = input.int(200, title="Long SMA Length", minval=1)
sma200Length = 200
atrLength = input.int(14, title="ATR Length", minval=1)
atrMultiplier = input.float(1.0, title="ATR Multiplier", minval=0.1)

// Calculate SMAs
smaShort = ta.sma(close, shortSMA)
smaLong = ta.sma(close, longSMA)
sma200 = ta.sma(close, sma200Length)

// Calculate ATR for volatility
atr = ta.atr(atrLength)

// Plot SMAs
plot(smaShort, color=color.blue, title="Short SMA")
plot(smaLong, color=color.red, title="Long SMA")
plot(sma200, color=color.green, title="200 SMA")

// Calculate stop loss levels
stopLossLong = sma200 * 0.999
stopLossShort = sma200 * 1.001

// Initialize take profit levels
var float takeProfitLong = na
var float takeProfitShort = na

// Generate buy/sell signals
longCondition = ta.crossover(smaShort, smaLong) and atr > atrMultiplier * ta.sma(atr, atrLength)
shortCondition = ta.crossunder(smaShort, smaLong) and atr > atrMultiplier * ta.sma(atr, atrLength)

// Execute trades with stop loss and take profit
if (longCondition)
    strategy.entry("Long", strategy.long)
    takeProfitLong := close + 7.5
    strategy.exit("Long Exit", "Long", stop=stopLossLong, limit=takeProfitLong)

if (shortCondition)
    strategy.entry("Short", strategy.short)
    takeProfitShort := close - 7.5
    strategy.exit("Short Exit", "Short", stop=stopLossShort, limit=takeProfitShort)

// Plot stop loss and take profit levels on chart
plot(strategy.position_size > 0 ? stopLossLong : na, style=plot.style_cross, color=color.red, title="Stop Loss Long")
plot(strategy.position_size > 0 ? takeProfitLong : na, style=plot.style_cross, color=color.green, title="Take Profit Long")
plot(strategy.position_size < 0 ? stopLossShort : na, style=plot.style_cross, color=color.red, title="Stop Loss Short")
plot(strategy.position_size < 0 ? takeProfitShort : na, style=plot.style_cross, color=color.green, title="Take Profit Short")

관련

더 많은