
La stratégie de suivi de la tendance MACD est une stratégie de négociation quantitative basée sur l’indicateur MACD. Cette stratégie permet de juger de la tendance du marché en identifiant les signaux de fourches dorées et de fourches mortes de l’indicateur MACD et de suivre la tendance des cours des actions.
La logique de base de la stratégie de suivi des tendances du MACD est la suivante:
Grâce à ce mécanisme de suivi des tendances, la stratégie est en mesure de saisir les changements de tendances du marché en temps opportun et de réaliser des bénéfices.
La stratégie de suivi de la tendance MACD présente les avantages suivants:
Les stratégies de suivi de la tendance du MACD comportent également les risques suivants:
Les mesures d’optimisation suivantes peuvent être prises pour répondre à ces risques:
Les stratégies de suivi des tendances du MACD peuvent être optimisées en fonction des facteurs suivants:
Optimiser les paramètres de l’indicateur MACD et réduire le taux de faux signaux.
Les autres indicateurs de filtrage comme l’augmentation du volume de transaction. Des conditions de volume de transaction minimum peuvent être définies.
Le système d’arrêt de suivi dynamique est configuré. Le point d’arrêt peut être ajusté en temps réel en fonction de la volatilité.
Optimisation de la logique de détection des signaux d’ouverture de position. Il est possible de définir des conditions de déclenchement plus strictes.
Le filtrage des signaux par des modèles d’apprentissage automatique. Les modèles peuvent être entraînés à juger de la fiabilité des signaux.
La stratégie de suivi de la tendance MACD est une stratégie quantitative plus mature dans l’ensemble. Cette stratégie utilise l’indicateur MACD pour déterminer la direction de la tendance du marché, avec le contrôle des risques du mécanisme de stop-loss, pour suivre efficacement la tendance des cours des actions. Mais l’indicateur MACD lui-même présente également des défauts et est susceptible de générer de faux signaux.
/*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