ADX 필터와 결합된 Three Line Breakout Momentum Trend Following 전략

ADX ATR TMA TP SL 3LS
생성 날짜: 2025-02-20 17:46:30 마지막으로 수정됨: 2025-02-20 17:46:30
복사: 0 클릭수: 459
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

ADX 필터와 결합된 Three Line Breakout Momentum Trend Following 전략 ADX 필터와 결합된 Three Line Breakout Momentum Trend Following 전략

개요

이 전략은 삼선 돌파 형태와 ADX 트렌드 필터링에 기반한 트렌드 추적 거래 시스템이다. 이 전략은 3개의 연속 동향 후의 돌파 형태를 식별하여 ADX 지표와 결합하여 트렌드 강도를 확인하고 ATR을 사용하여 동적으로 스톱 스톱 손실 위치를 설정한다. 이 방법은 입문 신호의 신뢰성을 보장하면서도 위험을 효과적으로 제어할 수 있다.

전략 원칙

전략의 핵심 논리에는 다음과 같은 핵심 요소가 포함됩니다.

  1. 삼선 돌파 형태 식별: 다중 머리 형태는 3개의 연속적인 음선 이후에 더 큰 음선 돌파가 발생한다. 공허 머리 형태는 3개의 연속적인 음선 이후에 더 큰 음선 돌파가 발생한다.
  2. ADX 트렌드 강도 확인: 현재 트렌드 강도를 판단하기 위해 ADX 지표를 사용하며, ADX 값이 설정된 스레드값 (기본 25) 을 초과할 때만 거래 신호를 발생시킨다.
  3. ATR 다이내믹 스톱 로즈: ATR 값을 동적으로 사용하여 스톱 및 스톱 로즈 위치를 계산합니다. 여기서 스톱은 2배의 ATR으로 설정되며, 스톱 로즈는 1배의 ATR으로 설정됩니다.
  4. 거래 실행 논리: 형태 인식 및 트렌드 강도 조건이 충족되면 시스템이 자동으로 포지션 개시 작업을 수행하고 동시에 해당 스톱 스로드를 설정합니다.

전략적 이점

  1. 신호 신뢰성: 가격 형태와 트렌드 지표의 이중 확인과 결합하여 거래 신호의 신뢰성을 크게 향상시킵니다.
  2. 위험 제어 합리적인: ATR 동적 설정을 사용하여 스톱 스톱 손실, 시장의 변동성에 따라 적응할 수 있는 위험 제어 매개 변수를 조정할 수 있다.
  3. 체계화 수준: 전략 논리가 명확하고, 매개 변수가 조정 가능하며, 체계화 거래가 용이하다.
  4. 적응력: 다양한 시장과 시간대에 적용할 수 있으며, 좋은 보편성을 가지고 있다.

전략적 위험

  1. 가짜 브레이크 위험: 불안한 시장에서 가짜 브레이크 신호가 발생하여 거래 손실이 발생할 수 있습니다.
  2. 슬라이드 리스크: 전략적으로 시가입을 사용함으로써 유동성이 낮은 시장에서 눈에 띄는 슬라이드 위험이 발생할 수 있다.
  3. 매개 변수 민감성: 전략 효과는 ADX 마이너스 및 ATR 주기와 같은 매개 변수에 민감하며, 다른 시장에 대한 최적화가 필요합니다.
  4. 트렌드 의존성: 전략은 흔들리는 시장에서 좋지 않을 수 있으며, 트렌드가 뚜렷한 시장 환경에 더 적합하다.

전략 최적화 방향

  1. 형태 인식 강화: 선의 실체와 그림자 선의 비율을 고려하는 것과 같은 더 많은 가격 형태 검증 조건을 추가할 수 있다.
  2. 트렌드 확인 개선: MACD 또는 이동 평균의 교차와 같은 다른 트렌드 지표가 보조 확인으로 도입될 수 있다.
  3. 정지 중지 손실 최적화: 다른 시장 특성의 역동성에 따라 ATR 배수를 조정할 수 있으며, 또는 추적 중지 방법을 채택할 수 있다.
  4. 거래 시간 최적화: 거래 시간 필터를 추가하여 시장 변동성이 높은 시간에 거래하는 것을 피할 수 있습니다.

요약하다

삼선 돌파 동력 트렌드 추적 전략은 클래식 가격 형태와 기술 지표를 결합한 완전한 거래 시스템이다. ADX 트렌드 필터링과 ATR 동적 리스크 컨트롤을 통해, 이 전략은 거래 기회를 보장하면서도 위험을 더 잘 통제한다. 일부 한계가 있지만, 합리적인 매개 변수 최적화와 전략 개선을 통해 이 전략은 실전 응용 가치가 있다.

전략 소스 코드
/*backtest
start: 2024-08-11 00:00:00
end: 2025-02-19 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Binance","currency":"ETH_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 ADX 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 ADX Inputs
atrLength = input.int(title='ATR Length', defval=14, group='ATR & ADX')
adxLength = input.int(title='ADX Length', defval=14, group='ATR & ADX')
adxThreshold = input.float(title='ADX Threshold', defval=25, group='ATR & ADX')

// ### 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 ADX components manually
tr = ta.tr(true)
plusDM = ta.change(high) > ta.change(low) and ta.change(high) > 0 ? ta.change(high) : 0
minusDM = ta.change(low) > ta.change(high) and ta.change(low) > 0 ? ta.change(low) : 0
smoothedPlusDM = ta.rma(plusDM, adxLength)
smoothedMinusDM = ta.rma(minusDM, adxLength)
smoothedTR = ta.rma(tr, adxLength)

plusDI = (smoothedPlusDM / smoothedTR) * 100
minusDI = (smoothedMinusDM / smoothedTR) * 100

dx = math.abs(plusDI - minusDI) / (plusDI + minusDI) * 100
adx = ta.rma(dx, adxLength)

// 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 adx > adxThreshold
is3LSBullSig = is3LSBull() and adx > adxThreshold

// 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)