이중 이동 평균으로 필터링된 ATR 적응형 추세 추적 전략

EMA ATR HEIKIN ASHI Trailing Stop TAKE PROFIT
생성 날짜: 2025-04-25 15:01:18 마지막으로 수정됨: 2025-04-25 15:01:18
복사: 0 클릭수: 403
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

이중 이동 평균으로 필터링된 ATR 적응형 추세 추적 전략 이중 이동 평균으로 필터링된 ATR 적응형 추세 추적 전략

개요

이 전략은 쌍평선 필터 시스템과 ATR 자율적 추적 스톱 메커니즘을 결합하여 하이킨 아시 을 통해 가격 변동을 평형화하여 높은 승률을 달성하는 트렌드 추적을 수행합니다. 전략의 핵심은 빠른 EMA와 느린 EMA의 골드 포크를 트렌드 방향 필터로 사용하여 ATR 기반의 동적 스톱을 사용하여 이익을 보호하는 것입니다.

전략 원칙

  1. 신호 생성 계층

    • Heikin Ashi 변환 후의 가격을 기본 데이터 소스로 사용함 ((스위치 가능한 원시 가격)
    • ATR 통로를 계산: ATR 길이 ((20) 와 곱하기 ((1.0) 를 통해 동적 통로 폭을 결정한다
    • 적응 트래킹 중지 구현: 가격이 채널을 뚫을 때 반향 신호를 유발합니다.
  2. 트렌드 필터

    • 이중 EMA 시스템 ((10주기 빠른 선/50주기 느린 선) 을 사용
    • 빠른 선이 느린 선보다 높을 때만 더 많이 할 수 있고, 반대로 공백을 허용합니다.
  3. 위험 관리

    • 동적 추적 스톱: trail_step 및 trail_offset 파라미터를 통해 스톱 이동 알갱이를 제어
    • 고정점 수 정지: take_profit_points 절대 수익 목표를 설정
  4. 로직 실행

    • 가격 ATR 통로를 뚫고 EMA 방향에 부합할 때 포지션을 개설합니다.
    • 역전 신호가 발생하거나 스톱로즈/스톱로즈 시 평준화

우위 분석

  1. 성공률이 높은 디자인: 트리플 필터 메커니즘 ((Heikin Ashi 평평 + ATR 채널 + EMA 교차) 가 가짜 신호를 효과적으로 감소시킵니다.
  2. 풍력 조절: ATR은 시장의 변동이 증가할 때 자동으로 오류 공간을 확장하는 스톱 포지션을 동적으로 조정합니다.
  3. 추세가 계속되고 있다EMA 필터링은 오직 큰 트렌드 방향에 맞는 거래 기회를 보장합니다.
  4. 다중 시간 프레임 호환성: 변수는 다양한 변동성 품종에 적용할 수 있습니다.
  5. 시각적 도움말: 인조적으로 확인하기 위해 구매 및 판매 신호 표시와 평선 표시가 내장되어 있습니다.

위험 분석

  1. 추세 반전 위험ATR 통로 지연은 급격한 역전 시에는 과도한 손실을 초래할 수 있습니다.
    • 최적화 프로그램: 최대 회수 하드 스피드를 증가
  2. 매개 변수가 맞지 않아90%의 승률은 특정 역사적 데이터에서 최적화 될 수 있습니다.
    • 최적화 프로그램: 다주기 워크-포워드 테스트
  3. 가로판 마모EMA 교차로: 흔들리는 도시에서 연속적인 가짜 신호를 발생시킨다
    • 최적화 옵션: ADX 필터 또는 변동률 값을 도입
  4. 슬라이드 포인트 영향트래킹 스톱 손실은 빠른 시점에 불리한 가격으로 실행될 수 있습니다.
    • 최적화 프로그램: 최소 미끄러지점 허용값을 설정

최적화 방향

  1. 동적 변수 조정

    • 시장의 변동에 따라 ATR 배수를 자동으로 조정합니다 (VIX 지수와 같이)
    • 구현 원리: 표준 격차 또는 역사 변동률의 백분율을 통해 계산
  2. 복합 필터링 시스템

    • 트랜지션 중화 확인을 추가: 트랜지션 중화 확인을 요구합니다.
    • 시간 필터를 추가: 중요한 경제 자료 발표 시간을 회피
  3. 기계 학습 최적화

    • 강도학습을 이용하여 동적으로 EMA 주기를 조정
    • LSTM를 통해 최적의 정지 지점을 예측
  4. 다차원 검증

    • 주파수 레벨의 트렌드 확인을 도입합니다.
    • RSI 이탈을 추가하여 보조 출전 신호로

요약하다

이 전략은 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')