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

제로 라그 MACD 듀얼 크로스오버 거래 전략 - 단기 트렌드 캡처에 기반한 고주파 거래

저자:차오장, 날짜: 2024-05-24
태그:MACDEMASMA

img

전반적인 설명

이 전략은 MACD (Moving Average Convergence Divergence) 인디케이터의 제로 레이그 버전에 기반을 두고 있으며, 가격 변화에 신속하게 반응함으로써 단기 트렌드를 포착하여 고주파 트레이딩을 가능하게 한다. 이 전략은 MACD 인디케이터를 구성하기 위해 서로 다른 기간 (고속 및 느린 라인) 을 가진 두 개의 이동 평균을 사용하며 인디케이터와 가격 사이의 지연을 제거하기 위해 제로 레이그 알고리즘을 도입하여 신호의 시기성을 향상시킨다. 또한, 신호 라인과 MACD 라인의 크로스오버가 구매 및 판매 신호로 사용되며, 트레이더가 거래 기회를 제때 포착하는 데 도움이 되는 알레트가 설정된다.

전략 원칙

  1. 빠른 선 (디폴트 12주기) 와 느린 선 (디폴트 26주기) 의 EMA (엑스포넌셜 이동 평균) 또는 SMA (단순 이동 평균) 를 계산합니다.
  2. 지표와 가격 사이의 지연을 제거하여 빠른 라인과 느린 라인을 두 배 매끄럽게하기 위해 제로 레이그 알고리즘을 사용하십시오.
  3. MACD 라인은 제로 래그 빠른 라인과 제로 래그 느린 라인의 차이로 형성됩니다.
  4. 신호선은 MACD 라인의 EMA (디폴트 9 기간) 또는 SMA로 형성됩니다.
  5. MACD 히스토그램은 MACD 라인과 신호 라인의 차이로 형성되며, 파란색은 긍정적 값을 나타내며 빨간색은 부정적인 값을 나타냅니다.
  6. MACD 라인이 아래로부터 신호 라인을 가로질러 교차점이 0축 아래에 있을 때 구매 신호 (블루닷) 가 생성됩니다.
  7. MACD 라인이 상에서 신호 라인을 가로질러 교차점이 0축 위에 있을 때 판매 신호 (붉은 점) 가 생성됩니다.
  8. 이 전략은 자동으로 구매 및 판매 신호를 기반으로 주문을 배치하고 그에 따른 알림을 트리거합니다.

이점 분석

  1. 제로 레이그 알고리즘은 인디케이터와 가격 사이의 지연을 효과적으로 제거하여 신호의 신속성과 정확성을 향상시킵니다.
  2. 이중 이동 평균의 설계는 시장 동향을 더 잘 파악하고 다른 시장 환경에 적응할 수 있습니다.
  3. MACD 히스토그램은 상승세와 하락세의 비교를 직관적으로 반영하여 거래 결정에 도움이 됩니다.
  4. 자동 주문 배치 및 알림 기능은 거래자가 거래 기회를 신속히 활용하는 것이 편리하여 거래 효율성을 향상시킵니다.

위험 분석

  1. 변동성 있는 시장에서, 빈번한 크로스오버 신호는 오버 트레이딩과 손실로 이어질 수 있습니다.
  2. 부적절한 매개 변수 설정은 신호 왜곡을 유발하고 전략 성능에 영향을 줄 수 있습니다.
  3. 이 전략은 계산을 위해 역사적 데이터에 의존하고 갑작스러운 사건과 블랙 스완 사건에 적응력이 떨어집니다.

최적화 방향

  1. 변동성 시장에서 잘못된 신호를 필터링하기 위해 ADX와 같은 트렌드 확인 지표를 도입하십시오.
  2. 패러미터를 최적화하여 빠르고 느린 라인 기간과 신호 라인 기간의 최상의 조합을 찾고 전략 안정성을 향상시킵니다.
  3. 다른 기술적 지표나 근본적인 요소를 결합하여 다인자 모델을 구축하여 전략의 위험 조정 수익을 향상시킵니다.
  4. 단일 거래 위험을 통제하기 위해 스톱 로스 및 수익 취득 메커니즘을 도입합니다.

요약

MACD 듀얼 크로스오버 제로 레이그 트레이딩 전략은 가격 변화에 빠르게 반응하고 단기 트렌드를 포착함으로써 고주파 트레이딩을 달성합니다. 제로 레이그 알고리즘과 듀얼 이동 평균 설계는 신호의 시기적절성과 정확성을 향상시킵니다. 전략은 직관적인 신호와 편리한 운영과 같은 특정 장점이 있지만 과거래 및 매개 변수 민감성과 같은 위험도 있습니다. 미래에 전략의 견고성과 수익성을 향상시키기 위해 트렌드 확인 지표, 매개 변수 최적화, 다중 요인 모델 등을 도입하여 전략을 최적화 할 수 있습니다.


/*backtest
start: 2024-04-23 00:00:00
end: 2024-05-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("BNM INTRADAY SETUP MACD 3M - Version 1.2", shorttitle="Zero Lag MACD Enhanced 1.2")
source = close

fastLength = input(12, title="Fast MM period", minval=1)
slowLength = input(26,title="Slow MM period", minval=1)
signalLength =input(9,title="Signal MM period", minval=1)
useEma = input(true, title="Use EMA (otherwise SMA)")
useOldAlgo = input(false, title="Use Glaz algo (otherwise 'real' original zero lag)")
showDots = input(true, title="Show symbols to indicate crossing")
dotsDistance = input(1.5, title="Symbols distance factor", minval=0.1)

// Fast line
ma1 = useEma ? ema(source, fastLength) : sma(source, fastLength) 
ma2 = useEma ? ema(ma1, fastLength) : sma(ma1, fastLength) 
zerolagEMA = ((2 * ma1) - ma2)

// Slow line
mas1 = useEma ? ema(source, slowLength) : sma(source, slowLength)
mas2 = useEma ? ema(mas1, slowLength) : sma(mas1, slowLength)
zerolagslowMA = ((2 * mas1) - mas2)

// MACD line
ZeroLagMACD = zerolagEMA - zerolagslowMA 

// Signal line
emasig1 = ema(ZeroLagMACD, signalLength)
emasig2 = ema(emasig1, signalLength)
signal = useOldAlgo ? sma(ZeroLagMACD, signalLength) : (2 * emasig1) - emasig2

hist = ZeroLagMACD - signal

upHist = (hist > 0) ? hist : 0
downHist = (hist <= 0) ? hist : 0

p1 = plot(upHist, color=color.blue, transp=40, style=plot.style_columns, title='Positive delta')
p2 = plot(downHist, color=color.red, transp=40, style=plot.style_columns, title='Negative delta') 

zeroLine = plot(ZeroLagMACD, color=color.red, transp=0, linewidth=2, title='MACD line')
signalLine = plot(signal, color=color.blue, transp=0, linewidth=2, title='Signal')

ribbonDiff = hist > 0 ? color.blue : color.red
fill(zeroLine, signalLine, color=ribbonDiff)

circleYPosition = signal * dotsDistance
ribbonDiff2 = hist > 0 ? color.blue : color.red

// Generate dots for cross signals
plot(showDots and cross(ZeroLagMACD, signal) ? circleYPosition : na, style=plot.style_circles, linewidth=4, color=ribbonDiff2, title='Dots')

// Alerts for buy and sell signals
buySignal = cross(ZeroLagMACD, signal) and (ribbonDiff2 == color.blue) and (ZeroLagMACD < 0)
sellSignal = cross(ZeroLagMACD, signal) and (ribbonDiff2 == color.red) and (ZeroLagMACD > 0)

// Use 'strategy.entry' for placing orders in strategy context
if (buySignal)
    strategy.entry("Buy", strategy.long)
    alert("Buy Signal: Blue dot below zero line", alert.freq_once_per_bar_close)

if (sellSignal)
    strategy.entry("Sell", strategy.short)
    alert("Sell Signal: Red dot above zero line", alert.freq_once_per_bar_close)


관련

더 많은