
La stratégie de suivi de la tendance de rupture multi-indicateur est une stratégie de négociation quantitative basée sur le système de négociation classique de la pirogue, qui capture les tendances fortes du marché par des signaux de rupture à plusieurs cycles. Le cœur de la stratégie est d’utiliser les ruptures de prix de différentes périodes de temps comme signaux d’entrée et de sortie, tout en combinant l’ATR (la moyenne des vagues réelles) pour le contrôle du risque et la gestion de la position.
Le principe central de cette stratégie est de capturer les mouvements de tendance potentiels en identifiant les hauts ou les bas historiques de rupture des prix. La logique de mise en œuvre est la suivante:
Mécanisme d’admissionLa stratégie utilise les plus hauts et les plus bas de l’historique de la période N1 (la période par défaut de 20 cycles) comme référence de rupture. Un signal d’entrée à plusieurs têtes est généré lorsque le prix monte au-dessus du plus haut de la période N1 précédente; un signal d’entrée à vide est généré lorsque le prix descend au-dessus du plus bas de la période N1 précédente.
Mécanisme de sortieLa stratégie consiste à utiliser un système de double match:
Gestion des positionsLa stratégie est basée sur la volatilité (ATR) et le ratio de risque pour calculer la taille de l’unité de transaction, en veillant à ce que le risque de chaque transaction soit contrôlé dans un ratio fixe de fonds de compte (le 1% par défaut). La formule de calcul est:
交易单位 = 风险金额 / (ATR * 每点价值)
Le montant du risque est le capital initial multiplié par le risque.
Capacité à suivre les tendancesLa conception de la stratégie se concentre sur la capture des grandes tendances, l’identification des points de départ potentiels des tendances par des signaux de rupture et l’utilisation efficace des mouvements tendanciels du marché.
Contrôle dynamique des risques: en calculant la position de stop loss via ATR, en ajustant dynamiquement la distance de stop loss en fonction des fluctuations réelles du marché, il est possible d’éviter à la fois la perte fréquente causée par un stop loss fixe trop proche et la perte excessive causée par un stop loss trop éloigné.
Les postes s’adaptentAjuster dynamiquement la taille de la position en fonction de la volatilité du marché et de la proportion de risque du compte, réduire automatiquement la position sur les marchés à forte volatilité et augmenter la position de manière appropriée sur les marchés à faible volatilité, afin de contrôler équitablement les marges de risque.
Ajustabilité des paramètres: La stratégie fournit une interface d’ajustement pour plusieurs paramètres clés (N1, N2, cycle ATR, ratio de risque, etc.), que l’utilisateur peut optimiser en fonction de différents environnements de marché et de ses préférences personnelles en matière de risque.
Systématisation des échangesLes règles de négociation complètement systématisées éliminent les perturbations émotionnelles, suivent strictement les règles d’entrée, de sortie et de gestion des fonds prédéfinies et améliorent la discipline des transactions.
Le marché de l’électricité est en baisse: comme stratégie de suivi des tendances, il est facile de générer de fréquents faux signaux de rupture dans les marchés oscillants horizontaux, entraînant des arrêts continus. La solution peut ajouter des conditions de filtrage de la volatilité et ne considérer l’entrée que lorsque la volatilité dépasse une certaine limite.
Points de glissement et commissions: Dans les marchés où les transactions sont fréquentes ou peu liquides, les points de glissement et les commissions peuvent avoir un impact significatif sur la performance de la stratégie.
Paramètre SensibilitéLes performances stratégiques sont sensibles aux paramètres N1 et N2, et les paramètres optimaux peuvent varier considérablement selon les marchés et les délais. Il est recommandé de rechercher des combinaisons de paramètres robustes en faisant des recherches historiques et en évitant les ajustements de courbe causés par une optimisation excessive.
Risque de faille majeure: dans le cas d’un saut de prix causé par un événement majeur soudain, le stop loss peut ne pas être exécuté au prix prévu, entraînant des pertes au-delà des attentes. Il peut être envisagé d’augmenter la limite de perte maximale ou d’introduire un facteur d’ajustement de la volatilité.
Risques liés à la gestion des fonds: Bien que la stratégie comporte des mécanismes de contrôle des risques, dans des conditions de marché extrêmes, les arrêts de pertes continues peuvent entraîner une forte rétraction de la courbe des fonds. Il est recommandé de fixer une limite au nombre de pertes continues maximales ou d’introduire un contrôle de la marge de risque globale.
Confirmation de plusieurs périodes: la possibilité d’introduire des mécanismes de confirmation de tendance à plus long terme qui ne considèrent l’entrée que si la tendance est cohérente sur plusieurs périodes, améliorant ainsi la qualité du signal. Par exemple, la possibilité d’ajouter des conditions pour vérifier si la direction de la tendance de la ligne du jour est cohérente avec la direction de la tendance du cycle de négociation en cours.
Filtre de fluctuationIntroduire des conditions de filtrage de la volatilité, exécuter des signaux de négociation uniquement lorsque la volatilité du marché est dans une plage raisonnable, éviter d’entrer dans un marché trop calme ou trop volatile. Les valeurs relatives à l’ATR (telles que l’ATR / prix) peuvent être utilisées comme indicateur de filtrage.
Mécanisme de confirmation du signal: ajouter un mécanisme de confirmation de rupture, comme demander au prix de rester un certain temps ou une certaine quantité après la rupture pour confirmer l’efficacité du signal, réduire les pertes causées par une fausse rupture.
Ajustement des paramètres dynamiques: Adaptation des paramètres N1 et N2 en fonction de l’évolution des conditions du marché, utilisation de différentes combinaisons de paramètres dans différents environnements de volatilité, amélioration de l’adaptabilité de la stratégie aux conditions du marché.
Ajouter une évaluation de la force de la tendanceL’évaluation de la force de la tendance actuelle, combinée à des indicateurs de la force de la tendance (ADX, inclinaison de la régression linéaire, etc.), ne prend en compte l’entrée que lorsque la force de la tendance atteint un certain seuil, ce qui améliore la précision de la capture de la tendance.
Optimisation des mécanismes de couverture: On peut envisager d’introduire des méthodes de stop mobile ou de stop basées sur les points de support / résistance, tout en conservant la fonction de contrôle du risque, pour donner plus de place à la tendance.
La stratégie de suivi de la tendance à la rupture multi-indicateurs est une stratégie de négociation systématique qui combine la philosophie classique de la négociation de la pirogue avec les techniques modernes de gestion des risques. En déterminant la direction de la tendance à travers la rupture de prix à plusieurs cycles, en combinaison avec l’ATR pour le contrôle dynamique des arrêts de perte et des positions, la stratégie est capable de capturer efficacement les opportunités de tendance significatives sur le marché.
Les principaux avantages de la stratégie résident dans les règles de négociation systématiques et les contrôles rigoureux des risques, l’évitement des perturbations émotionnelles, tout en offrant une plus grande flexibilité grâce à l’ajustement des paramètres. Cependant, en tant que stratégie de suivi de tendance, elle peut mal fonctionner dans un marché en turbulence, ce qui nécessite que l’utilisateur comprenne son scénario d’application et optimise les paramètres appropriés.
La stratégie devrait améliorer encore la qualité et la stabilité des signaux en introduisant des optimisations telles que la confirmation de plusieurs périodes, le filtrage de la volatilité et le mécanisme de confirmation des signaux, afin de s’adapter à un environnement de marché plus diversifié. Enfin, la stratégie de suivi des tendances de rupture multi-indicateurs offre aux traders un moyen fiable et systématique de capturer les tendances du marché tout en contrôlant les risques et en obtenant une solide performance commerciale à long terme.
/*backtest
start: 2024-07-03 00:00:00
end: 2025-07-01 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/
//@version=5
strategy("Turtle Trading Strategy (Simplified)", overlay=true, initial_capital=10000, default_qty_type=strategy.cash, default_qty_value=1000, commission_type=strategy.commission.cash_per_order, commission_value=1)
// --- Strategy Inputs ---
n1_entry_period = input.int(20, title="Entry Lookback Period (N1)", minval=1)
n2_exit_period = input.int(10, title="Exit Lookback Period (N2)", minval=1)
atr_period = input.int(20, title="ATR Period", minval=1)
atr_multiplier = input.float(2.0, title="ATR Stop Multiplier", minval=0.1)
risk_per_trade_percent = input.float(1.0, title="Risk Per Trade (%)", minval=0.1, maxval=10.0)
// --- Calculate Channels ---
highest_high_n1 = ta.highest(high, n1_entry_period)
lowest_low_n1 = ta.lowest(low, n1_entry_period)
highest_high_n2 = ta.highest(high, n2_exit_period)
lowest_low_n2 = ta.lowest(low, n2_exit_period)
// --- Calculate ATR (Average True Range) ---
atr_value = ta.atr(atr_period)
// --- Position Sizing (Simplified) ---
// This aims to calculate units based on a fixed percentage risk per trade.
// 1 Unit = 1 ATR worth of movement. Risk 1% of equity per trade.
risk_amount = strategy.initial_capital * (risk_per_trade_percent / 100)
dollar_per_point = syminfo.mintick // Or your instrument's specific dollar per point value
unit_size = atr_value * dollar_per_point > 0 ? math.round(risk_amount / (atr_value * dollar_per_point)) : 0
// Ensure unit_size is at least 1 if risk allows, and cap it for realism
if unit_size == 0 and risk_amount > 0
unit_size := 1 // Minimum 1 unit if risk allows any trade
if unit_size > 10000 // Cap unit size to prevent excessively large positions in backtesting
unit_size := 10000
// --- Entry Logic ---
long_condition = ta.crossover(close, highest_high_n1[1]) // Break above previous N1 high
short_condition = ta.crossunder(close, lowest_low_n1[1]) // Break below previous N1 low
// Variables to store entry information only for the *current* bar
var float current_entry_price = na
var int current_entry_type = 0 // 1 for long, -1 for short, 0 for no entry
if long_condition and strategy.opentrades == 0 // Only enter if no open positions
strategy.entry("Long", strategy.long, qty=unit_size, comment="Turtle Long Entry")
// Store entry details for the current bar
current_entry_price := close // Or strategy.opentrades[0].entry_price if you prefer but close on entry bar is often same
current_entry_type := 1
if short_condition and strategy.opentrades == 0 // Only enter if no open positions
strategy.entry("Short", strategy.short, qty=unit_size, comment="Turtle Short Entry")
// Store entry details for the current bar
current_entry_price := close // Or strategy.opentrades[0].entry_price
current_entry_type := -1
// --- Exit Logic ---
// Declare persistent variables to store stop prices
var float long_stop_price = na
var float short_stop_price = na
// Calculate and store stop price on the bar *after* an entry
if current_entry_type[1] == 1 // If a long entry occurred on the previous bar
long_stop_price := current_entry_price[1] - (atr_value[1] * atr_multiplier) // Use values from previous bar
short_stop_price := na // Reset short stop
if current_entry_type[1] == -1 // If a short entry occurred on the previous bar
short_stop_price := current_entry_price[1] + (atr_value[1] * atr_multiplier) // Use values from previous bar
long_stop_price := na // Reset long stop
// Stop Loss for Long Positions
if strategy.position_size > 0 // We have a long position
strategy.exit("Long Exit SL", from_entry="Long", stop=long_stop_price, comment="Long Stop Loss")
// Stop Loss for Short Positions
if strategy.position_size < 0 // We have a short position
strategy.exit("Short Exit SL", from_entry="Short", stop=short_stop_price, comment="Short Stop Loss")
// N2 Exit for Long Positions
if strategy.position_size > 0 and ta.crossunder(close, lowest_low_n2[1])
strategy.close("Long", comment="Turtle Long N2 Exit")
// N2 Exit for Short Positions
if strategy.position_size < 0 and ta.crossover(close, highest_high_n2[1])
strategy.close("Short", comment="Turtle Short N2 Exit")
// --- Plotting for Visualization ---
plot(highest_high_n1, "N1 High", color=color.green, linewidth=2, style=plot.style_linebr)
plot(lowest_low_n1, "N1 Low", color=color.red, linewidth=2, style=plot.style_linebr)
plot(highest_high_n2, "N2 High (Exit)", color=color.blue, linewidth=1, style=plot.style_linebr)
plot(lowest_low_n2, "N2 Low (Exit)", color=color.orange, linewidth=1, style=plot.style_linebr)