이 전략은 다기간 간단한 이동 평균 (SMA) 크로스오버와 변동성 필터를 결합한 양적 거래 전략이다. 이 전략은 단기 및 장기적인 SMA의 크로스오버를 사용하여 거래 신호를 생성하며, 거짓 신호를 줄이기 위해 평균 진정한 범위 (ATR) 지표를 변동성 필터로 사용합니다. 이 전략은 또한 200일 이동 평균과 고정 수익 목표를 기반으로 동적 스톱 로스 수준을 통합하여 위험 관리를 최적화하고 수익성을 향상시키는 것을 목표로합니다.
이동 평균 크로스오버 신호: 이 전략은 단기 (10일) 및 장기 (200일) SMA의 크로스오버를 사용하여 구매 및 판매 신호를 생성합니다. 단기 SMA가 장기 SMA 위에 넘어가면 긴 신호가 생성되며, 아래로 넘어가면 짧은 신호가 생성됩니다.
변동성 필터: 14일 ATR은 변동성 지표로 사용됩니다. 현재 ATR이 14일 평균의 특정 배수 (사용자 정의 ATR 곱셈자에 의해 결정) 이상일 때만 거래 신호가 실행됩니다. 이것은 낮은 변동성 기간 동안 잠재적 인 잘못된 신호를 필터링하는 데 도움이됩니다.
동적 스톱 로스: 이 전략은 동적 스톱 로스 레벨의 기준으로 200일 SMA를 사용합니다. 장 포지션의 스톱 로스는 200일 SMA의 99.9%로 설정되며, 단위 포지션의 경우 200일 SMA의 100.1%로 설정됩니다.
고정 수익 목표: 전략은 각 거래에 대해 고정 수익 목표를 설정합니다. 긴 거래의 수익 목표는 입시 가격 더하기 7.5 가격 단위, 짧은 거래의 경우 입시 가격 빼기 7.5 가격 단위입니다.
다중 신호 확인: 이동 평균 크로스오버와 변동성 필터링을 결합함으로써 전략은 잘못된 신호의 위험을 줄이고 거래 신뢰성을 향상시킵니다.
동적 리스크 관리: 200일 SMA를 기반으로 한 동적 스톱 로스 사용은 전략이 변화하는 시장 조건에 적응하여 보다 유연한 리스크 통제를 제공합니다.
명확 한 이윤 목표: 고정 된 이윤 목표 는 실현 된 이윤 을 보호 하고 과도 한 탐욕 으로 인해 발생하는 마감 을 방지 하는 데 도움 이 된다.
높은 적응력: 전략 매개 변수들은 다른 시장과 거래 도구에 맞게 조정될 수 있으며, 전략의 다재다능성을 향상시킵니다.
시각 보조: 전략은 차트에서 다양한 SMA 라인, 스톱 로스 및 수익 목표 수준을 그래프로 표시하여 거래자에게 직관적인 시장 분석 도구를 제공합니다.
이동 평균에서 지연: SMA는 본질적으로 지연 지표이며, 빠르게 변화하는 시장에서 지연 신호를 생성하여 비시간 입출로 이어질 수 있습니다.
과잉 거래: 명확한 트렌드가 없는 매우 변동적인 시장에서 전략은 거래 비용을 증가시키는 너무 많은 거래 신호를 생성 할 수 있습니다.
고정 수익 목표의 한계: 고정 수익 목표가 강력한 추세에 따라 조기 포지션 폐쇄로 이어질 수 있으며 잠재적인 수익을 제한할 수 있습니다.
특정 시장 조건에 대한 의존성: 전략은 트렌드 시장에서 잘 수행되지만, 시장의 범위 또는 빠르게 역전되는 시장에서 저조한 성과를 낼 수 있습니다.
매개 변수 민감성: 전략의 성능은 선택된 매개 변수에 크게 달려 있습니다. 잘못된 매개 변수 설정은 전략 성능이 떨어질 수 있습니다.
동적 매개 변수 조정: 다른 시장 환경에 적응하기 위해 시장 조건에 따라 동적으로 SMA 기간과 ATR 곱셈을 조정하는 것을 고려하십시오.
트렌드 강도 필터 추가: 강한 트렌드 시장에서 거래 할 수 있도록 ADX와 같은 추가 트렌드 강도 지표를 도입하십시오.
수익 목표를 최적화하십시오: 시장 변동에 더 잘 적응하기 위해 ATR 또는 최근의 가격 변동 범위에 기반한 것과 같은 동적 수익 목표를 사용하는 것을 고려하십시오.
부분적인 포지션 폐쇄를 도입: 일부 수익을 차단하고 나머지 포지션이 수익을 계속 할 수 있도록 특정 수익 수준에서 부분적인 포지션 폐쇄를 구현하십시오.
시장 체제 인식을 통합합니다: 다른 시장 상태를 식별하는 알고리즘을 개발합니다 (예를 들어, 트렌드, 범위, 높은 변동성) 및 전략 매개 변수를 조정하거나 그에 따라 거래를 중지하십시오.
스톱 로스 메커니즘을 강화합니다. 더 유연한 리스크 관리를 제공하기 위해 지원/저항 수준에 기반한 트레일링 스톱 또는 스톱 로스를 사용하는 것을 고려하십시오.
이 다기 이동 평균 크로스오버 전략은 기술 분석의 고전적 요소와 현대적인 리스크 관리 기법을 결합한다. 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")