트렌드 풀백 전문가 전략: 다우 이론과 ADX 필터링 모멘텀 모델

趋势 回调 道氏理论 ADX EMA 市场结构 止损 止盈 风险管理 HH/HL LH/LL
생성 날짜: 2025-07-14 11:22:46 마지막으로 수정됨: 2025-07-14 11:22:46
복사: 0 클릭수: 249
avatar of ianzeng123 ianzeng123
2
집중하다
319
수행원

트렌드 풀백 전문가 전략: 다우 이론과 ADX 필터링 모멘텀 모델 트렌드 풀백 전문가 전략: 다우 이론과 ADX 필터링 모멘텀 모델

개요

트렌드 리바이스 전문 전략은 다우시 이론의 핵심 원칙에 기반한 거래 시스템으로, 트렌드에서 확립된 리바이스 기회를 식별하고 거래하는 것을 목적으로 한다. 이 전략은 시장 구조 ((고위점과 저점의 중심축) 을 통해 트렌드 방향을 결정하고, 지수 이동 평균 ((EMA) 를 사용하여 리바이스가 출전할 때를 정확하게 결정한다. 거래 품질을 높이고 시장의 흔들림을 피하기 위해, 전략은 평균 방향 지수 ((ADX) 필터를 통합하여 트렌드가 충분한 동력을 가질 때만 거래하도록 한다.

전략 원칙

이 전략의 논리는 크게 세 가지 핵심 단계로 나뉘어집니다.

1단계: 동향을 결정하는 것

  • 최근 요점을 분석하여 주요 트렌드를 파악합니다.
  • 전략이 더 높은 고점과 더 높은 낮은 점 (HH/HL) 의 패턴을 감지할 때,상승 추세
  • 더 낮은 고점과 더 낮은 낮은 점 (LH/LL) 의 패턴을 검출할 때,감소 추세
  • 두 가지 모델이 존재하지 않으면, 전략은 시장이 간격 변동에 있다고 생각하며 거래를 추구하지 않습니다.

2 단계: 입성 신호 (EMA로 회귀)

  • 명확한 추세가 형성되면 가격 조정까지 기다립니다.
  • 다중 입단“상승이 확정된 가운데, 가격이 재조정되고,실패지명된 EMA 때, 다수 상위 포지션을 시작
  • 공허 입원“가격이 상승하고, 가격이 상승하는 것을 확인한 추세에서”돌파구EMA 때, 공백 포지션을 시작합니다.

3단계: 확인과 위험 관리

  • ADX 필터: 트렌드가 충분히 강하다는 것을 보장하기 위해, ADX 값이 사용자 정의한 하위값 (예: 25) 보다 높을 때만 입수 신호가 검증된다. 이것은 흔들림이나 시장 내의 약한 신호를 필터링하는 데 도움이 된다.
  • 상쇄: 초기 스톱 로즈는 자동적으로 그리고 논리적으로 마지막 시장 구조 지점에 배치됩니다:
    • 다중 거래의 경우,lastPivotLow(마지막 하위 축)
    • 공짜 거래의 경우,lastPivotHigh(최후의 고도 축)
  • : 사용자 정의의 리스크 수익률 ((R:R) 을 기반으로 두 개의 정지 레벨을 계산한다. 전략은 첫 번째 목표 ((TP1) 부분에서 이익을 얻을 수 있으며, 나머지 포지션은 두 번째 목표 ((TP2) 로 이동됩니다.

전략적 이점

코드 분석을 통해, 이 전략은 다음과 같은 중요한 장점을 가지고 있다고 결론을 내릴 수 있습니다:

  1. 시장 구조에 기반한 트렌드 식별전략: 도스트 이론의 핵심 원칙을 사용하여 지표에 의존하는 대신 고점과 저점의 중심축을 통해 시장 추세를 파악하여 더 신뢰할 수있는 추세 확인을 제공합니다.

  2. 객관적인 입시 조건: 명확하게 정의된 가격과 EMA의 교차 관계를 통해 입시점을 결정하여 주관적인 판단을 줄이고 거래 결정을 더 일관되고 반복할 수 있도록합니다.

  3. 동적 위험 관리: 정지점은 고정된 비율이나 점수를 사용하는 대신 시장 구조에 따라 자동으로 설정됩니다. 이는 정지점이 현재 시장 상황에 적합하고 합리적인 것을 보장합니다.

  4. 유연한 수익 전략이중 정지 목표: 이중 정지 목표는 거래자가 초기 목표에 도달했을 때 수익의 일부를 잠금하는 동시에 더 큰 움직임을 잡기 위해 남은 포지션을 유지하도록 허용합니다.

  5. 시장 상태 필터ADX 필터: ADX 필터는 트렌드 없는 또는 약한 트렌드 시장에서 거래하는 것을 피하고, 트렌드 동력이 충분히 강할 때만 시장에 진입합니다.

  6. 매우 적응력이 좋다조정 가능한 매개 변수들 (축축 회귀 기간, EMA 길이 및 ADX 절벽과 같은) 을 통해, 전략은 다른 시장과 시간 프레임의 특성에 적응할 수 있습니다.

  7. 전체 거래 순환전략: 트렌드 식별, 입문 시점, 위험 관리, 퇴출 전략까지의 전체 거래 순환을 다루는 전략으로, 전체적인 거래 시스템을 제공합니다.

전략적 위험

이 전략은 합리적으로 설계되었지만 몇 가지 잠재적인 위험과 한계가 있습니다.

  1. 트렌드 변화 지연: 축점 기반의 트렌드 식별은 본질적으로 지연되어 있으며, 트렌드가 반전되기 시작했을 때 트렌드 변화를 확인하는 결과를 초래할 수 있습니다. 이는 빠르게 변화하는 시장에서 특히 뚜렷합니다.

  2. 가짜 회신강세를 보인 경우, 가격이 EMA 수준으로 깊숙이 회수되지 않을 수 있으며, 이는 놓친 거래 기회를 초래할 수 있습니다. 반대로, 변동 시장에서는 여러 가지 가짜 회수 신호가 발생할 수 있습니다.

  3. 과도한 과열: 너무 높은 ADX 하락은 유리한 거래 기회를 놓칠 수 있으며, 너무 낮은 하락은 약한 트렌드 조건을 효과적으로 필터링 할 수 없습니다

  4. 매개변수 민감도전략 성능은 매개 변수 설정 (특히 축 회귀 기간 및 EMA 길이는) 에 매우 민감하며, 부적절한 매개 변수 선택은 전략의 부실한 성능을 초래할 수 있습니다.

  5. 시장환경의존성전략: 트렌드 시장을 위해 설계된 전략, 수평, 간격 또는 높은 변동성 시장에서 좋지 않을 수 있습니다.

위험 완화 방법

  • 철저한 역사 회귀를 수행하고 특정 시장과 시간 프레임에 대한 파라미터를 최적화합니다.
  • 변동률 지표 또는 트렌드 강도 확인과 같은 추가 필터를 추가하는 것을 고려하십시오.
  • 현재 시장 상황에 따라 축 회귀 기간과 EMA 길이를 조정하는 적응 변수를 적용합니다.
  • 진입 메커니즘을 수정하는 것을 고려하십시오. 예를 들어, 교차 EMA가 아닌 EMA에 가까운 가격을 신호로 사용하십시오.
  • 거래량 확인이나 다른 시장 내부 구조 지표를 추가하여 신호 품질을 향상시킵니다.

전략 최적화 방향

코드 분석을 바탕으로 다음과 같은 몇 가지 최적화 방향을 제시할 수 있습니다.

  1. 적응 변수: 동적으로 축 회귀 기간과 EMA 길이를 조정하는 메커니즘을 구현하고, 시장의 변동성이나 트렌드 강도에 따라 이러한 매개 변수를 자동으로 조정하여 다양한 시장 환경에 적응합니다.

  2. 다중 시간 프레임 분석더 높은 시간 프레임의 통합 트렌드 확인, 더 큰 트렌드 방향으로 거래하는 것을 보장하고 역동적인 거래를 피합니다.

  3. 증가 추세 확인: 현재 HH/HL 및 LH/LL 모델 외에도 트렌드 라인, 이동 평균 기울기 또는 운동량 지표와 같은 다른 추세 확인 지표를 통합하는 것을 고려하십시오.

  4. 지능형 손해 관리: 거래가 유리하게 진행되면 자동으로 중지 위치를 이동하여 수익을 보호하기 위해 스톱 손실 추적 장치를 구현합니다.

  5. 시장의 변동성 조정: 현재 시장의 변동성에 따라 조정된 리스크 수익률과 스톱 거리, 높은 변동성이 있는 시장에서 더 보수적인 설정을 사용함

  6. 거래량 확인거래량 분석을 추가하여 중요한 가격 행동 전환점에서 충분한 거래량 지원을 보장하고 신호 신뢰성을 향상시킵니다.

  7. 시간 필터시간 필터링을 적용하여 중요한 보도 또는 시장 개시/폐쇄 시기와 같은 낮은 유동성 또는 높은 변동성으로 알려진 시간에 거래하는 것을 피하십시오.

  8. 일부 수익 메커니즘의 최적화현재 전략은 고정된 비율을 사용하여 부분 수익을 창출하고, 시장 조건에 따라 부분 수익을 조정하는 더 역동적인 방법을 고려할 수 있습니다.

이러한 최적화는 전략의 안정성, 적응성 및 전반적인 성능을 향상시키는데 도움이 될 것이며, 특히 다양한 시장 환경에서 수행될 것입니다.

요약하다

트렌드 리터치 전문 전략은 다우시 이론의 기본 원칙과 현대 기술 분석 도구를 결합한 잘 구성된 거래 시스템입니다. 트렌드를 결정하기 위해 시장 구조, EMA를 식별하기 위해 리터치, 그리고 트렌드 강도를 보장하기 위해 ADX 필터를 사용하여 트렌드를 식별하는 전략은 높은 확률의 거래 기회를 식별하기 위해 전체적인 프레임 워크를 제공합니다.

이 전략의 주요 장점은 시장 구조에 기반한 객관적인 트렌드 식별, 명확한 진입 조건 및 동적의 위험 관리 방법이다. 그러나 사용자는 트렌드 식별 지연, 가짜 리모델링 신호 및 변수 민감성 등의 잠재적인 위험에 주의해야 한다.

적응 변수, 다중 시간 프레임 분석 및 강화형 손해 관리와 같은 제안의 최적화를 구현함으로써 전략은 더욱 개선될 수 있으며, 다양한 시장 조건에서 안정성과 성능을 향상시킬 수 있습니다.

궁극적으로, 모든 거래 전략의 성공은 철저한 피드백, 지속적인 모니터링 및 필요한 경우 조정에 달려 있습니다. 거래자는 모든 실시간 적용을 고려하기 전에 자신의 선호하는 금융 도구와 시간 프레임에 대한 전략을 완전히 테스트하는 것을 보장해야합니다.

전략 소스 코드
//@version=5
strategy("Pullback Pro Dow Strategy v7 (ADX Filter)",
         shorttitle="Pullback Pro v7 ADX",
         overlay=true,
         initial_capital=10000,
         default_qty_type=strategy.percent_of_equity,
         default_qty_value=10,
         commission_type=strategy.commission.percent,
         commission_value=0.04,
         process_orders_on_close=true)

// --- Grouping ---
string GP_DOW = "① Dow Theory Settings"
string GP_ENTRY = "② Entry Logic (Pullback)"
string GP_RISK = "③ Risk & Exit Management"
string GP_FILTER = "④ Filters"
string GP_DISPLAY = "Display Settings"

// --- Dow Theory Settings ---
pivotLookback = input.int(10, title="Pivot Lookback Period", minval=1, group=GP_DOW)

// --- Entry Logic (Pullback) ---
pullbackEmaLength = input.int(21, title="Pullback EMA Length", group=GP_ENTRY, tooltip="このEMAへの価格の接近を「押し目/戻り」と判断します。")

// --- Risk & Exit Management ---
riskRewardRatio1 = input.float(1.5, "Take Profit 1 R:R", minval=0.1, step=0.1, group=GP_RISK, tooltip="TP1のリスクリワード比率")
qtyPercentTP1 = input.int(50, title="Take Profit 1 (%)", minval=1, maxval=100, group=GP_RISK, tooltip="TP1で決済するポジションの割合(%)")
riskRewardRatio2 = input.float(3.0, "Take Profit 2 R:R", minval=0.1, step=0.1, group=GP_RISK, tooltip="TP2のリスクリワード比率")

// --- Filters (Modified from RSI to ADX) ---
useAdxFilter = input.bool(true, title="Use ADX Trend Filter", group=GP_FILTER)
adxLength = input.int(14, "ADX Length", group=GP_FILTER)
adxThreshold = input.float(25, "ADX Threshold", group=GP_FILTER, tooltip="この値よりADXが大きい場合のみエントリーします。")

// --- Display Settings ---
showPivots = input.bool(true, title="Show Pivots", group=GP_DISPLAY)
showEma = input.bool(true, title="Show Pullback EMA", group=GP_DISPLAY)

// --- Indicator Calculations (Modified from RSI to ADX) ---
pivotHighPrice = ta.pivothigh(high, pivotLookback, pivotLookback)
pivotLowPrice = ta.pivotlow(low, pivotLookback, pivotLookback)
pullbackEma = ta.ema(close, pullbackEmaLength)
[diPlus, diMinus, adx] = ta.dmi(adxLength, adxLength) // ADX calculation

// --- Pivot & Trend Determination ---
var float lastPivotHigh = na, var float prevPivotHigh = na
var float lastPivotLow = na, var float prevPivotLow = na
if not na(pivotHighPrice)
    prevPivotHigh := lastPivotHigh
    lastPivotHigh := pivotHighPrice
if not na(pivotLowPrice)
    prevPivotLow := lastPivotLow
    lastPivotLow := pivotLowPrice

var int trendDirection = 0
if not na(lastPivotHigh) and not na(prevPivotHigh) and not na(lastPivotLow) and not na(prevPivotLow)
    isUptrend = lastPivotHigh > prevPivotHigh and lastPivotLow > prevPivotLow
    isDowntrend = lastPivotHigh < prevPivotHigh and lastPivotLow < prevPivotLow
    if isUptrend
        trendDirection := 1
    else if isDowntrend
        trendDirection := -1
    else
        trendDirection := 0

// --- Entry Conditions (Modified from RSI to ADX) ---
bool isUptrendConfirmed = trendDirection == 1
bool isDowntrendConfirmed = trendDirection == -1
bool buyPullback = isUptrendConfirmed and ta.crossunder(low, pullbackEma)
bool sellRally = isDowntrendConfirmed and ta.crossover(high, pullbackEma)
bool adxTrendOk = not useAdxFilter or adx > adxThreshold // ADX filter logic
bool goLong = buyPullback and adxTrendOk
bool goShort = sellRally and adxTrendOk

// --- Strategy State & Risk Management ---
var float stopLossPrice = na
var float takeProfitPrice1 = na
var float takeProfitPrice2 = na
var bool tp1_hit = false

// Entry Logic
if strategy.position_size == 0
    tp1_hit := false // Reset TP1 flag on new trade
    if goLong
        stopLossPrice := lastPivotLow
        riskSize = close - stopLossPrice
        if riskSize > 0
            takeProfitPrice1 := close + (riskSize * riskRewardRatio1)
            takeProfitPrice2 := close + (riskSize * riskRewardRatio2)
            strategy.entry("L", strategy.long)
            
    if goShort
        stopLossPrice := lastPivotHigh
        riskSize = stopLossPrice - close
        if riskSize > 0
            takeProfitPrice1 := close - (riskSize * riskRewardRatio1)
            takeProfitPrice2 := close - (riskSize * riskRewardRatio2)
            strategy.entry("S", strategy.short)

// ▼▼▼【最終修正版 v7】決済ロジック ▼▼▼
if strategy.position_size > 0 // ロングポジション("L")の決済ロジック
    // --- Stop Loss ---
    if low <= stopLossPrice
        strategy.close("L", comment="SL Hit")
        tp1_hit := false

    // --- Take Profit 1 ---
    if not tp1_hit and high >= takeProfitPrice1
        strategy.close("L", comment="TP1 Hit", qty_percent=qtyPercentTP1)
        tp1_hit := true

    // --- Take Profit 2 ---
    if tp1_hit and high >= takeProfitPrice2
        strategy.close("L", comment="TP2 Hit")
        tp1_hit := false

if strategy.position_size < 0 // ショートポジション("S")の決済ロジック
    // --- Stop Loss ---
    if high >= stopLossPrice
        strategy.close("S", comment="SL Hit")
        tp1_hit := false

    // --- Take Profit 1 ---
    if not tp1_hit and low <= takeProfitPrice1
        strategy.close("S", comment="TP1 Hit", qty_percent=qtyPercentTP1)
        tp1_hit := true

    // --- Take Profit 2 ---
    if tp1_hit and low <= takeProfitPrice2
        strategy.close("S", comment="TP2 Hit")
        tp1_hit := false

// --- Plotting ---
plot(showEma ? pullbackEma : na, "Pullback EMA", color=color.orange)
plotshape(showPivots ? pivotHighPrice : na, style=shape.xcross, location=location.absolute, color=color.red, size=size.tiny)
plotshape(showPivots ? pivotLowPrice : na, style=shape.xcross, location=location.absolute, color=color.blue, size=size.tiny)