오실레이터와 지지 및 저항 동적 거래 전략과 결합된 다중 이동 평균 교차

EMA ATR
생성 날짜: 2024-12-27 14:45:40 마지막으로 수정됨: 2024-12-27 14:45:40
복사: 3 클릭수: 404
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

오실레이터와 지지 및 저항 동적 거래 전략과 결합된 다중 이동 평균 교차

개요

이 전략은 다중 지수 이동 평균 ((EMA) 의 교차, 실제 변동의 폭 ((ATR) 과 축점의 지지 저항 ((Pivot Points)) 을 결합한 통합 거래 시스템입니다. 이 전략은 단기 EMA와 중기 및 장기 EMA의 교차 신호를 통해 ATR 변동 영역과 핵심 가격 수준을 결합하여 시장 추세 전환점을 포착하여 정확한 거래 시기를 확보합니다.

전략 원칙

이 전략은 세 가지 차원의 기술 분석에 기반을 두고 있습니다.

  1. 트렌드 식별: 4기, 9기 및 18기 트리플 EMA를 사용하여 단기 EMA ((4기) 과 중기 EMA ((9기) 와 장기 EMA ((18기) 의 동방향 교차로 트렌드 방향을 확인한다.
  2. 변동 범위: 시장의 변동성을 수치화하고 동적인 거래 값을 설정하기 위해 14 기 ATR 지표를 도입했다.
  3. 가격 지원 저항: 매일 축점 계산 시스템 (PPSignal) 을 통해 7 개의 핵심 가격 수준을 (PP, R1-R3, S1-S3) 구축하고 거래에 대한 참고를 제공합니다.

거래 규칙은 명확합니다.

  • 다중 조건: EMA4는 EMA9와 EMA18을 상향으로 통과하고, 종결 가격은 EMA9 상단의 ATR 거리를 뚫고
  • 공백 조건: EMA4 아래로 EMA9와 EMA18을 통과하고 종결 가격은 EMA9 아래 ATR 거리를 뚫고
  • 스톱 손실 설정: 동적으로 EMA4 수준을 추적

전략적 이점

  1. 다차원 분석: 트렌드, 변동 및 가격 구조의 3차원을 결합하여 신호 신뢰성을 향상시킵니다.
  2. 동적 적응: ATR 및 동적 지원 저항점을 통해 전략은 다양한 시장 환경에 적응할 수 있습니다.
  3. 리스크 관리가 완벽하다: 동적 스톱 로즈 메커니즘을 적용하여 수익을 적시에 잠금하고 위험을 제어할 수 있다.
  4. 신호 확인이 충분하다: 트레이드를 트리거하기 위해 다중 기술 지표 공명 (resonance) 을 요구하고, 가짜 돌파의 위험을 낮춘다.

전략적 위험

  1. 위기 시장 위험: 수평 정리 단계에서 자주 교차하는 가짜 신호가 발생할 수 있습니다.
  2. 지연 위험: 이동평균선 자체에도 지연이 있으며, 최적의 진입 시점을 놓칠 수 있습니다.
  3. Gap 위험: 낮에 비행하는 것은 스톱포드의 무효성을 초래할 수 있다.
  4. 매개 변수 민감성: 다른 주기 매개 변수 조합은 현저하게 다른 효과를 가져올 수 있다

전략 최적화 방향

  1. 트래지엄 지표 도입: 교차 신호 확인 시 트래지엄 검증을 추가
  2. 동적 변수 최적화: 시장의 변동에 따라 EMA 주기 변수를 조정
  3. 손해 차단 메커니즘 개선: ATR 설정과 함께 부동 손해 차단을 고려할 수 있습니다.
  4. 시장 환경 필터링: 트렌드 강도 지표를 추가하여 강한 트렌드 기간 동안 거래를 시작합니다.
  5. 시간 필터: 다른 시간 주기 특성에 맞게 최적의 거래 시간을 설정

요약하다

이 전략은 여러 기술 지표의 협동 협동으로 비교적 완전한 거래 시스템을 구축한다. 전략의 핵심 장점은 다차원 신호 확인 메커니즘과 완벽한 위험 제어 시스템이지만, 여전히 거래자가 특정 시장 환경에 따라 매개 변수 최적화 및 시스템 개선을 필요로 한다. 제안된 최적화 방향으로 전략의 안정성과 신뢰성이 더욱 향상될 것으로 보인다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Crossover + ATR + PPSignal", overlay=true)

//--------------------------------------------------------------------
// 1. Cálculo de EMAs y ATR
//--------------------------------------------------------------------
ema4      = ta.ema(close, 4)
ema9      = ta.ema(close, 9)
ema18     = ta.ema(close, 18)
atrLength = 14
atr       = ta.atr(atrLength)

//--------------------------------------------------------------------
// 2. Cálculo de Pivot Points diarios (PPSignal)
//    Tomamos datos del día anterior (timeframe D) para calcularlos
//--------------------------------------------------------------------
dayHigh  = request.security(syminfo.tickerid, "D", high[1])
dayLow   = request.security(syminfo.tickerid, "D", low[1])
dayClose = request.security(syminfo.tickerid, "D", close[1])

// Fórmula Pivot Points estándar
pp = (dayHigh + dayLow + dayClose) / 3.0
r1 = 2.0 * pp - dayLow
s1 = 2.0 * pp - dayHigh
r2 = pp + (r1 - s1)
s2 = pp - (r1 - s1)
r3 = dayHigh + 2.0 * (pp - dayLow)
s3 = dayLow - 2.0 * (dayHigh - pp)

//--------------------------------------------------------------------
// 3. Definir colores para las EMAs
//--------------------------------------------------------------------
col4  = color.green   // EMA 4
col9  = color.yellow  // EMA 9
col18 = color.red     // EMA 18

//--------------------------------------------------------------------
// 4. Dibujar indicadores en el gráfico
//--------------------------------------------------------------------

// EMAs
plot(ema4,  title="EMA 4",  color=col4,  linewidth=2)
plot(ema9,  title="EMA 9",  color=col9,  linewidth=2)
plot(ema18, title="EMA 18", color=col18, linewidth=2)

// ATR
plot(atr, title="ATR", color=color.blue, linewidth=2)

// Pivot Points (PPSignal)
plot(pp, title="Pivot (PP)", color=color.new(color.white, 0),  style=plot.style_line, linewidth=1)
plot(r1, title="R1",        color=color.new(color.red,   0),  style=plot.style_line, linewidth=1)
plot(r2, title="R2",        color=color.new(color.red,   0),  style=plot.style_line, linewidth=1)
plot(r3, title="R3",        color=color.new(color.red,   0),  style=plot.style_line, linewidth=1)
plot(s1, title="S1",        color=color.new(color.green, 0),  style=plot.style_line, linewidth=1)
plot(s2, title="S2",        color=color.new(color.green, 0),  style=plot.style_line, linewidth=1)
plot(s3, title="S3",        color=color.new(color.green, 0),  style=plot.style_line, linewidth=1)

//--------------------------------------------------------------------
// 5. Condiciones de cruce (EMA4 vs EMA9 y EMA18) y estrategia
//--------------------------------------------------------------------
crossedAbove = ta.crossover(ema4, ema9) and ta.crossover(ema4, ema18)
crossedBelow = ta.crossunder(ema4, ema9) and ta.crossunder(ema4, ema18)

// Señales de Buy y Sell basadas en cruces + condición con ATR
if crossedAbove and close > ema9 + atr
    strategy.entry("Buy", strategy.long)
    strategy.exit("Sell", "Buy", stop=ema4)

if crossedBelow and close < ema9 - atr
    strategy.entry("Sell", strategy.short)
    strategy.exit("Cover", "Sell", stop=ema4)