Stratégie du système de moyenne mobile double à percée croisée

EMA 均线 突破 交叉 回测 双轨系统 趋势跟踪 技术分析 价格行为 突破确认 无接触蜡烛 止损优化
Date de création: 2025-03-26 11:14:18 Dernière modification: 2025-03-26 11:14:18
Copier: 1 Nombre de clics: 305
2
Suivre
319
Abonnés

Stratégie du système de moyenne mobile double à percée croisée Stratégie du système de moyenne mobile double à percée croisée

Aperçu

La stratégie de rupture croisée est une stratégie d’analyse technique basée sur les hauts et les bas des moyennes mobiles à 32 cycles de l’indice ((EMA)). L’idée centrale de la stratégie est de confirmer la direction de la tendance en identifiant les points de rupture du prix avec l’EMA à 32 cycles ainsi que des formes spéciales de “coup de contact” et d’entrer en négociation après la confirmation d’une rupture de prix clé.

Principe de stratégie

Le fonctionnement de la stratégie repose sur les étapes clés suivantes:

  1. Calculer les hauts et les bas de l’EMA de 32 cycles comme lignes de référence principales.
  2. Identifier les intersections clés entre le prix et l’EMA: marquez une opportunité de survente potentielle lorsque le prix de clôture traverse le haut de l’EMA; marquez une opportunité de survente potentielle lorsque le prix de clôture traverse le bas de l’EMA.
  3. Recherche de la forme “couple sans contact”: en direction plurielle, identifier le rayonnement situé entièrement au-dessus du point le plus élevé de l’EMA; en direction vide, identifier le rayonnement situé entièrement au-dessous du point le plus bas de l’EMA.
  4. Enregistrez le plus haut ou le plus bas du premier contact sans contact comme point de référence de rupture.
  5. Un signal d’entrée est déclenché lorsque le prix dépasse le point de référence et que le prochain symétrique apparaît.
  6. Stratégie d’exit: placement en position libre lorsque le prix se termine au-dessus de l’EMA; placement en position libre lorsque le prix se termine au-dessus de l’EMA.

La logique centrale de cette stratégie est qu’elle nécessite non seulement un croisement des prix avec les EMA, mais aussi le filtrage des faux signaux par des “coupons sans contact” et des confirmations de rupture, afin d’améliorer l’exactitude des transactions. Ce mécanisme de confirmation multiple réduit efficacement le risque d’erreur d’entrée dans le marché de la liquidation.

Avantages stratégiques

En analysant le code en profondeur, cette stratégie présente les avantages suivants:

  1. Mécanisme de double confirmation: la stratégie nécessite non seulement la croisée des prix avec les EMA, mais aussi la confirmation de la rupture de la “coupure sans contact” et des prix, réduisant considérablement le risque de fausse rupture.
  2. Le suivi de la tendance et le contrecoup: Bien que principalement une stratégie de suivi de la tendance, la capture des intersections EMA permet également de détecter en temps opportun les revirements de tendance potentiels.
  3. Règles d’entrée et de sortie claires: les stratégies ont des conditions d’entrée et de sortie strictement définies, réduisant les jugements subjectifs et facilitant la mise en œuvre et le retrait programmatiques.
  4. L’aide visuelle est abondante: la stratégie fournit une variété d’indicateurs visuels sur le graphique, y compris les lignes EMA, les points de rupture et divers marqueurs de signaux de négociation, pour aider les traders à mieux comprendre l’état du marché.
  5. La gestion de l’état est améliorée: le code utilise plusieurs variables de Boole pour suivre de près l’état des transactions afin de s’assurer qu’il n’y a pas de signaux d’entrée répétée ou de confusion.
  6. Adapté aux fluctuations à court terme: Conçu pour un délai de 5 minutes, il est capable de saisir efficacement les opportunités de trading créées par les fluctuations à court terme du marché.

Risque stratégique

Malgré cette stratégie bien conçue, les risques potentiels sont les suivants:

  1. Risque de reprise horizontale: dans un marché volatile où les prix traversent fréquemment les EMA, cela peut entraîner des transactions fréquentes et des pertes continues. La solution consiste à ajouter des conditions de filtrage supplémentaires à l’environnement du marché, telles qu’un indicateur de volatilité ou un indicateur de force de tendance.
  2. La sensibilité des paramètres: les paramètres EMA à 32 cycles sont au cœur de la stratégie, et différents marchés ou périodes de temps peuvent nécessiter des paramètres différents. Il est recommandé d’identifier les paramètres les mieux adaptés à une variété de transactions particulière en effectuant un retour d’expérience.
  3. Risque de retard: En raison de la nécessité de confirmer plusieurs fois la stratégie, il peut y avoir des retards d’entrée et des manquements partiels dans les changements rapides de tendance. Il est possible d’envisager une adéquate relaxation des conditions d’entrée dans un environnement de forte tendance.
  4. Risque de fausse rupture: malgré plusieurs confirmations, il est possible que le marché se retire rapidement après une fausse rupture. Vous pouvez envisager d’ajouter des stratégies de stop loss ou d’utiliser une gestion de position plus prudente.
  5. Limitation de la période: la stratégie est conçue pour la période de 5 minutes et peut ne pas fonctionner correctement si elle est appliquée directement à d’autres périodes. Les paramètres doivent être réoptimisés si elles sont appliquées à d’autres périodes.
  6. Manque de stop-loss: la stratégie actuelle ne fait que bloquer les pertes. Il n’y a pas de règle de stop-loss claire, ce qui peut entraîner une sortie prématurée ou une perte de profit avant la fin de la tendance. Il est recommandé d’ajouter un stop-loss dynamique basé sur la volatilité ou la résistance au support.

Orientation de l’optimisation de la stratégie

Sur la base de l’analyse du code, voici les principales directions dans lesquelles la stratégie peut être optimisée:

  1. Cycles EMA dynamiques: il est possible d’envisager d’ajuster les cycles EMA dynamiquement en fonction de la volatilité du marché, en utilisant des EMA plus courts dans les marchés à forte volatilité et des EMA plus longs dans les marchés à faible volatilité, afin de s’adapter à différentes conditions de marché.
  2. Ajout de filtres de force de tendance: vous pouvez introduire des indicateurs de force de tendance tels que l’ADX, ouvrir une position uniquement si la force de tendance est suffisante, éviter de négocier fréquemment sur le marché horizontal.
  3. Optimiser les stratégies de stop-loss: ajouter des mécanismes de stop-loss dynamiques basés sur l’ATR ou les niveaux de prix critiques pour protéger les bénéfices lorsque la tendance est favorable.
  4. Filtrage temporel: ajouter des conditions de filtrage temporel pour éviter de négocier pendant les heures d’ouverture, de fermeture ou de faible liquidité du marché.
  5. Analyse des périodes multiples: intégrer la direction de la tendance des périodes supérieures comme condition de filtrage et ne négocier que lorsque les périodes multiples sont cohérentes.
  6. Optimisation de la gestion des positions: Adaptation dynamique de la taille des positions en fonction de la volatilité du marché ou du ratio de risque du compte, plutôt que des positions fixes.
  7. Augmentation de la limite de durée des transactions: si les transactions ne réalisent pas les bénéfices attendus dans un certain temps, la liquidation automatique est effectuée afin d’éviter une emprisonnement à long terme.

Ces orientations d’optimisation visent principalement à améliorer la robustesse et l’adaptabilité des stratégies et à réduire les pertes dans des conditions de marché défavorables.

Résumer

La stratégie du système bi-homogène de rupture croisée est un système de négociation d’analyse technique soigneusement conçu pour identifier les opportunités de négociation à haute probabilité grâce à des mécanismes multiples tels que les hauts et les bas de l’EMA à 32 cycles, les croisements de prix, les piles sans contact et les confirmations de rupture. La stratégie se démarque dans les marchés à tendance claire et réduit efficacement le risque de fausse entrée grâce à une confirmation d’entrée stricte et à des règles de sortie claires.

Cependant, toute stratégie de négociation a ses limites et peut être confrontée à des défis dans un marché horizontal ou hautement volatile. La stabilité et l’adaptabilité de la stratégie peuvent être encore améliorées par l’introduction de mesures d’optimisation telles que le filtrage de la force de la tendance, l’ajustement des paramètres dynamiques et l’analyse de plusieurs périodes.

En tant que système de négociation en ligne courte sur un délai de 5 minutes, la stratégie est particulièrement adaptée aux day traders et aux traders en ligne courte. Enfin, une bonne gestion des risques est toujours la clé du succès de toute stratégie de négociation, il est recommandé aux traders de faire un retour d’expérience adéquat et de simuler les transactions avant l’application en ligne, et de définir des règles de gestion de position raisonnables en fonction de la capacité de prise de risque personnelle.

Code source de la stratégie
/*backtest
start: 2024-03-26 00:00:00
end: 2025-03-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=5
strategy("TrophyFighter 32 EMA HL", overlay=true)

// 32 EMA for high and low
ema_high_32 = ta.ema(high, 32)
ema_low_32 = ta.ema(low, 32)

// Detect crossover and crossunder
cross_above_high_ema = ta.crossover(close, ema_high_32)
cross_below_low_ema = ta.crossunder(close, ema_low_32)

// Identify no-touch candles
no_touch_green = close > open and low > ema_high_32
no_touch_red = close < open and high < ema_low_32

// Track the high and low of no-touch candles
var float first_green_high = na
var float first_red_low = na
var bool waiting_for_long = false
var bool waiting_for_short = false
var bool in_long_trade = false  // Whether a long trade is active
var bool in_short_trade = false  // Whether a short trade is active
var bool first_no_touch_green_shown = false  // First green diamond shown
var bool first_no_touch_red_shown = false    // First red diamond shown

if (cross_above_high_ema and not in_long_trade and not in_short_trade)
    first_green_high := na
    waiting_for_long := true
    first_no_touch_green_shown := false  // Reset

if (cross_below_low_ema and not in_long_trade and not in_short_trade)
    first_red_low := na
    waiting_for_short := true
    first_no_touch_red_shown := false  // Reset

if (no_touch_green and waiting_for_long and ta.valuewhen(cross_above_high_ema, bar_index, 0) > ta.valuewhen(no_touch_green, bar_index, 1))
    first_green_high := high
    first_no_touch_green_shown := true  // Set first green diamond

if (no_touch_red and waiting_for_short and ta.valuewhen(cross_below_low_ema, bar_index, 0) > ta.valuewhen(no_touch_red, bar_index, 1))
    first_red_low := low
    first_no_touch_red_shown := true  // Set first red diamond

// Identify breakout (on the previous candle) - using na() function
long_breakout_check = high > ta.valuewhen(not na(first_green_high), first_green_high, 0) and not na(first_green_high) and waiting_for_long
short_breakout_check = low < ta.valuewhen(not na(first_red_low), first_red_low, 0) and not na(first_red_low) and waiting_for_short

// Buy and sell conditions (on the next same-colored candle)
long_condition = long_breakout_check[1] and close > open and not in_long_trade and not in_short_trade  // Next green candle
short_condition = short_breakout_check[1] and close < open and not in_long_trade and not in_short_trade  // Next red candle

// Breakout check (only on the signal candle)
long_breakout = long_condition  // Blue square only for signal
short_breakout = short_condition  // White square only for signal

// Signal for the first no-touch candle
first_no_touch_green = no_touch_green and not first_no_touch_green_shown and waiting_for_long and ta.valuewhen(cross_above_high_ema, bar_index, 0) > ta.valuewhen(no_touch_green, bar_index, 1)
first_no_touch_red = no_touch_red and not first_no_touch_red_shown and waiting_for_short and ta.valuewhen(cross_below_low_ema, bar_index, 0) > ta.valuewhen(no_touch_red, bar_index, 1)

// When a trade starts
if (long_condition)
    waiting_for_long := false
    in_long_trade := true  // Start long trade

if (short_condition)
    waiting_for_short := false
    in_short_trade := true  // Start short trade

// New exit rules
long_exit = close < ema_low_32 and in_long_trade  // Price drops below EMA low
short_exit = close > ema_high_32 and in_short_trade  // Price rises above EMA high

// Reset when trade closes
if (long_exit)
    in_long_trade := false

if (short_exit)
    in_short_trade := false

// Plot EMA and levels (cross style)
plot(ema_high_32, color=color.green, title="EMA High 32")
plot(ema_low_32, color=color.red, title="EMA Low 32")
plot(first_green_high, color=color.yellow, style=plot.style_cross, linewidth=1, title="First Green High")
plot(first_red_low, color=color.orange, style=plot.style_cross, linewidth=1, title="First Red Low")

// Debugging signals
plotshape(cross_above_high_ema, title="Cross Above EMA", location=location.belowbar, color=color.yellow, style=shape.circle, size=size.tiny)
plotshape(cross_below_low_ema, title="Cross Below EMA", location=location.abovebar, color=color.orange, style=shape.circle, size=size.tiny)
plotshape(first_no_touch_green, title="No Touch Green", location=location.belowbar, color=color.lime, style=shape.diamond, size=size.tiny)
plotshape(first_no_touch_red, title="No Touch Red", location=location.abovebar, color=color.purple, style=shape.diamond, size=size.tiny)
plotshape(long_breakout, title="Long Breakout", location=location.belowbar, color=color.blue, style=shape.square, size=size.tiny)
plotshape(short_breakout, title="Short Breakout", location=location.abovebar, color=color.white, style=shape.square, size=size.tiny)
plotshape(long_condition, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(short_condition, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)

// Execute trades
if (long_condition)
    strategy.entry("Long", strategy.long)
if (short_condition)
    strategy.entry("Short", strategy.short)
if (long_exit)
    strategy.close("Long", comment="Long Exit")
if (short_exit)
    strategy.close("Short", comment="Short Exit")