이 전략은 지수 이동 평균 (EMA) 크로스오버를 기반으로 한 거래 시스템으로, 동적 리스크 관리를 위해 평균 진정한 범위 (ATR) 와 결합됩니다. 이 전략은 단기 및 장기 EMA 라인을 사용하여 가격 트렌드의 동력 변화를 포착하며, ATR을 사용하여 동적으로 이윤 및 스톱 로스 수준을 설정하여 거래 리스크에 대한 정확한 통제를 달성합니다.
전략의 핵심 논리는 서로 다른 기간의 두 EMA (9 및 21) 사이의 교차 신호에 기반합니다. 단기 EMA가 장기 EMA를 넘을 때 구매 신호가 생성되며 단기 EMA가 장기 EMA를 넘을 때 판매 신호가 생성됩니다. 위험을 더 잘 관리하기 위해 전략은 14 기간 ATR에 기반한 동적 인 수익 및 스톱 로스 메커니즘을 통합하여 수익을 2x ATR로 설정하고 손실을 1x ATR로 중지하여 적절한 위험 통제를 유지하면서 충분한 수익 잠재력을 보장합니다.
이 전략은 고전적인 EMA 크로스오버 시스템을 동적 ATR 위험 관리와 결합하여 포괄적인 거래 시스템을 만듭니다. 주요 강점은 동적 위험 관리 기능과 효과적인 트렌드 추적 특성입니다. 제안된 최적화 방향을 통해 추가 개선의 여지가 있습니다. 라이브 거래 구현을 위해 특정 시장 특성에 따라 적절한 조정을 통해 철저한 백테스팅과 매개 변수 최적화를 수행하는 것이 좋습니다.
/*backtest start: 2019-12-23 08:00:00 end: 2025-01-04 08:00:00 period: 1d basePeriod: 1d exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Improved EMA Crossover Strategy", overlay=true) // User-defined inputs for EMAs shortTermLength = input(9, title="Short-Term EMA Length") longTermLength = input(21, title="Long-Term EMA Length") // Dynamic Take Profit and Stop Loss atrLength = input(14, title="ATR Length") atrMultiplierTP = input(2.0, title="ATR Multiplier for Take Profit") atrMultiplierSL = input(1.0, title="ATR Multiplier for Stop Loss") // Calculate EMAs and ATR shortTermEMA = ta.ema(close, shortTermLength) longTermEMA = ta.ema(close, longTermLength) atr = ta.atr(atrLength) // Plot the EMAs plot(shortTermEMA, color=color.blue, title="Short-Term EMA") plot(longTermEMA, color=color.red, title="Long-Term EMA") // Generate Entry Conditions longCondition = ta.crossover(shortTermEMA, longTermEMA) shortCondition = ta.crossunder(shortTermEMA, longTermEMA) // Optional Debugging: Print conditions (you can remove this later) var label longLabel = na var label shortLabel = na if longCondition longLabel := label.new(bar_index, high, "Buy Signal", color=color.green, style=label.style_label_down, textcolor=color.white) if shortCondition shortLabel := label.new(bar_index, low, "Sell Signal", color=color.red, style=label.style_label_up, textcolor=color.white) if (longCondition) strategy.entry("Long", strategy.long) strategy.exit("Long Exit", "Long", limit=close + atr * atrMultiplierTP, stop=close - atr * atrMultiplierSL) if (shortCondition) strategy.entry("Short", strategy.short) strategy.exit("Short Exit", "Short", limit=close - atr * atrMultiplierTP, stop=close + atr * atrMultiplierSL)