Stratégie de trading de tendance quantitative à plusieurs niveaux basée sur la percée des niveaux de support et de résistance et sur le backtesting

Pivot SR MA BREAKOUT RETEST Trend
Date de création: 2025-02-20 16:00:35 Dernière modification: 2025-02-20 16:00:35
Copier: 2 Nombre de clics: 377
2
Suivre
319
Abonnés

Stratégie de trading de tendance quantitative à plusieurs niveaux basée sur la percée des niveaux de support et de résistance et sur le backtesting Stratégie de trading de tendance quantitative à plusieurs niveaux basée sur la percée des niveaux de support et de résistance et sur le backtesting

Aperçu

Il s’agit d’une stratégie de négociation quantitative basée sur le support et la résistance. La stratégie consiste à identifier les points de soutien et de résistance critiques et à effectuer la transaction à la confirmation de la résistance après la rupture.

Principe de stratégie

Les stratégies comprennent principalement les éléments suivants:

  1. Identifier les points pivots de support et de résistance en regardant à droite et à gauche un nombre spécifié de lignes K
  2. Les paramètres d’état suivent les ruptures et les retours de résistance des supports candidats
  3. Mettre à jour les résistances des supports candidats à chaque nouvelle pivot
  4. Opérer une transaction lorsque le prix a franchi la résistance du support candidat et a été retesté:
    • Faites-en plus lorsque le prix revient à un niveau proche de celui de la résistance
    • Prise de position vide lorsque le prix revient à la résistance après la rupture
  5. Utilisation de paramètres de capacitance pour filtrer les fluctuations des prix lors de la rétro-mesure, améliorant la qualité du signal

Avantages stratégiques

  1. La logique est claire et compréhensible grâce à la théorie classique de l’analyse technique.
  2. L’adaptation à l’évolution grâce à l’identification dynamique des points clés
  3. Combinaison de détection et de détection de double confirmation pour réduire les faux signaux
  4. Filtrage du bruit avec des paramètres de tolérance pour une meilleure précision
  5. La structure du code est claire, facile à entretenir et à étendre
  6. Convient à plusieurs périodes et variétés

Risque stratégique

  1. La fréquence des transactions sur les marchés en crise peut entraîner des pertes
  2. Les fausses signals de détection existent toujours
  3. L’optimisation des paramètres peut comporter un risque de surapprentissage
  4. Le risque de perte est plus élevé en cas de forte volatilité du marché.
  5. La nécessité de prendre en compte l’impact sur les coûts des transactions

Orientation de l’optimisation de la stratégie

  1. Ajout d’un filtre de tendance pour négocier uniquement dans la direction de la tendance dominante
  2. Adhésion au mécanisme de confirmation des quantités
  3. Optimiser les délais d’admission et envisager d’ajouter la confirmation des indicateurs techniques
  4. Amélioration des mécanismes d’arrêt des dégâts
  5. Ajout de logique de gestion de position
  6. Considérer l’ajout d’une analyse à cycles multiples

Résumer

La stratégie est construite à partir de la théorie classique de la résistance au support et de la logique de retracement de la rupture, avec une bonne base théorique. Des résultats commerciaux stables peuvent être obtenus grâce à l’optimisation des paramètres et au contrôle des risques. La structure du code de la stratégie est claire, facile à comprendre et à étendre, avec une forte valeur pratique.

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

//@version=5
strategy("SR Breakout & Retest Strategy (4hr)", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// ===== USER INPUTS =====
leftBars    = input.int(3, "Left Pivot Bars", minval=1)
rightBars   = input.int(3, "Right Pivot Bars", minval=1)
tolerance   = input.float(0.005, "Retest Tolerance (Fraction)", step=0.001)

// ===== PIVOT CALCULATION =====
pLow  = ta.pivotlow(low, leftBars, rightBars)
pHigh = ta.pivothigh(high, leftBars, rightBars)

// ===== STATE VARIABLES FOR CANDIDATE LEVELS =====
var float candidateSupport  = na
var bool  supportBroken     = false
var bool  supportRetested   = false

var float candidateResistance = na
var bool  resistanceBroken    = false
var bool  resistanceRetested  = false

// ===== UPDATE CANDIDATE LEVELS =====
if not na(pLow)
    candidateSupport := pLow
    supportBroken    := false
    supportRetested  := false

if not na(pHigh)
    candidateResistance := pHigh
    resistanceBroken    := false
    resistanceRetested  := false

// ===== CHECK FOR BREAKOUT & RETEST =====
// -- Support: Price breaks below candidate support and then retests it --
if not na(candidateSupport)
    if not supportBroken and low < candidateSupport
        supportBroken := true

    if supportBroken and not supportRetested and close >= candidateSupport and math.abs(low - candidateSupport) <= candidateSupport * tolerance
        supportRetested := true
        label.new(bar_index, candidateSupport, "Support Retest", 
                  style=label.style_label_up, color=color.green, textcolor=color.white, size=size.tiny)
        // Example trading logic: Enter a long position on support retest
        strategy.entry("Long_Support", strategy.long)

// -- Resistance: Price breaks above candidate resistance and then retests it --
if not na(candidateResistance)
    if not resistanceBroken and high > candidateResistance
        resistanceBroken := true

    if resistanceBroken and not resistanceRetested and close <= candidateResistance and math.abs(high - candidateResistance) <= candidateResistance * tolerance
        resistanceRetested := true
        label.new(bar_index, candidateResistance, "Resistance Retest", 
                  style=label.style_label_down, color=color.red, textcolor=color.white, size=size.tiny)
        // Example trading logic: Enter a short position on resistance retest
        strategy.entry("Short_Resistance", strategy.short)

// ===== PLOTTING =====
plot(pLow, title="Pivot Low (Support)", style=plot.style_circles, color=color.green, linewidth=2)
plot(pHigh, title="Pivot High (Resistance)", style=plot.style_circles, color=color.red, linewidth=2)