
이 전략은 평균 실제 범위에 기반한 동적 추적 스톱 손실 거래 시스템이며, EMA 일선 필터링 신호와 결합되어 시장 추세 전환점을 포착하고 거래를 수행합니다. 전략의 핵심은 ATR 값을 통해 동적 스톱 손실을 계산하여 가격과 스톱 손실이 교차 할 때 거래 신호를 유발합니다. 이 전략은 특정 날짜 범위에서 재검토 할 수 있도록 설계되었으며, 특히 15 분 시간 프레임과 평화 스라이드 차트 (Heikin Ashi) 에서 작동하는 것이 소음을 줄이고 추세 변화를 더 명확하게 식별하는 데 도움이됩니다.
이 전략의 핵심 논리는 ATR 지표에 기반한 동적 추적 중지 시스템이다. 구체적인 작동 원리는 다음과 같다:
전체 거래 논리는 트렌드 추적 시스템과 비슷하지만, ATR을 통해 스톱 로지를 동적으로 조정하여 전략이 다양한 변동률 환경에 적응할 수 있도록 한다.
이 전략의 코드에 대한 깊은 분석을 통해 다음과 같은 몇 가지 중요한 장점을 정리할 수 있습니다.
이 전략은 많은 장점들을 가지고 있지만, 실제 적용에서는 다음과 같은 위험들을 가지고 있습니다.
해결책:
코드 분석을 바탕으로, 이 전략은 다음과 같은 방향으로 최적화될 수 있습니다:
신호 필터링 강화:
동적 변수 조정:
포지션 관리 최적화:
제동장치를 추가:
시간 필터 개선:
다중 시간 프레임 분석:
이러한 최적화 방향이 중요한 이유는 전략의 안정성을 크게 향상시킬 수 있기 때문입니다. 특히 신호 필터링과 동적 파라미터 조정을 추가하면 가짜 신호를 줄일 수 있으며, 포지션 관리 및 차단 메커니즘을 개선하면 자금 사용 효율성과 리스크 수익률을 최적화 할 수 있습니다.
ATR 다이내믹 트래킹 스톱로스 양적 거래 전략은 ATR 지표와 EMA를 결합하여 시장의 변동성에 적응할 수 있는 다이내믹 스톱로스 메커니즘을 만드는 정교하게 설계된 트렌드 트래킹 시스템입니다. 이 전략의 가장 큰 장점은 다양한 시장 조건에 따라 자동으로 스톱로스 거리를 조정할 수 있는 적응성과 간결성이며, 논리적으로 명확하게 작동합니다.
그러나, 이 전략은 흔들리는 시장에서 잘 작동하지 않을 수 있으며, 단일 지표 시스템에 과도하게 의존한다. 추가 신호 필터링을 추가하고, 매개 변수 조정 메커니즘을 최적화하고, 포지션 관리를 개선하고, 정지 전략을 추가함으로써, 그 성능을 크게 향상시킬 수 있다.
거래자에게는 개인 거래 스타일과 목표 시장 특성에 따라 사용자 정의 및 확장 할 수있는 훌륭한 기본 전략 프레임 워크입니다. 실제 적용 전에 다른 파라미터 조합과 시장 환경에 대한 충분한 피드백을 수행하고 다른 기술 지표와 결합하여 더 나은 거래 시스템을 형성하는 것을 고려하는 것이 좋습니다.
이 전략은 특히 중장기적인 추세가 뚜렷한 시장에 적합하며, 수익이 지속적으로 증가하면서 동적으로 수익을 보호함으로써 거래자에게 비교적 간단하지만 효과적인 양적 거래 솔루션을 제공합니다.
/*backtest
start: 2024-05-13 00:00:00
end: 2025-05-11 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=6
strategy("UT Bot Strategy Backtest with Date Range", overlay=true)
// === Inputs ===
keyValue = input.float(1.0, title="Key Value (Sensitivity)")
atrPeriod = input.int(10, title="ATR Period")
// === Calculations ===
xATR = ta.atr(atrPeriod)
nLoss = keyValue * xATR
src = close
// === Trailing Stop Logic ===
var float xATRTrailingStop = na
xATRTrailingStop := src > nz(xATRTrailingStop[1]) and src[1] > nz(xATRTrailingStop[1]) ?
math.max(nz(xATRTrailingStop[1]), src - nLoss) :
src < nz(xATRTrailingStop[1]) and src[1] < nz(xATRTrailingStop[1]) ?
math.min(nz(xATRTrailingStop[1]), src + nLoss) :
src > nz(xATRTrailingStop[1]) ? src - nLoss : src + nLoss
// === Signal Logic ===
emaVal = ta.ema(src, 1)
above = ta.crossover(emaVal, xATRTrailingStop)
below = ta.crossover(xATRTrailingStop, emaVal)
buySignal = src > xATRTrailingStop and above
sellSignal = src < xATRTrailingStop and below
// === Strategy Execution ===
if buySignal
strategy.close("Short")
strategy.entry("Long", strategy.long)
if sellSignal
strategy.close("Long")
strategy.entry("Short", strategy.short)
// === Visuals ===
plotshape(buySignal, title="Buy", location=location.belowbar, color=color.green, style=shape.labelup, text="Buy")
plotshape(sellSignal, title="Sell", location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell")
barcolor(buySignal ? color.green : sellSignal ? color.red : na)
// === Alerts ===
alertcondition(buySignal, title="UT Long", message="UT Long")
alertcondition(sellSignal, title="UT Short", message="UT Short")