Stratégie de suivi de tendance MACD à croisement de moyenne mobile double


Date de création: 2024-01-23 11:22:02 Dernière modification: 2024-01-23 11:22:02
Copier: 1 Nombre de clics: 594
1
Suivre
1617
Abonnés

Stratégie de suivi de tendance MACD à croisement de moyenne mobile double

Aperçu

Cette stratégie est une stratégie de trading automatique basée sur l’indicateur technique MACD à double croisement de moyennes mobiles. Elle utilise le signal de croisement de ligne rapide et lente de l’indicateur MACD pour déterminer la direction de la tendance et permettre le suivi de la tendance.

Principe de stratégie

La stratégie commence par calculer les trois courbes de l’indicateur MACD: la courbe rapide, la courbe lente et la courbe décalée. La courbe rapide est une moyenne mobile plus rapide sur une période donnée et la courbe lente une moyenne mobile sur une période plus longue. La décalée est la différence entre la courbe rapide et la courbe lente.

La stratégie utilise ce principe pour faire plus à la fourche dorée et être en position libre à la fourche morte; ou faire court à la fourche morte et être en position libre à la fourche dorée, pour réaliser un suivi automatique de la tendance. Dans le même temps, la stratégie juge également la valeur absolue de la ligne MACD positive ou négative, pour éviter les faux signaux et s’assurer de capturer réellement les virages de tendance.

Avantages stratégiques

  • L’utilisation d’une moyenne mobile double pour déterminer la direction de la tendance et capturer avec précision le renversement de tendance
  • L’indicateur technique MACD réduit le faux signal et améliore la qualité du signal
  • Flexibilité pour faire plus de temps libre ou seulement plus/temps libre
  • Les paramètres peuvent être ajustés pour s’adapter à différents environnements de marché

Risque stratégique

  • Le double croisement des moyennes mobiles est en retard et pourrait manquer une partie des bénéfices au début de la rotation
  • L’indicateur MACD est sujet à de faux signaux en cas de choc
  • Paramètres à ajuster de manière appropriée afin d’éviter une sursensibilité ou une indolence

Comment gérer les risques:

  • Combinaison avec d’autres indicateurs pour filtrer le signal
  • Adaptation des paramètres pour réduire la fréquence des transactions
  • Cette stratégie ne s’applique que lorsque la tendance est évidente

Orientation de l’optimisation de la stratégie

Cette stratégie peut être optimisée dans les domaines suivants:

  1. En combinaison avec d’autres indicateurs de confirmation, tels que l’indicateur KDJ, l’indicateur Brin, etc., filtre les faux signaux

  2. Modification des mécanismes d’accès, par exemple l’ajout de filtres de rupture, afin d’éviter les entrées anticipées ou tardives

  3. Optimisation des paramètres, adaptation des cycles rapides et lents en fonction des cycles et des conditions du marché

  4. Adhésion à une stratégie de stop-loss pour contrôler les pertes individuelles

  5. Extensible à d’autres variétés, telles que les devises, les monnaies numériques, etc.

Résumer

Cette stratégie de suivi de la tendance MACD croisée à deux moyennes mobiles utilise les indicateurs MACD pour déterminer la direction de la tendance, avec des signaux de filtrage de croisement de lignes rapides et lentes, permettant de capturer efficacement les virages de tendance et de suivre automatiquement la tendance. L’avantage de la stratégie réside dans la précision de la tendance, la flexibilité d’ajustement des paramètres et l’optimisation en fonction de l’environnement du marché.

Code source de la stratégie
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DeMindSET

//@version=4
strategy("MACD Trend Follow Strategy", overlay=false)
// Getting inputs
LSB = input(title="Long/Short", defval="Long only", options=["Long only", "Short only" , "Both"]) 
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//
Bull= macd > signal
Bear= macd < signal
ConBull=macd>0
ConBear=macd<0
//
Green= Bull and ConBull
Red= Bear and ConBear
Yellow= Bull and ConBear
Blue= Bear and ConBull
//
bcolor = Green ? color.green : Red ? color.red : Yellow ? color.yellow : Blue ? color.blue : na
barcolor(color=bcolor)
// === INPUT BACKTEST RANGE ===
FromYear  = input(defval = 2019, title = "From Year", minval = 1920)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
ToYear    = input(defval = 9999, title = "To Year", minval = 2009)
ToMonth   = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 31, title = "To Day", minval = 1, maxval = 31)

// === FUNCTION EXAMPLE ===
start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

if LSB == "Long only" and Green
    strategy.entry("L",true)
if LSB == "Long only" and Red
    strategy.close("L",qty_percent=100,comment="TP Long")
if LSB == "Both" and Green
    strategy.entry("L",true)
if LSB == "Both" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Red
    strategy.entry("S",false)
if LSB == "Short only" and Green
    strategy.close("S",qty_percent=100,comment="TP Short")