La stratégie de suivi de tendance MACD est une stratégie de trading quantitative basée sur l'indicateur MACD. Cette stratégie identifie les signaux de croix dorée et de croix de mort MACD pour déterminer les tendances du marché et suivre les tendances des prix.
La logique de base de la stratégie de suivi de tendance MACD est la suivante:
Grâce à ce mécanisme de suivi des tendances, la stratégie peut saisir en temps opportun les changements des tendances du marché et réaliser des bénéfices.
La stratégie de suivi des tendances MACD présente les avantages suivants:
La stratégie MACD Trend Following comporte également les risques suivants:
Pour faire face aux risques susmentionnés, les mesures d'optimisation suivantes peuvent être adoptées:
La stratégie de suivi des tendances MACD peut être optimisée dans les aspects suivants:
Optimiser les paramètres de l'indicateur MACD pour réduire le taux de faux signaux.
Ajouter d'autres indicateurs comme le volume des transactions pour filtrer les signaux.
Mettre en place un mécanisme de stop loss dynamique. Les points de stop loss peuvent être ajustés dynamiquement en fonction de la volatilité.
Optimiser la logique de détermination du signal pour l'ouverture de positions. Des conditions de déclenchement plus strictes peuvent être définies.
Incorporer des modèles d'apprentissage automatique pour filtrer les signaux. Les modèles peuvent être formés pour juger de la fiabilité des signaux.
En général, la stratégie de suivi de tendance MACD est une stratégie quantitative relativement mature. Elle utilise l'indicateur MACD pour déterminer les directions de tendance du marché et contrôle les risques avec un mécanisme de stop loss, qui peut suivre efficacement les tendances des prix. Mais l'indicateur MACD lui-même présente également quelques défauts, faciles à générer de faux signaux. Il y a donc des possibilités d'optimisation de cette stratégie, principalement sur des aspects tels que les paramètres de l'indicateur, le mécanisme de stop loss, le filtrage des signaux, etc.
/*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