리소스 로딩... 로딩...

ADX 트렌드 강도 필터링 시스템과 동적 EMA 크로스오버 전략

저자:차오장, 날짜: 2025-01-06 11:44:03
태그:EMAADXSLTS

img

전반적인 설명

이 전략은 기하급수적 이동 평균 (EMA) 과 평균 방향 지표 (ADX) 를 결합한 트렌드-추천 거래 시스템이다. EMA50 및 가격 크로스오버를 통해 거래 방향을 결정하고, 트렌드 강도를 필터링하기 위해 ADX를 사용하고, 연속적인 수익성 촛불을 기반으로 한 동적 스톱-러스 방법을 사용합니다. 이 접근법은 주요 시장 트렌드를 포착하고 트렌드가 약해질 때 적시에 출출 할 수 있습니다.

전략 원칙

핵심 논리는 다음과 같은 핵심 요소에 기반합니다.

  1. 트렌드 방향 지표로 50주기 EMA (EMA50) 를 사용합니다.
  2. ADX 지표를 사용하여 시장 트렌드 강도를 필터링합니다 (전산 매개 변수 20)
  3. 입국 조건:
    • 롱: EMA50 이상과 ADX 이상 가격 폐쇄
    • 코트: EMA50 이하로, ADX가 임계 이상으로 닫습니다.
  4. 유니크 스톱 로스 메커니즘:
    • 연속 수익성 있는 촛불을 계산합니다.
    • 연속 4 개의 수익성 촛불 후 동적 후속 정지 활성화
    • 스톱 로스 레벨은 새로운 최고/하위와 동적으로 조정됩니다.

전략적 장점

  1. 이중 추세 확인
  • EMA 크로스오버는 트렌드 방향을 제시합니다.
  • ADX 필터링은 트렌드 강도를 보장하고 가짜 브레이크를 줄입니다.
  1. 지능형 스톱 로스 디자인
  • 시장 변동성에 기초한 동적 중지
  • 트레일링 스톱은 연속 수익 후에만 활성화됩니다.
  1. 높은 적응력
  • 매우 조절 가능한 매개 변수
  • 여러 거래 도구에 적용됩니다.
  1. 포괄적 인 위험 관리
  • 트렌드 약점에서 자동 출구
  • 동적 중지 현존 수익을 보호

전략 위험

  1. 트렌드 역전 위험
  • 급격한 변동으로 인해 상당한 마감에 직면 할 수 있습니다.
  • 반전 확인 메커니즘을 추가하는 것이 좋습니다.
  1. 매개 변수 민감도
  • EMA와 ADX 매개 변수 선택에 영향을 받는 전략 성과
  • 백테스팅을 통해 매개 변수 최적화를 권장합니다.
  1. 시장 환경 의존성
  • 다양한 시장에서 자주 거래 할 수 있습니다.
  • 옆 시장 필터를 추가하는 것이 좋습니다.
  1. 스톱 로스 실행 위험
  • 큰 격차로 인해 스톱 로스 실행 오차가 발생할 수 있습니다.
  • 하드 스톱 로스 보호 적용을 고려

최적화 방향

  1. 진입 메커니즘 강화
  • 부피 확인 신호를 추가합니다
  • 가격 패턴 분석을 포함
  1. 스톱 로스 메커니즘 개선
  • 동적 스톱 로스 조정을 위해 ATR을 통합
  • 시간 기반의 스톱 로스 메커니즘을 추가합니다.
  1. 시장 환경 적응
  • 시장 변동성 필터를 추가합니다
  • 다른 시장 주기에 대한 매개 변수 조정
  1. 신호 확인 강화
  • 추가적인 기술 지표를 통합
  • 기본 필터링 조건을 추가합니다

요약

이것은 EMA와 ADX의 장점을 결합하여 위험을 제어하면서 효과적으로 트렌드를 포착하는 잘 설계된 트렌드 추적 전략입니다. 동적 스톱-러스 메커니즘은 특히 혁신적이며, 수익 보호와 트렌드 포착을 효과적으로 균형있게합니다. 최적화 할 여지가 있지만 전체적인 프레임워크는 완전하고 논리적으로 건전하며 라이브 거래에서 검증 가치가있는 전략 시스템입니다.


/*backtest
start: 2019-12-23 08:00:00
end: 2025-01-04 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Simple EMA 50 Strategy with ADX Filter", overlay=true)

// Input parameters
emaLength = input.int(50, title="EMA Length")
adxThreshold = input.float(20, title="ADX Threshold", minval=0)

// Calculate EMA and ADX
ema50 = ta.ema(close, emaLength)
adxSmoothing = input.int(20, title="ADX Smoothing")
[diPlus, diMinus, adx] = ta.dmi(20, adxSmoothing)

// Conditions for long and short entries
adxCondition = adx > adxThreshold
longCondition = adxCondition and close > ema50  // Check if candle closes above EMA
shortCondition = adxCondition and close < ema50  // Check if candle closes below EMA

// Exit conditions based on 4 consecutive profitable candles
var float longSL = na
var float shortSL = na
var longCandleCounter = 0
var shortCandleCounter = 0

// Increment counters if positions are open and profitable
if (strategy.position_size > 0 and close > strategy.position_avg_price)
    longCandleCounter += 1
    if (longCandleCounter >= 4)
        longSL := na(longSL) ? close : math.max(longSL, close)  // Update SL dynamically
else
    longCandleCounter := 0
    longSL := na

if (strategy.position_size < 0 and close < strategy.position_avg_price)
    shortCandleCounter += 1
    if (shortCandleCounter >= 4)
        shortSL := na(shortSL) ? close : math.min(shortSL, close)  // Update SL dynamically
else
    shortCandleCounter := 0
    shortSL := na

// Exit based on trailing SL
if (strategy.position_size > 0 and not na(longSL) and close < longSL)
    strategy.close("Buy", comment="Candle-based SL")

if (strategy.position_size < 0 and not na(shortSL) and close > shortSL)
    strategy.close("Sell", comment="Candle-based SL")

// Entry logic: Check every candle for new positions
if (longCondition)
    strategy.entry("Buy", strategy.long)
if (shortCondition)
    strategy.entry("Sell", strategy.short)

// Plot EMA and ADX for reference
plot(ema50, color=color.blue, title="EMA 50")
plot(adx, color=color.orange, title="ADX", style=plot.style_stepline, linewidth=1)
plot(longSL, color=color.green, title="Long SL", style=plot.style_cross, linewidth=1)
plot(shortSL, color=color.red, title="Short SL", style=plot.style_cross, linewidth=1)

// Plot signals
plotshape(series=longCondition, location=location.belowbar, color=color.green, style=shape.labelup, title="Buy Signal")
plotshape(series=shortCondition, location=location.abovebar, color=color.red, style=shape.labeldown, title="Sell Signal")


관련

더 많은