MACD 트렌드 추적 전략 (MACD Trend Following Strategy) 은 MACD 지표에 기반한 양적 거래 전략이다. 이 전략은 시장 추세를 결정하고 가격 추세를 추적하기 위해 MACD 황금 십자 및 죽음의 십자 신호를 식별합니다.
MACD 트렌드 다음 전략의 핵심 논리는 다음과 같습니다.
이러한 트렌드 추적 메커니즘을 통해 전략은 시장 트렌드의 전환을 적시에 파악하고 이익을 얻을 수 있습니다.
MACD 트렌드 다음 전략은 다음과 같은 장점을 가지고 있습니다:
MACD 트렌드 다음 전략은 또한 다음과 같은 위험을 가지고 있습니다:
위 위험에 대응하기 위해 다음과 같은 최적화 조치가 채택될 수 있습니다.
MACD 트렌드 다음 전략은 다음과 같은 측면에서 최적화 될 수 있습니다:
잘못된 신호 비율을 줄이기 위해 MACD 지표 매개 변수를 최적화하십시오. MACD의 다른 사이클 매개 변수를 테스트 할 수 있습니다.
신호를 필터링하기 위해 거래량과 같은 다른 지표를 추가합니다. 최소 거래량 조건을 설정할 수 있습니다.
동적인 트레일링 스톱 로스 메커니즘을 설정합니다. 스톱 로스 포인트는 변동성에 따라 동적으로 조정할 수 있습니다.
포지션을 열기 위해 신호 결정 논리를 최적화합니다. 더 엄격한 트리거 조건을 설정할 수 있습니다.
신호를 필터링하기 위해 기계 학습 모델을 통합합니다. 신호의 신뢰성을 판단하는 모델을 훈련시킬 수 있습니다.
일반적으로, MACD 트렌드 다음 전략은 비교적 성숙한 양적 전략이다. 그것은 시장 트렌드 방향을 결정하기 위해 MACD 지표를 활용하고, 가격 추세를 효과적으로 추적할 수 있는 스톱 로스 메커니즘으로 위험을 제어한다. 그러나 MACD 지표 자체는 또한 일부 결함이 있으며, 잘못된 신호를 생성하기 쉽다. 따라서 이 전략의 추가 최적화를 위한 공간이 있다. 주로 지표 매개 변수, 스톱 로스 메커니즘, 신호 필터링 등과 같은 측면에 있다.
/*backtest start: 2023-11-10 00:00:00 end: 2023-12-10 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MACD Cross Strategy", overlay=true) // Get MACD values [macdLine, signalLine, _] = ta.macd(close, 12, 26, 9) var float entryLongPrice = na var float entryShortPrice = na var float highestLongProfit = 0 var float highestShortProfit = 0 var float highestMACD = 0 var float lowestMACD = 0 var bool haveOpenedLong = false var bool haveOpenedShort = false var float stoploss = 0.04 // To be adjust for different investment var float minProfit = 0.05 // To be adjust for different investment if macdLine > 0 lowestMACD := 0 highestMACD := math.max(highestMACD, macdLine) haveOpenedShort := false else highestMACD := 0 lowestMACD := math.min(lowestMACD, macdLine) haveOpenedLong := false // Enter long position when MACD line crosses above the signal line if ta.crossover(macdLine, signalLine) and macdLine < highestMACD and macdLine > 0 and haveOpenedLong == false strategy.entry("Long", strategy.long) strategy.exit("Exit Long", from_entry = "Long", stop=close*(1 - stoploss)) entryLongPrice := close haveOpenedLong := true if ta.crossunder(macdLine, signalLine) and macdLine > lowestMACD and macdLine < 0 and haveOpenedShort == false strategy.entry("Short", strategy.short) strategy.exit("Exit Short", from_entry = "Short", stop=close*(1 + stoploss)) entryShortPrice := close haveOpenedShort := true // log.info("entryLongPrice:{0}", entryLongPrice) if strategy.position_size > 0 profit = close - entryLongPrice log.info("profit:{0}", profit) if profit > 0 highestLongProfit := math.max(highestLongProfit, profit) if profit / entryLongPrice > minProfit and highestLongProfit * 0.8 > profit strategy.close("Long") highestLongProfit := 0 if strategy.position_size < 0 profit = entryShortPrice - close if profit > 0 highestShortProfit := math.max(highestShortProfit, profit) log.info("highestShortProfit={0}, profit={1}", highestShortProfit, profit) if profit / entryShortPrice > minProfit and highestShortProfit * 0.8 > profit strategy.close("Short") highestShortProfit := 0