
이 전략은 지수 이동 평균 ((EMA) 과 실제 변동의 폭 ((ATR) 에 기반한 손실 메커니즘을 결합한 트렌드 추적 거래 시스템입니다. 전략은 9주기 및 21주기 EMA를 사용하여 시장의 흐름을 식별하고 ATR을 동적으로 사용하여 스톱 포지션을 조정하여 트렌드 추적과 위험 제어의 유기적인 결합을 구현합니다.
전략의 핵심 논리는 두 가지 주요 부분을 포함합니다: 트렌드 판단과 위험 제어. 트렌드 판단의 측면에서, 빠른 EMA ((9주기) 와 느린 EMA ((21주기) 의 교차를 모니터링하여 시장의 흐름을 결정합니다. 빠른 라인을 통과하면 멀티 신호를 유발하고, 빠른 라인을 통과하면 빈 신호를 유발합니다. 위험 제어의 측면에서, 전략은 ATR 지표를 사용하여 동적 중지 손실 위치를 계산합니다. 구체적으로, 다중 상점 포지션의 손실 스톱 포지션은 출입 가격의 ATR 값을 1.5배 줄이고, 빈 상점 포지션의 손실 스톱 포지션은 출입 가격에 ATR 값을 1.5배 추가합니다.
이 전략은 평평선 교차 판단 트렌드와 ATR 다이내믹 스톱로드를 결합하여 완전한 트렌드 추적 거래 시스템을 구축한다. 전략의 장점은 표준 객관성을 판단하고, 위험 제어 유연성을 판단하는 데 있지만, 흔들림 시장 위험과 신호 지연 문제에 대해서도 주의를 기울여야 한다. 트렌드 강도 확인, 스톱로드 설정을 최적화하는 등의 방법을 추가함으로써 전략에는 큰 개선 공간이 있다.
/*backtest
start: 2024-02-20 00:00:00
end: 2024-05-31 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"TRB_USDT"}]
*/
//@version=5
strategy("EMA 9/21 + ATR SL Strategy", shorttitle="EMA+ATR", overlay=true)
// ===== Input Parameters ===== //
emaFastLen = input.int(9, "Fast EMA")
emaSlowLen = input.int(21, "Slow EMA")
atrLen = input.int(14, "ATR Length")
atrMult = input.float(1.5, "ATR Multiplier")
// ===== EMA Calculation ===== //
emaFast = ta.ema(close, emaFastLen)
emaSlow = ta.ema(close, emaSlowLen)
// ===== ATR Calculation ===== //
atrValue = ta.atr(atrLen)
// ===== Conditions for Entry ===== //
longCondition = ta.crossover(emaFast, emaSlow) // Long when 9 EMA crosses above 21 EMA
shortCondition = ta.crossunder(emaFast, emaSlow) // Short when 9 EMA crosses below 21 EMA
// ===== Entry Commands ===== //
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
// ===== Set Stop-Loss Using ATR ===== //
//
// For LONG: stop-loss = entry price - (atrMult * ATR)
// For SHORT: stop-loss = entry price + (atrMult * ATR)
//
// Note: You can adjust the atrMult values based on market volatility
//
if strategy.position_size > 0
// If holding LONG, define stop-loss below the entry price
strategy.exit("Exit Long", "Long", stop = strategy.position_avg_price - atrMult * atrValue)
if strategy.position_size < 0
// If holding SHORT, define stop-loss above the entry price
strategy.exit("Exit Short", "Short", stop = strategy.position_avg_price + atrMult * atrValue)