MACD 더블 컨버전 제로 래그 트레이딩 전략 - 단기 트렌드 캡처에 기반한 고주파 트레이딩

MACD EMA SMA
생성 날짜: 2024-05-24 18:14:37 마지막으로 수정됨: 2024-05-24 18:14:37
복사: 0 클릭수: 1177
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

MACD 더블 컨버전 제로 래그 트레이딩 전략 - 단기 트렌드 캡처에 기반한 고주파 트레이딩

개요

이 전략은 MACD () 이동 평균 분산) 지표의 0 지연 버전을 기반으로 가격 변화에 빠르게 반응하여 단기 경향을 포착하여 고주파 트레이딩을 구현한다. 전략은 두 개의 다른 기간의 이동 평균 () 을 사용하여 MACD 지표를 구성하고, 지표와 가격의 지연을 제거하여 신호의 시기적절성을 향상시키는 0 지연 알고리즘을 도입한다. 동시에, 신호 선과 MACD 선의 교차를 구매 신호로 사용하고, 경보를 설정하여 거래자가 거래 기회를 신속하게 잡을 수 있도록 한다.

전략 원칙

  1. 계산 빠른 라인 (기본 12주기) 과 느린 라인 (기본 26주기) 의 EMA (지수 이동 평균) 또는 SMA (단순 이동 평균) 을 계산한다.
  2. 제로 레이그 알고리즘을 사용하여 빠른 라인과 느린 라인을 두 번 매끄럽게 하여 지표와 가격의 지연을 제거한다.
  3. MACD 라인은 0 지연의 빠른 라인과 0 지연의 느린 라인의 차원으로 구성된다.
  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)