Stratégie de tendance dynamique - Système de synchronisation de bande dynamique multi-périodes en zigzag

SL TP PH PL
Date de création: 2025-02-18 13:29:06 Dernière modification: 2025-02-18 13:29:06
Copier: 1 Nombre de clics: 343
1
Suivre
1617
Abonnés

Stratégie de tendance dynamique - Système de synchronisation de bande dynamique multi-périodes en zigzag

Aperçu

Cette stratégie est un système de trading multidimensionnel qui combine l’indicateur ZigZag et l’indicateur William. Il permet d’identifier les hauts et les bas importants de la bande passante, tout en utilisant l’indicateur William pour confirmer les points d’entrée lorsque le marché atteint un état de surachat ou de survente. Cette combinaison permet non seulement de capturer les principaux points de retournement de tendance du marché, mais également d’améliorer la précision des transactions grâce à la confirmation de la dynamique.

Principe de stratégie

La logique centrale de la stratégie repose sur deux composantes principales:

  1. L’indicateur littéral identifie les hauts et les bas des bandes significatives en définissant la profondeur et les paramètres de déviation, filtre le bruit du marché et détermine la direction de la tendance. Lorsqu’un nouveau bas de la bande est formé, il indique le début d’une tendance à la hausse et un nouveau haut de la bande indique le début d’une tendance à la baisse.
  2. L’indicateur William calcule l’état de dynamique du marché en comparant le prix actuel avec le prix le plus élevé au cours d’une période donnée. Lorsque la valeur de l’indicateur dépasse 80, il indique une survente ((occasions potentielles d’acheter), et une rupture de 20 indique une survente ((occasions potentielles de vendre).

Les règles de négociation de la stratégie sont les suivantes:

  • Plus de conditions: l’indicateur de mots identifie un nouveau bas de gamme et l’indicateur de William franchit la zone de survente
  • Conditions de dépréciation: l’indicateur de mots identifie un nouveau sommet de la bande et l’indicateur de William se déplace vers le bas à partir de la zone de surachat
  • Le stop loss est de 1% et le stop loss est de 2%.

Avantages stratégiques

  1. Confirmation multidimensionnelle: amélioration de la fiabilité des signaux de transaction par la double confirmation des tendances et des dynamiques
  2. Adaptabilité: les paramètres d’écart de l’indicateur de forme verbale peuvent être ajustés en fonction des fluctuations dynamiques du marché
  3. Contrôle des risques: une stratégie de stop-loss à pourcentage fixe pour contrôler le risque de chaque transaction
  4. Une bonne visualisation: affichage clair des signaux de trading grâce à des balises et des graphiques pour une analyse et une optimisation faciles

Risque stratégique

  1. Risque de choc: Faux signaux de rupture fréquents sur le marché horizontal
  2. Risque de glissement: des glissements plus importants sont possibles à grande vitesse
  3. Sensitivité des paramètres: le choix des paramètres de l’indicateur a un impact significatif sur la performance de la stratégie
  4. Lagueur de signal: il est possible de rater des événements rapides en raison de la nécessité de confirmer la formation de nouveaux points de bande

Orientation de l’optimisation de la stratégie

  1. Ajout de filtres d’environnement de marché: des indicateurs de volatilité peuvent être ajoutés pour identifier l’état du marché, en utilisant différents paramètres dans différents environnements
  2. Optimisation de stop-loss dynamique: la position de stop-loss peut être ajustée dynamiquement en fonction de l’ATR ou du taux de volatilité
  3. Introduction de la confirmation de transaction: ajout de la vérification de transaction lors de la génération du signal
  4. Filtrage temporel: vous pouvez ajouter un filtrage temporel pour éviter de négocier pendant les périodes les plus volatiles.

Résumer

Il s’agit d’un système de trading complet qui combine le suivi des tendances et le trading dynamique. Grâce à la synergie de plusieurs indicateurs techniques, il est possible de contrôler efficacement les risques tout en maintenant un taux de victoire élevé. Bien qu’il existe un certain retard, il est possible d’obtenir un effet de trading stable grâce à une optimisation raisonnable des paramètres et une gestion des risques.

Code source de la stratégie
/*backtest
start: 2024-02-18 00:00:00
end: 2025-02-15 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=6
strategy("Zig Zag + Williams %R Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=300)

// ====================
// === Parameters
// ====================

// Zig Zag parameters
zigzag_depth = input.int(5, title="Zig Zag Depth", minval=1)
zigzag_deviation = input.float(1.0, title="Zig Zag Deviation (%)", minval=0.1, step=0.1)

// Williams %R parameters
williams_length = input.int(14, title="Williams %R Length", minval=1)
williams_overbought = input.int(-20, title="Williams %R Overbought", minval=-100, maxval=0)
williams_oversold = input.int(-80, title="Williams %R Oversold", minval=-100, maxval=0)

// ====================
// === Zig Zag Calculation
// ====================

// Initialize variables
var float last_pivot_high = na
var float last_pivot_low = na
var int zz_dir = 0  // 1 for uptrend, -1 for downtrend

// Calculate pivots
pivot_high = ta.pivothigh(high, zigzag_depth, zigzag_depth)
pivot_low = ta.pivotlow(low, zigzag_depth, zigzag_depth)

// Update Zig Zag direction and last pivots with deviation
if (not na(pivot_high))
    if (zz_dir != -1)  // Only change to downtrend if not already in downtrend
        if (na(last_pivot_high) or (high[zigzag_depth] > last_pivot_high * (1 + zigzag_deviation / 100)))
            last_pivot_high := high[zigzag_depth]
            zz_dir := -1
            label.new(bar_index[zigzag_depth], high[zigzag_depth], text="PH", color=color.red, style=label.style_label_down)

if (not na(pivot_low))
    if (zz_dir != 1)  // Only change to uptrend if not already in uptrend
        if (na(last_pivot_low) or (low[zigzag_depth] < last_pivot_low * (1 - zigzag_deviation / 100)))
            last_pivot_low := low[zigzag_depth]
            zz_dir := 1
            label.new(bar_index[zigzag_depth], low[zigzag_depth], text="PL", color=color.green, style=label.style_label_up)

// ====================
// === Williams %R Calculation
// ====================

// Calculate Williams %R manually
highest_high = ta.highest(high, williams_length)
lowest_low = ta.lowest(low, williams_length)
williams_r = (highest_high - close) / (highest_high - lowest_low) * -100

// ====================
// === Trade Conditions
// ====================

// Assign crossover and crossunder results to variables
crossover_williams = ta.crossover(williams_r, williams_oversold)
crossunder_williams = ta.crossunder(williams_r, williams_overbought)

// Define trade conditions
longCondition = (zz_dir == 1) and crossover_williams
shortCondition = (zz_dir == -1) and crossunder_williams

// ====================
// === Trading
// ====================

// Enter Long
if (longCondition)
    strategy.entry("Long", strategy.long)
    label.new(bar_index, low, text="BUY", color=color.green, style=label.style_label_up)

// Enter Short
if (shortCondition)
    strategy.entry("Short", strategy.short)
    label.new(bar_index, high, text="SELL", color=color.red, style=label.style_label_down)

// ====================
// === Visualization
// ====================

// Plot Zig Zag pivot shapes
plotshape(series=(not na(pivot_high) and high[zigzag_depth] == last_pivot_high), title="Swing High", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small, text="ZZ High")
plotshape(series=(not na(pivot_low) and low[zigzag_depth] == last_pivot_low), title="Swing Low", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small, text="ZZ Low")

// Plot Williams %R
hline(williams_overbought, "Overbought", color=color.red, linestyle=hline.style_dashed)
hline(williams_oversold, "Oversold", color=color.green, linestyle=hline.style_dashed)
plot(williams_r, title="Williams %R", color=color.blue)

// Debug plot for Zig Zag direction
plot(zz_dir, title="Zig Zag Direction", color=color.orange, linewidth=2)

// ====================
// === Risk Management
// ====================

// Risk parameters
stop_loss_perc = input.float(1.0, title="Stop Loss (%)") / 100
take_profit_perc = input.float(2.0, title="Take Profit (%)") / 100

// Stop Loss and Take Profit for Long
if (longCondition)
    strategy.exit("Long Exit", from_entry="Long", stop=close * (1 - stop_loss_perc), limit=close * (1 + take_profit_perc))

// Stop Loss and Take Profit for Short
if (shortCondition)
    strategy.exit("Short Exit", from_entry="Short", stop=close * (1 + stop_loss_perc), limit=close * (1 - take_profit_perc))