Stratégie de suivi des tendances du MACD à double moyenne mobile

Auteur:ChaoZhang est là., Date: 2023-12-22 14:17:34 Je suis désolé
Les étiquettes:

img

Résumé

Cette stratégie évalue la tendance des prix en calculant la moyenne mobile rapide, la moyenne mobile lente et l'indicateur MACD, et construit les signaux de trading de croix dorée et de croix morte.

La logique de la stratégie

Cette stratégie repose principalement sur trois indicateurs.

Il calcule la moyenne mobile rapide et deux moyennes mobiles lentes. Lorsque la moyenne mobile rapide dépasse les deux moyennes mobiles lentes, un signal d'achat est généré. Lorsque la moyenne mobile rapide dépasse les deux moyennes mobiles lentes, un signal de vente est généré. Cela juge la relation entre les tendances à court et à long terme pour réaliser le trading en croisement doré et en croisement mort.

Deuxièmement, il calcule l'indicateur MACD, y compris la ligne MACD, la ligne de signal et l'histogramme. Lorsque l'histogramme MACD est supérieur à 0, il s'agit d'un indicateur haussier; lorsque l'histogramme MACD est inférieur à 0, il s'agit d'un indicateur baissier. Cela aide à juger de la fiabilité des signaux de croix dorée et de croix morte.

Enfin, il intègre les mécanismes de prise de profit, d'arrêt de perte et d'arrêt de perte.

Les avantages

Les avantages de cette stratégie sont les suivants:

  1. La croix dorée, la croix morte combinées avec le MACD jugent de manière fiable la tendance des prix.
  2. Les points stop-loss empêchent les pertes accrues.
  3. Les mouvements de stop-loss de suivi permettent de verrouiller automatiquement les profits en continu et de maximiser les profits de tendance.
  4. Des paramètres flexibles tels que des périodes moyennes mobiles personnalisées.

Les risques

Il y a aussi des risques:

  1. Les chocs de prix peuvent déclencher des points de stop loss.
  2. L'exécution à long terme des arrêts de perte de trailing nécessite une surveillance continue et un ajustement en temps opportun.
  3. Des paramètres mal réglés peuvent entraîner des transactions excédentaires ou manquantes.

Les solutions sont les suivantes:

  1. Mettre en place des points d'arrêt de perte appropriés pour éviter des arrêts de perte inutiles.
  2. Vérifiez et optimisez régulièrement les paramètres.
  3. Intervention manuelle et surveillance de l'état.

Directions d'optimisation

La stratégie peut également être optimisée par les aspects suivants:

  1. Ajoutez plus d'indicateurs comme le RSI pour rendre les signaux plus fiables.
  2. Optimiser les paramètres des moyennes mobiles en fonction des différents instruments de négociation.
  3. Ajoutez des algorithmes d'arrêt dynamiques pour faire changer les points d'arrêt avec le marché.
  4. Ajouter des modules de dimensionnement des positions et de gestion des risques.

Résumé

En résumé, il s'agit d'une stratégie simple mais efficace qui utilise la croix dorée, la croix morte et le MACD pour juger de la tendance et réaliser le stop loss. Les avantages sont le suivi de la tendance et le verrouillage des bénéfices avec une grande personnalisation. C'est une stratégie d'optimisation de paramètres universelle adaptée à différents instruments de trading. Il y a encore des risques et un espace d'optimisation, mais dans l'ensemble, c'est une stratégie de trading fiable et pratique.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-21 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
strategy('The Puria Method', shorttitle = 'Puria',overlay = true)

//=== GENERAL INPUTS ===

// short ma
maFastSource   = input(defval = close, title = "Fast MA Source")
maFastLength   = input(defval = 5, title = "Fast MA Period", minval = 1)

// long ma 1
maSlow1Source   = input(defval = low, title = "Slow MA1 Source")
maSlow1Length   = input(defval = 85, title = "Slow MA Period", minval = 1)

// long ma 2
maSlow2Source   = input(defval = low, title = "Slow MA2 Source")
maSlow2Length   = input(defval = 75, title = "Slow MA Period", minval = 1)

//macd
macdFastLength   = input(defval = 12, title = "Fast MACD Period", minval = 1)
macdSlowLength   = input(defval = 26, title = "Slow MACD Period", minval = 1)
macdSmaLength   = input(defval = 9, title = "SMA MACD Period", minval = 1)

// the risk management inputs
inpTakeProfit   = input(defval = 30, title = "Take Profit", minval = 0)
inpStopLoss     = input(defval = 10, title = "Stop Loss", minval = 0)
inpTrailStop    = input(defval = 5, title = "Trailing Stop Loss", minval = 0)
inpTrailOffset  = input(defval = 0, title = "Trailing Stop Loss Offset", minval = 0)

// if an input is less than 1, assuming not wanted so we assign 'na' value to disable it.
useTakeProfit   = inpTakeProfit  >= 1 ? inpTakeProfit  : na
useStopLoss     = inpStopLoss    >= 1 ? inpStopLoss    : na
useTrailStop    = inpTrailStop   >= 1 ? inpTrailStop   : na
useTrailOffset  = inpTrailOffset >= 1 ? inpTrailOffset : na

// === SERIES SETUP ===
maFast = ema(maFastSource, maFastLength)
maSlow1 = wma(maSlow1Source, maSlow1Length)
maSlow2 = wma(maSlow2Source, maSlow2Length)
[_, signal, histLine] = macd(close, macdFastLength, macdSlowLength, macdSmaLength)

// === PLOTTING ===
fast = plot(maFast, title = "Fast MA", color = green, linewidth = 2, style = line, transp = 50)
slow1 = plot(maSlow1, title = "Slow MA1", color = red, linewidth = 2, style = line, transp = 50)
slow2 = plot(maSlow2, title = "Slow MA2", color = red, linewidth = 2, style = line, transp = 50)

// === LOGIC ===
signalUp = crossover(maFast, maSlow1) and crossover(maFast, maSlow2) and histLine > 0
signalDown = crossunder(maFast, maSlow1) and crossunder(maFast, maSlow2) and histLine < 0

// ===STRATEGY===
strategy.entry(id = "Long", long = true, when = signalUp) 
strategy.entry(id = "Short", long = false, when = signalDown)
strategy.exit("Exit Long", from_entry = "Long", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)
strategy.exit("Exit Short", from_entry = "Short", profit = useTakeProfit, loss = useStopLoss, trail_points = useTrailStop, trail_offset = useTrailOffset)

Plus de