
La stratégie de capture et de filtration de signaux de tendance du double MACD est une stratégie de négociation quantitative basée sur deux indices de concentration des moyennes mobiles (MACD) sur deux périodes différentes. La stratégie capture les opportunités de négociation du marché en combinant des signaux de tendance à court et à long terme, filtre efficacement le bruit du marché et améliore l’exactitude des signaux de négociation.
Le cœur de la stratégie est d’utiliser deux indicateurs MACD: MACD1 (à court terme) et MACD2 (à long terme). MACD1 a une longueur rapide par défaut de 34 et une longueur lente de 144 et un signal lisse de 9 pour détecter les changements de tendance à court terme; MACD2 a une longueur rapide par défaut de 100 et une longueur lente de 200 et un signal lisse de 50 pour évaluer la direction de la tendance à long terme.
Le principe de base de la double stratégie MACD est d’identifier les tendances du marché et de générer un signal de négociation à partir de deux indicateurs MACD de deux périodes différentes. Le code de la stratégie calcule d’abord les deux indicateurs MACD et leurs paramètres associés:
MACD1 (indicateur à court terme):
MACD2 (indicateur à long terme):
La logique des transactions est claire et rigoureuse:
Il y a plusieurs conditions:
Conditions de mise à l’écart
La stratégie contient également des mesures de gestion des risques, des paramètres de stop loss et de stop-loss réglables, le stop loss par défaut est de 1% (minimum 0,1%), le stop-loss est de 1,5% (minimum 0,1%), calculé sur la base de la dynamique des prix d’entrée. Les transactions sont traitées à la clôture de la ligne K pour assurer la stabilité du signal.
En analysant le code en profondeur, la stratégie MACD double présente plusieurs avantages:
Mécanisme de confirmation de double tendance: en combinant le MACD à court terme et le MACD à long terme, la stratégie est capable de filtrer efficacement le bruit du marché, de réduire les faux signaux et d’améliorer la précision des transactions. La stratégie ne génère des signaux de négociation que lorsque les signaux à court terme et à long terme sont cohérents.
Configuration de paramètres flexible: les stratégies permettent aux utilisateurs de personnaliser les paramètres MACD (longueur rapide, longueur lente et fluidité du signal) et les méthodes de calcul (SMA ou EMA), ce qui permet aux stratégies de s’adapter à différents environnements de marché et aux préférences des utilisateurs.
La rétroaction visuelle intuitive: la stratégie affiche intuitivement la force de la tendance en changeant dynamiquement de couleur (la tendance à la hausse est en vert foncé, la tendance à la baisse est en rouge foncé) pour aider les traders à mieux comprendre la situation du marché.
Gestion des risques: paramètres d’arrêt et d’arrêt réglables intégrés, qui protègent la sécurité des fonds et bloquent les bénéfices. Ces paramètres peuvent être ajustés en fonction de la volatilité du marché et de la tolérance au risque des individus.
Fonction d’alerte en temps réel: la stratégie fournit des alertes de signaux d’entrée en survente et en défaut, permettant une surveillance et une automatisation des transactions en temps réel, permettant aux traders de saisir les opportunités de marché en temps opportun.
Large portée: la stratégie est applicable à une variété de marchés financiers, y compris les actions, les futures et les devises, ce qui en fait un outil pratique pour de nombreux scénarios de négociation.
Malgré la bonne conception de la double stratégie MACD, il existe des risques potentiels:
Risque d’inversion de tendance: dans un marché très volatil, la tendance peut se retourner rapidement, entraînant une perte de stratégie. Même avec un paramètre de stop-loss, le prix de stop-loss réel peut être très glissant dans des conditions de marché extrêmes.
Sensitivité des paramètres: les performances de la stratégie dépendent fortement de la configuration des paramètres MACD. Des paramètres inappropriés peuvent entraîner un trop grand nombre de faux signaux ou des opportunités de trading importantes manquées. Les utilisateurs doivent optimiser soigneusement les paramètres en fonction du marché et du calendrier.
Problème de retardation: Le MACD est essentiellement un indicateur de retard, calculé sur la base de données historiques de prix. Dans les marchés en évolution rapide, le signal peut arriver trop tard, manquer les meilleurs points d’entrée ou entraîner des pertes inutiles.
Mauvaise performance des marchés horizontaux: la stratégie fonctionne mieux dans les marchés à forte tendance, mais peut générer de fréquents faux signaux dans les marchés horizontaux ou sans direction, entraînant de petites pertes consécutives.
Risque de gestion des fonds: la configuration par défaut d’utiliser 100% des fonds du compte pour effectuer des transactions, ce qui peut entraîner un effet de levier excessif et une mauvaise gestion des fonds. Les traders devraient envisager de réduire le pourcentage de fonds par transaction pour mieux gérer les risques.
Afin de réduire ces risques, les traders devraient envisager: la vérification croisée en combinaison avec d’autres indicateurs techniques; le suivi périodique et l’optimisation des paramètres de la stratégie; l’ajustement de l’allocation de fonds en fonction des conditions du marché; l’intervention manuelle dans des conditions de marché extrêmes; et la mise en place d’un ratio risque/rendement raisonnable.
En analysant le code en profondeur, voici les directions possibles d’optimisation:
Ajout de conditions de filtrage: des indicateurs techniques supplémentaires peuvent être ajoutés (comme l’indice de force relative RSI ou les bandes de Brin) comme filtres pour réduire les faux signaux. Par exemple, ne négociez que lorsque le RSI indique que le marché n’est pas en survente / survente.
Paramètres auto-adaptatifs: réalisation d’un ajustement auto-adaptatif des paramètres MACD, qui s’ajuste automatiquement en fonction de la volatilité du marché. Dans les marchés à forte volatilité, la longueur des vitesses rapide et lente peut être augmentée pour réduire le bruit; dans les marchés à faible volatilité, les paramètres peuvent être réduits pour améliorer la sensibilité.
Amélioration de la stratégie de stop loss: réalisation d’un stop loss dynamique basé sur la volatilité, comme un stop loss basé sur l’ATR (Average True Range) plutôt que sur un pourcentage fixe. Cela rendra le stop loss plus adapté aux conditions du marché actuel.
Ajout d’un mécanisme de liquidation partielle: la liquidation partielle est autorisée lorsque l’objectif de profit est atteint, bloquant une partie des bénéfices tout en laissant les positions restantes continuer à être rentables.
Filtrage des heures de négociation: Ajout d’un filtre des heures de négociation afin d’éviter de négocier pendant les périodes de forte volatilité ou de faible liquidité, telles que les heures d’ouverture et de clôture du marché.
Optimisation de la gestion des fonds: mise en place d’une gestion des fonds basée sur les critères de Kelly ou sur un modèle de risque à taux fixe, avec un ajustement dynamique de la taille de la position en fonction de la probabilité de victoire et du rapport risque/rendement.
Combiner plusieurs périodes de temps: En plus des deux MACD actuels, envisagez d’ajouter un troisième MACD à plus long terme pour offrir une perspective plus complète du marché.
Classification des états du marché: ajout d’une logique de classification des états du marché (par exemple, marché tendanciel vs marché horizontal) et adaptation des stratégies et des paramètres de négociation en fonction des différents états du marché.
Ces optimisations améliorent la robustesse et l’adaptabilité des stratégies, leur permettant de rester performantes dans toutes sortes de conditions de marché.
La stratégie de capture et de filtration des signaux de tendance du double MACD crée un puissant système de suivi des tendances grâce à une combinaison habile d’indicateurs MACD à court et à long terme. Le principal avantage de cette stratégie réside dans son mécanisme de double confirmation strict, qui réduit efficacement les faux signaux et améliore la précision des transactions.
Malgré la présence de risques tels que le renversement de la tendance, la sensibilité des paramètres et la mauvaise performance des marchés horizontaux, ces risques peuvent être efficacement maîtrisés par des mesures de gestion des risques et des stratégies d’optimisation appropriées. Les orientations d’optimisation futures peuvent inclure l’ajout de conditions de filtrage supplémentaires, la réalisation de paramètres d’adaptation, l’amélioration des stratégies d’arrêt des pertes et l’optimisation de la gestion des fonds.
Dans l’ensemble, la stratégie double MACD offre un cadre solide pour les traders quantifiés et convient particulièrement aux traders de tendances à court et moyen terme. En combinant des outils d’analyse technique classiques avec des règles de négociation flexibles, la stratégie offre un système de négociation robuste pour les traders qui recherchent des rendements cohérents.
/*backtest
start: 2024-03-25 00:00:00
end: 2025-03-24 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy(title="Dual MACD Strategy [Jason Kasei]", shorttitle="DualMACD", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, process_orders_on_close=true, initial_capital=10000)
// --- 输入参数 ---
// MACD1 参数
macd1_fast_length = input.int(title="MACD1 Fast Length", defval=34)
macd1_slow_length = input.int(title="MACD1 Slow Length", defval=144)
macd1_signal_length = input.int(title="MACD1 Signal Smoothing", minval=1, maxval=50, defval=9)
macd1_sma_source = input.string(title="MACD1 Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
macd1_sma_signal = input.string(title="MACD1 Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// MACD2 参数
macd2_fast_length = input.int(title="MACD2 Fast Length", defval=100)
macd2_slow_length = input.int(title="MACD2 Slow Length", defval=200)
macd2_signal_length = input.int(title="MACD2 Signal Smoothing", minval=1, maxval=50, defval=50)
macd2_sma_source = input.string(title="MACD2 Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
macd2_sma_signal = input.string(title="MACD2 Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// 止损止盈参数
stop_loss_pct = input.float(title="Stop Loss %", defval=1.0, minval=0.1, step=0.1)
take_profit_pct = input.float(title="Take Profit %", defval=1.5, minval=0.1, step=0.1)
// --- 计算 MACD1 ---
src = close
macd1_fast_ma = macd1_sma_source == "SMA" ? ta.sma(src, macd1_fast_length) : ta.ema(src, macd1_fast_length)
macd1_slow_ma = macd1_sma_source == "SMA" ? ta.sma(src, macd1_slow_length) : ta.ema(src, macd1_slow_length)
macd1 = macd1_fast_ma - macd1_slow_ma
macd1_signal = macd1_sma_signal == "SMA" ? ta.sma(macd1, macd1_signal_length) : ta.ema(macd1, macd1_signal_length)
macd1_hist = macd1 - macd1_signal
// --- 计算 MACD2 ---
macd2_fast_ma = macd2_sma_source == "SMA" ? ta.sma(src, macd2_fast_length) : ta.ema(src, macd2_fast_length)
macd2_slow_ma = macd2_sma_source == "SMA" ? ta.sma(src, macd2_slow_length) : ta.ema(src, macd2_slow_length)
macd2 = macd2_fast_ma - macd2_slow_ma
macd2_signal = macd2_sma_signal == "SMA" ? ta.sma(macd2, macd2_signal_length) : ta.ema(macd2, macd2_signal_length)
macd2_hist = macd2 - macd2_signal
// --- 绘制 MACD1 和 MACD2
hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(macd1_hist, title="MACD1 Histogram", style=plot.style_line, color=(macd1_hist >= 0 ? (macd1_hist[1] < macd1_hist ? #26A69A : #B2DFDB) : (macd1_hist[1] < macd1_hist ? #FFCDD2 : #FF5252)))
plot(macd2_hist, title="MACD2 Histogram", style=plot.style_histogram, color=(macd2_hist >= 0 ? (macd2_hist[1] < macd2_hist ? #26A69A : #B2DFDB) : (macd2_hist[1] < macd2_hist ? #FFCDD2 : #FF5252)))
// --- 交易条件 ---
is_deep_green_macd2 = ta.cross(macd2_hist, 0) and macd2_hist > 0 and macd2_hist[1] < macd2_hist
is_deep_red_macd2 = ta.cross(macd2_hist, 0) and macd2_hist < 0 and macd2_hist[1] > macd2_hist
// 检测 MACD1 hist 穿越零轴
macd1_cross_up = macd1_hist > 0
macd1_cross_down = macd1_hist < 0
// 做多条件
long_condition = macd1_cross_up and macd2_hist > 0 and is_deep_green_macd2
// 做空条件
short_condition = macd1_cross_down and macd2_hist < 0 and is_deep_red_macd2
// --- 交易逻辑 ---
if long_condition
strategy.entry("Long", strategy.long)
stop_loss_long = strategy.position_avg_price * (1 - stop_loss_pct / 100)
take_profit_long = strategy.position_avg_price * (1 + take_profit_pct / 100)
strategy.exit("Long Exit", "Long", stop=stop_loss_long, limit=take_profit_long)
if short_condition
strategy.entry("Short", strategy.short)
stop_loss_short = strategy.position_avg_price * (1 + stop_loss_pct / 100)
take_profit_short = strategy.position_avg_price * (1 - take_profit_pct / 100)
strategy.exit("Short Exit", "Short", stop=stop_loss_short, limit=take_profit_short)
// --- 警报条件 ---
alertcondition(long_condition, title="Long Entry", message="Dual MACD Strategy: Long Entry Signal")
alertcondition(short_condition, title="Short Entry", message="Dual MACD Strategy: Short Entry Signal")