
이 전략은 지수 이동 평균(EMA) 교차와 평균 진폭 범위(ATR)를 결합한 거래 시스템으로, 역동적인 위험 관리를 달성합니다. 이 전략은 단기 및 장기 EMA 라인을 사용하여 가격 추세의 모멘텀 변화를 포착하고, ATR을 사용하여 이익 실현 및 손절매 포지션을 동적으로 설정하여 거래 위험을 정확하게 통제합니다.
이 전략의 핵심 논리는 서로 다른 기간(9와 21)의 두 지수 이동 평균의 교차 신호에 기초합니다. 단기 EMA가 장기 EMA를 위로 교차하면 롱 신호가 생성되고, 단기 EMA가 장기 EMA를 아래로 교차하면 숏 신호가 생성됩니다. 위험을 더 잘 관리하기 위해 이 전략은 14기간 ATR을 기반으로 한 동적 손절매 및 손절매 메커니즘을 도입합니다. 손절매 수준은 ATR의 2배로 설정되고 손절매 수준은 ATR의 1배로 설정됩니다. 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)