La stratégie de rupture de l'élan inverse est une stratégie de trading quantitative qui génère des signaux de trading à l'aide d'indicateurs d'inversion de prix et d'élan.
La logique de base de cette stratégie est d'identifier les points d'inversion du marché en calculant les prix les plus élevés et les plus bas sur une fenêtre de rétrospective spécifiée (par exemple 20 jours).
Calculer le prix le plus élevé (window_high) et le prix le plus bas (window_low) au cours des 20 derniers jours.
Si le sommet d'aujourd'hui est supérieur au maximum des 20 derniers jours (un nouveau sommet de 20 jours), entrez la période de surveillance de l'inversion du sommet et réglez le compteur sur 5 jours.
Si aucun nouveau sommet n'apparaît, déduire le compteur de 1 chaque jour.
La logique de jugement pour le prix le plus bas est similaire.
Les positions longues et courtes sont prises dans les périodes de surveillance de l'inversion.
La stratégie fixe également l'heure de début des transactions afin d'éviter de générer des signaux sur les données historiques.
La stratégie de rupture de l'élan inverse présente les principaux avantages suivants:
Capture des opportunités d'inversion, adaptée aux tendances d'inversion. Les marchés montrent souvent un certain degré d'inversion après une tendance haussière ou baissière soutenue. Cette stratégie vise à capturer ces points tournants.
Le suivi des prix les plus élevés et les plus bas au cours d'une fenêtre peut identifier de manière sensible les tendances et le timing de l'inversion des prix.
Les signaux sont générés uniquement autour des points clés d'inversion, filtrant un certain bruit.
Permet des positions longues et courtes.
La logique est relativement simple, facile à mettre en œuvre, repose principalement sur des indicateurs de prix et de dynamique simples, facile à coder.
Les principaux risques de cette stratégie sont les suivants:
Prédiction inexacte d'un renversement de tendance. La stratégie peut entraîner des pertes si la tendance du marché est directionnelle.
Les tendances globales du marché n'ont pas été prises en compte. Les renversements individuels des actions ne représentent pas nécessairement des renversements du marché.
Les retraits potentiellement importants peuvent s'accroître sans inversions réelles.
Les performances peuvent différer considérablement des tests antérieurs.
La période de la fenêtre, les paramètres du compteur, etc. affectent la stabilité.
Les méthodes de contrôle des risques correspondantes comprennent l'optimisation du stop loss, l'intégration de facteurs de marché, l'ajustement des combinaisons de paramètres et la vérification de la stabilité.
Les principales orientations d'optimisation sont les suivantes:
Incorporer des indicateurs de marché. Évaluer la force du marché pour éviter les environnements défavorables.
Choisissez des actions avec des fondamentaux solides et une surévaluation.
Optimisation des paramètres. Ajustez la période de la fenêtre et les paramètres du compteur pour trouver des combinaisons optimales de paramètres.
Ajouter des stratégies de stop loss, par exemple des stops de trailing, des stops de volatilité pour contrôler le maximum de retrait.
Améliorer la précision prédictive de l'apprentissage automatique des inversions de prix.
La stratégie de rupture de l'élan inverse identifie les opportunités d'inversion en suivant le prix et l'élan. Elle réagit de manière sensible et identifie les tendances et le timing de l'inversion. Mais elle comporte des risques qui nécessitent des optimisations et un contrôle des risques appropriés. Dans l'ensemble, lorsqu'elle est bien comprise et optimisée, elle peut former une composante efficace d'un système de trading quantitatif.
/*backtest start: 2023-02-16 00:00:00 end: 2024-02-22 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("New Highs and Lows Momentum Strategy", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100) window = input.int(20, title="New Highs and Lows Window", minval=1) decay = input.int(5, title="Decay", minval=1) startDate = input(timestamp("1 Jan 2023"), title = "Start Date") allowShort = input.bool(false, title = "Allow shorting") var int highDecayCounter = 0 var bool isHighPeriod = false var int lowDecayCounter = 0 var bool isLowPeriod = false inTradeWindow = true window_high = ta.highest(close, window) window_low = ta.lowest(low, window) // Logic for Highs if window_high > ta.highest(close, window)[1] highDecayCounter := decay isHighPeriod := true else if highDecayCounter > 0 highDecayCounter := highDecayCounter - 1 else isHighPeriod := false // Logic for Lows if window_low < ta.lowest(low, window)[1] lowDecayCounter := decay isLowPeriod := true else if lowDecayCounter > 0 lowDecayCounter := lowDecayCounter - 1 else isLowPeriod := false // Strategy Execution if inTradeWindow if isHighPeriod and highDecayCounter == decay strategy.entry("Long", strategy.long) if isHighPeriod and highDecayCounter == 0 strategy.close("Long") if isLowPeriod and lowDecayCounter == decay and allowShort strategy.entry("Short", strategy.short) if isLowPeriod and lowDecayCounter == 0 and allowShort strategy.close("Short") // Plotting plot(window_high, color=color.green) plot(window_low, color=color.red)