
이 전략은 쌍평선 필터 시스템과 ATR 자율적 추적 스톱 메커니즘을 결합하여 하이킨 아시 을 통해 가격 변동을 평형화하여 높은 승률을 달성하는 트렌드 추적을 수행합니다. 전략의 핵심은 빠른 EMA와 느린 EMA의 골드 포크를 트렌드 방향 필터로 사용하여 ATR 기반의 동적 스톱을 사용하여 이익을 보호하는 것입니다.
신호 생성 계층:
트렌드 필터:
위험 관리:
로직 실행:
동적 변수 조정:
복합 필터링 시스템:
기계 학습 최적화:
다차원 검증:
이 전략은 Heikin Ashi-ATR-EMA 삼중 구조를 통해 높은 확률의 트렌드 캡처를 실현하고, 동적 스톱 로즈 메커니즘은 수익을 효과적으로 보호한다. 핵심 장점은 트렌드 방향 판단 (EMA), 변동률 적응 (ATR) 및 노이즈 필터링 (Heikin Ashi) 을 유기적으로 통합하는 데 있다. 추가적인 최적화는 파라미터 자조와 다중 인자 검증에 중점을 두어야 하며, 실제 응용에서 딱정성 풍력 조절 규칙을 사용하는 것이 좋습니다.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-23 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("UTBot + EMA Filter (HA + ATR Logic)", overlay = true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
bandwidth = input.float(8., 'Bandwidth')
atr_mult = input.float(1.0, 'ATR Multiplier')
atr_len = input.int(20, 'ATR Length')
ema_fast_len = input.int(10, 'EMA Fast Length')
ema_slow_len = input.int(50, 'EMA Slow Length')
use_heikin = input.bool(true, title='Use Heikin Ashi Candle')
trail_step = input.float(10.0, title='Trailing Step (Points)', minval=0.1)
trail_offset = input.float(10.0, title='Trailing Offset (Points)', minval=0.1)
take_profit_points = input.float(100.0, title='Take Profit (Points)', minval=0.1)
// === SOURCE ===
sr = use_heikin ? request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, close) : close
// === ATR Trailing Stop ===
atr = ta.atr(atr_len)
nLoss = atr_mult * atr
var float trail = na
iff_1 = sr > nz(trail[1]) ? sr - nLoss : sr + nLoss
iff_2 = sr < nz(trail[1]) and sr[1] < nz(trail[1]) ? math.min(nz(trail[1]), sr + nLoss) : iff_1
trail := sr > nz(trail[1]) and sr[1] > nz(trail[1]) ? math.max(nz(trail[1]), sr - nLoss) : iff_2
// === EMA FILTER ===
ema_fast = ta.ema(sr, ema_fast_len)
ema_slow = ta.ema(sr, ema_slow_len)
// === ENTRY & EXIT CONDITIONS ===
buy = sr[1] < trail[1] and sr > trail and ema_fast > ema_slow
sell = sr[1] > trail[1] and sr < trail and ema_fast < ema_slow
// === EXIT on opposite signal ===
exit_buy = sell
exit_sell = buy
// === STRATEGY EXECUTION ===
if buy
strategy.entry("Buy", strategy.long)
if sell
strategy.entry("Sell", strategy.short)
if exit_buy and strategy.position_size > 0
strategy.close("Buy")
if exit_sell and strategy.position_size < 0
strategy.close("Sell")
// === TRAILING STOP + TAKE PROFIT ===
// Long
if strategy.position_size > 0
strategy.exit("Exit Long", from_entry="Buy", trail_points=trail_step, trail_offset=trail_offset, limit=sr + take_profit_points)
// Short
if strategy.position_size < 0
strategy.exit("Exit Short", from_entry="Sell", trail_points=trail_step, trail_offset=trail_offset, limit=sr - take_profit_points)
// === PLOTS ===
plotshape(buy, title='Buy Signal', text='Buy', location=location.belowbar, color=color.green, style=shape.labelup, textcolor=color.white, size=size.tiny)
plotshape(sell, title='Sell Signal', text='Sell', location=location.abovebar, color=color.red, style=shape.labeldown, textcolor=color.white, size=size.tiny)
plot(ema_fast, color=color.teal, title='EMA Fast')
plot(ema_slow, color=color.purple, title='EMA Slow')
// === ALERTS ===
alertcondition(buy, title='UTBot Buy', message='UTBot Buy Signal')
alertcondition(sell, title='UTBot Sell', message='UTBot Sell Signal')