EMA 동적 필터링 및 ATR 위험 관리 시스템과 결합된 3라인 브레이크아웃 추세 추종 전략

EMA ATR 3LS
생성 날짜: 2025-02-18 15:30:08 마지막으로 수정됨: 2025-02-18 15:30:08
복사: 1 클릭수: 353
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

EMA 동적 필터링 및 ATR 위험 관리 시스템과 결합된 3라인 브레이크아웃 추세 추종 전략

개요

이 전략은 일본 도표 기술 분석의 3선 돌파구 형태를 기반으로 한 트렌드 추적 거래 시스템이다. 동적 위험 관리를 위해 트렌드 필터로 인 지수 이동 평균 ((EMA) 과 실제 파도 지표 ((ATR) 를 결합하여 전통적인 3선 돌파구 모드의 신뢰성을 높였다. 이 전략은 시장의 트렌드 전환점을 포착할 수 있을 뿐만 아니라 위험을 효과적으로 제어할 수 있으며, 중장기 트렌드 거래에 적합하다.

전략 원칙

전략의 핵심 논리는 다음과 같은 몇 가지 핵심 요소에 기반합니다. 첫째, 3개의 연속적인 같은 색의 선 뒤에 큰 역삼락이 나타나는 3개의 선 돌파 형태를 식별합니다. 둘째, EMA를 트렌드 필터로 사용하여, 가격이 EMA 위에 있을 때만 더 많은 신호를 고려하고, EMA 아래에 있을 때만 빈 신호를 고려합니다. 마지막으로, ATR 지표를 사용하여 스톱 손실 위치를 설정합니다.

전략적 이점

  1. 방향성 트렌드 확인 및 역형 인식과 결합하여 거래 신호의 신뢰성을 향상시킵니다.
  2. 동적 스톱 스톱 손실 설정을 사용하여 시장의 변동성에 따라 적응할 수 있습니다.
  3. 명확한 전략 논리와 다양한 시장 특성에 따라 최적화할 수 있는 강력한 변수 조정
  4. EMA 필터를 통해 가짜 신호를 현저히 줄이고 전략의 안정성을 향상시킵니다.
  5. 자금 관리 및 손해 방지 장치를 포함하는 완전한 위험 관리 시스템

전략적 위험

  1. 불안한 시장에서 빈번하게 잘못된 신호가 발생하여 연속적인 정지 손실을 초래할 수 있습니다.
  2. EMA는 지연된 지표로서 급격한 변동이 있을 때 적절하게 반응하지 않을 수 있습니다.
  3. 고정 배수의 ATR 중지 손실 설정은 모든 시장 환경에 적합하지 않을 수 있습니다.
  4. 전략은 명확한 트렌드 방향에 의존하며, 트렌드 없는 기간에는 좋지 않을 수 있습니다.
  5. 입구시기의 정확성은 K선 주기 선택에 영향을 많이 받는다.

전략 최적화 방향

  1. 신호 신뢰성을 높이기 위해 보조 확인으로 트랜스포트 지표를 도입
  2. 다양한 시장 주기적 역동성에 따라 EMA 매개 변수를 조정하여 적응력을 높여줍니다.
  3. 트렌드 강도 필터를 증가시켜 ADX 지표와 같은 추세 강도 필터를 증가시켜 흔들리는 시장에서 잘못된 신호를 줄여줍니다.
  4. 정지 손실 배수를 최적화 하 고 변동률에 따라 동적으로 조정 할 수 있습니다.
  5. 시장 환경 식별 메커니즘을 추가하여 다른 시장 상태에서 다른 매개 변수 설정을 사용합니다.

요약하다

이것은 기술 분석의 고전적 이론과 현대적인 양적 거래 사상을 결합한 전략 시스템이다. 전통적인 3선 돌파구 형태를 트렌드 추적 및 위험 관리와 결합하여 비교적 완전한 거래 시스템을 구축한다. 제한 사항이 있음에도 불구하고 최적화 방향을 제공함으로써 전략의 안정성과 적응성을 더욱 향상시킬 수 있다. 전략의 성공적인 적용은 거래자가 시장 특성을 깊이 이해하고 특정 상황에 따라 변수를 조정해야합니다.

전략 소스 코드
/*backtest
start: 2025-01-18 00:00:00
end: 2025-02-17 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// Copyright ...
// Based on the TMA Overlay by Arty, converted to a simple strategy example.
// Pine Script v5

//@version=5
strategy(title='3 Line Strike [TTF] - Strategy with ATR and EMA Filter',
     shorttitle='3LS Strategy [TTF]',
     overlay=true,
     initial_capital=100000,
     default_qty_type=strategy.percent_of_equity,
     default_qty_value=100,
     pyramiding=0)

// -----------------------------------------------------------------------------
//                               INPUTS
// -----------------------------------------------------------------------------

// ATR and EMA Inputs
atrLength = input.int(title='ATR Length', defval=14, group='ATR & EMA')
emaLength = input.int(title='EMA Length', defval=200, group='ATR & EMA')

// ### 3 Line Strike
showBear3LS = input.bool(title='Show Bearish 3 Line Strike', defval=true, group='3 Line Strike',
     tooltip="Bearish 3 Line Strike (3LS-Bear) = 3 zelené sviečky, potom veľká červená sviečka (engulfing).")
showBull3LS = input.bool(title='Show Bullish 3 Line Strike', defval=true, group='3 Line Strike',
     tooltip="Bullish 3 Line Strike (3LS-Bull) = 3 červené sviečky, potom veľká zelená sviečka (engulfing).")

// -----------------------------------------------------------------------------
//                          CALCULATIONS
// -----------------------------------------------------------------------------

// Calculate ATR
atr = ta.atr(atrLength)

// Calculate EMA
ema = ta.ema(close, emaLength)

// Helper Functions
getCandleColorIndex(barIndex) =>
    int ret = na
    if (close[barIndex] > open[barIndex])
        ret := 1
    else if (close[barIndex] < open[barIndex])
        ret := -1
    else
        ret := 0
    ret

isEngulfing(checkBearish) =>
    sizePrevCandle = close[1] - open[1]
    sizeCurrentCandle = close - open
    isCurrentLargerThanPrevious = math.abs(sizeCurrentCandle) > math.abs(sizePrevCandle)

    if checkBearish
        isGreenToRed = (getCandleColorIndex(0) < 0) and (getCandleColorIndex(1) > 0)
        isCurrentLargerThanPrevious and isGreenToRed
    else
        isRedToGreen = (getCandleColorIndex(0) > 0) and (getCandleColorIndex(1) < 0)
        isCurrentLargerThanPrevious and isRedToGreen

isBearishEngulfing() => isEngulfing(true)
isBullishEngulfing() => isEngulfing(false)

is3LSBear() =>
    is3LineSetup = (getCandleColorIndex(1) > 0) and (getCandleColorIndex(2) > 0) and (getCandleColorIndex(3) > 0)
    is3LineSetup and isBearishEngulfing()

is3LSBull() =>
    is3LineSetup = (getCandleColorIndex(1) < 0) and (getCandleColorIndex(2) < 0) and (getCandleColorIndex(3) < 0)
    is3LineSetup and isBullishEngulfing()

// Signals
is3LSBearSig = is3LSBear() and close < ema
is3LSBullSig = is3LSBull() and close > ema

// Take Profit and Stop Loss
longTP = close + 2 * atr
longSL = close - 1 * atr
shortTP = close - 2 * atr
shortSL = close + 1 * atr

// -----------------------------------------------------------------------------
//                          STRATEGY ENTRY PRÍKAZY
// -----------------------------------------------------------------------------
if (showBull3LS and is3LSBullSig)
    strategy.entry("3LS_Bull", strategy.long, comment="3LS Bullish")
    strategy.exit("Exit Bull", from_entry="3LS_Bull", limit=longTP, stop=longSL)

if (showBear3LS and is3LSBearSig)
    strategy.entry("3LS_Bear", strategy.short, comment="3LS Bearish")
    strategy.exit("Exit Bear", from_entry="3LS_Bear", limit=shortTP, stop=shortSL)