이동 평균 크로스오버 MACD 거래 전략은 단기 및 장기 지수 이동 평균 (EMA) 의 크로스오버 상황을 추적하고 황금 십자 및 죽은 십자 발생 시 구매 및 판매 작업을 수행하는 양적 거래 전략입니다. 이 전략은 거래 신호 판단을 위해 MACD 지표를 결합합니다.
이 전략은 주로 12일 EMA, 26일 EMA 및 MACD 지표에 의존합니다. 구체적인 논리는 다음과 같습니다.
또한 이 전략은 몇 가지 필터링 조건을 설정합니다.
이 전략은 이동 평균 크로스오버와 MACD 지표를 결합하여 시장 단기 및 중장기 트렌드의 전환점을 효과적으로 포착 할 수 있습니다. 주요 장점은 다음과 같습니다.
이 전략에는 또한 몇 가지 위험이 있습니다.
대응하는 완화 방법:
이 전략을 최적화하는 주요 측면은 다음과 같습니다.
이동 평균 크로스오버 MACD 거래 전략은 간단한 트렌드 추적을 통해 거래 신호를 생성하고 적절한 필터링 조건으로 위험을 효과적으로 제어합니다. 효과적인 양적 거래 전략입니다. 전략은 매개 변수 최적화, 스톱 로스 메커니즘 추가, 더 많은 보조 지표 등을 통합하는 방식으로 개선 될 수 있습니다.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("EMMA", max_bars_back = 200) var up1 = #26A69A var up2 = #B2DFDB var down1 = #FF5252 var down2 = #FFCDD2 var confirmationLength = 2 var earliest = timestamp("20 Jan 2024 00:00 +0000") // Regn u shortEMA = ta.ema(close, 12) longEMA = ta.ema(close, 26) macd = shortEMA - longEMA signal = ta.ema(macd, 9) delta = macd - signal absDelta = math.abs(delta) previousDelta = delta[1] signalCrossover = ta.crossover(macd, signal) signalCrossunder = ta.crossunder(macd, signal) harskiftetdag = hour(time[confirmationLength]) > hour(time) enterLongSignal = signalCrossover[confirmationLength] and (macd > signal) and (absDelta >= 0.08) exitLongSignal = signalCrossunder[confirmationLength] and (macd < signal) enterShortSignal = signalCrossunder[confirmationLength] and (macd < signal) and (absDelta >= 0.08) exitShortSignal = signalCrossover[confirmationLength] and (macd > signal) // Så er det tid til at købe noe qty = math.floor(strategy.equity / close) if time >= earliest and not harskiftetdag if exitLongSignal strategy.close("long") else if enterLongSignal strategy.close("short") strategy.entry("long", strategy.long, qty = qty) if exitShortSignal strategy.close("short") else if enterShortSignal strategy.close("long") strategy.entry("short", strategy.short, qty = qty) // Så er det tid til at vise noe plot(macd, color=color.blue) plot(signal, color=color.orange) // bgcolor(color = delta > 0.1 ? color.new(color.green, 90) : color.new(color.green, 100)) // bgcolor(color = signalCrossover ? color.purple : signalCrossunder ? color.aqua : color.new(color.green, 100)) histogramColor = delta > 0 ? (previousDelta < delta ? up1 : up2) : (previousDelta > delta ? down1 : down2) plot( delta, style=plot.style_columns, color=histogramColor )