Stratégie quantitative de suivi des tendances MACD dynamiques à plusieurs niveaux combinée à un système d'analyse des extensions hautes et basses sur 52 semaines

MACD MA EMA SMA RSI
Date de création: 2024-12-27 14:27:51 Dernière modification: 2024-12-27 14:27:51
Copier: 0 Nombre de clics: 427
1
Suivre
1617
Abonnés

Stratégie quantitative de suivi des tendances MACD dynamiques à plusieurs niveaux combinée à un système d’analyse des extensions hautes et basses sur 52 semaines

Aperçu

Cette stratégie est un système de trading quantitatif qui combine les signaux de croisement du MACD à plusieurs niveaux de temps avec des niveaux de pression de support dynamique de 52 semaines. La stratégie confirme les signaux de trading en croisant les indicateurs du MACD sur deux périodes de temps, la périphérie et la ligne solaire, tout en utilisant les lignes de pression de soutien dynamique formées par les niveaux de support dynamique de 52 semaines.

Principe de stratégie

La stratégie est basée sur la logique de base suivante:

  1. Les signaux entrants sont confirmés par les forks circulaires MACD et solaires MACD, ce qui nécessite que les deux indicateurs MACD des deux périodes de temps affichent des signaux de plus.
  2. Le signal de sortie est déclenché par un clignotant MACD de ligne solaire, et une fois qu’un clignotant MACD de ligne solaire est déclenché, la position est levée.
  3. Le stop-loss dynamique est placé à la position la plus basse du jour de déclenchement du signal de sortie.
  4. La ligne de 52 semaines de hauts et de bas est générée dynamiquement sur la base de la référence calculée choisie par l’utilisateur (le prix le plus bas ou le prix de clôture) et s’étend vers la droite pour former un point de référence important.
  5. La stratégie utilise une gestion de position de 5% et un coût de transaction de 1 unité monétaire.

Avantages stratégiques

  1. Confirmation multi-horaire: filtration des fausses percées par la résonance du signal MACD à deux niveaux de la périphérie et de la ligne solaire, améliorant la précision des transactions.
  2. La pression des supports dynamiques: la ligne de 52 semaines de hauts et de bas fournit une référence importante pour la psychologie des prix sur le marché et aide à juger de la force de la tendance.
  3. Le contrôle des risques est perfectionné: un mécanisme de stop-loss dynamique est utilisé pour ajuster la position de stop-loss en temps opportun en fonction des fluctuations du marché afin de protéger les bénéfices.
  4. Haute visibilité: affiche les prix et les signaux clés dans une interface graphique claire pour faciliter la compréhension et l’action des traders.
  5. Systématisation des transactions: des règles strictes d’entrée et de sortie permettent d’éviter les interférences émotionnelles et d’améliorer l’objectivité des transactions.

Risque stratégique

  1. Ne convient pas pour les marchés en tremblement de terre: dans les marchés en tremblement de terre horizontal, les croisements fréquents du MACD peuvent entraîner une surabondance de faux signaux.
  2. Risque de retard: L’indicateur MACD est lui-même retardé et peut manquer le meilleur moment pour entrer.
  3. Risque de gestion des fonds: les positions à taux fixe peuvent ne pas être suffisamment flexibles dans certains environnements de marché.
  4. Risque de décalage du marché: en cas d’un saut important, le prix d’arrêt réel pourrait être bien inférieur à la position prévue.
  5. Risque d’optimisation des paramètres: des paramètres sur-optimisés peuvent entraîner des problèmes de sur-adaptation.

Orientation de l’optimisation de la stratégie

  1. Introduction de l’analyse de la relation quantité-prix: envisager une confirmation de quantité de transaction supplémentaire sur la base des signaux MACD existants.
  2. Optimisation de la gestion des positions: conception d’un mécanisme de gestion des positions plus flexible, adapté à la dynamique de la volatilité du marché.
  3. Amélioration du mécanisme de stop loss: il est envisageable d’ajouter un stop loss mobile ou un stop loss dynamique basé sur l’ATR.
  4. Augmentation du filtrage des conditions de marché: l’introduction d’un indicateur de force de tendance permettant d’ouvrir une position sur un marché en forte tendance.
  5. Développer un mécanisme de filtrage des signaux: concevoir des conditions de confirmation plus strictes pour réduire les faux signaux.

Résumer

La stratégie construit un système de trading de suivi de tendance complet en combinant les signaux de croisement de plusieurs périodes du MACD avec la ligne de pression de support dynamique des hauts et des bas de 52 semaines. L’avantage de la stratégie réside dans la fiabilité de la confirmation des signaux et l’intégrité du contrôle des risques, mais il faut toujours faire attention aux risques de choc et de retard du marché.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2024-12-25 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("MACD Bitcoin strategy con 52W High/Low (linee estese)", overlay=true)

// === MACD SETTINGS ===
fastLength = 12
slowLength = 26
signalSmoothing = 9

// Funzione per ottenere i valori MACD
getMACD(source, timeframe) =>
    [macdLine, signalLine, _] = ta.macd(source, fastLength, slowLength, signalSmoothing)
    [macdLine, signalLine]

// Valori MACD Settimanali
[macdWeekly, signalWeekly] = request.security(syminfo.tickerid, "W", getMACD(close, "W"), lookahead=barmerge.lookahead_on)

// Valori MACD Giornalieri
[macdDaily, signalDaily] = getMACD(close, "D")

// Variabile per lo stop loss
var float lowOfSignalCandle = na

// Condizione per l'ingresso
longConditionWeekly = ta.crossover(macdWeekly, signalWeekly)
exitConditionDaily = ta.crossunder(macdDaily, signalDaily)

// Imposta Stop Loss sulla candela giornaliera
if (exitConditionDaily)
    lowOfSignalCandle := low

// Condizione di ingresso nel trade
enterTradeCondition = macdWeekly > signalWeekly and ta.crossover(macdDaily, signalDaily)

if (enterTradeCondition)
    strategy.entry("MACD Long", strategy.long)

if (not na(lowOfSignalCandle))
    strategy.exit("Stop Loss", "MACD Long", stop=lowOfSignalCandle)

if (strategy.position_size == 0)
    lowOfSignalCandle := na

// // === 52 WEEK HIGH/LOW SETTINGS ===
// // Input per selezionare tra Highs/Lows o Close
// high_low_close = input.string(defval="Highs/Lows", title="Base 52 week values on candle:", options=["Highs/Lows", "Close"])

// // Calcolo dei valori delle 52 settimane
// weekly_hh = request.security(syminfo.tickerid, "W", ta.highest(high, 52), lookahead=barmerge.lookahead_on)
// weekly_ll = request.security(syminfo.tickerid, "W", ta.lowest(low, 52), lookahead=barmerge.lookahead_on)
// weekly_hc = request.security(syminfo.tickerid, "W", ta.highest(close, 52), lookahead=barmerge.lookahead_on)
// weekly_lc = request.security(syminfo.tickerid, "W", ta.lowest(close, 52), lookahead=barmerge.lookahead_on)

// // Selezione dei valori in base all'input
// high_plot = high_low_close == "Highs/Lows" ? weekly_hh : weekly_hc
// low_plot = high_low_close == "Highs/Lows" ? weekly_ll : weekly_lc

// // === LINEE ORIZZONTALI ESTESE FINO AL PREZZO ATTUALE ===
// var line highLine = na
// var line lowLine = na

// // Linea Orizzontale per il 52W High
// if (na(highLine))
//     highLine := line.new(bar_index, high_plot, bar_index + 1, high_plot, color=color.green, width=2, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(highLine, high_plot)
//     line.set_y2(highLine, high_plot)

// // Linea Orizzontale per il 52W Low
// if (na(lowLine))
//     lowLine := line.new(bar_index, low_plot, bar_index + 1, low_plot, color=color.red, width=2, style=line.style_dashed, extend=extend.right)
// else
//     line.set_y1(lowLine, low_plot)
//     line.set_y2(lowLine, low_plot)

// // Etichette per le linee orizzontali
// var label highLabel = na
// var label lowLabel = na

// if (na(highLabel))
//     highLabel := label.new(bar_index, high_plot, "52W High", color=color.green, textcolor=color.white, style=label.style_label_down, size=size.small)
// else
//     label.set_y(highLabel, high_plot)
//     label.set_x(highLabel, bar_index)

// if (na(lowLabel))
//     lowLabel := label.new(bar_index, low_plot, "52W Low", color=color.red, textcolor=color.white, style=label.style_label_up, size=size.small)
// else
//     label.set_y(lowLabel, low_plot)
//     label.set_x(lowLabel, bar_index)

// // Tracciamento delle Linee Estese
// plot(high_plot, title="52W High", color=color.green, style=plot.style_linebr)
// plot(low_plot, title="52W Low", color=color.red, style=plot.style_linebr)