Stratégies de trading quantitatives efficaces basées sur les fourchettes de prix et les percées

Pivot CONSOLIDATION ZONE BREAKOUT
Date de création: 2025-02-20 11:41:51 Dernière modification: 2025-02-27 17:46:06
Copier: 2 Nombre de clics: 363
2
Suivre
319
Abonnés

Stratégies de trading quantitatives efficaces basées sur les fourchettes de prix et les percées Stratégies de trading quantitatives efficaces basées sur les fourchettes de prix et les percées

Aperçu

Il s’agit d’une stratégie de trading quantitatif efficace basée sur des intervalles et des ruptures de prix. La stratégie consiste principalement à identifier les intervalles de rattrapage du marché et à négocier lorsque les prix franchissent ces intervalles. La stratégie utilise l’indicateur ZigZag pour identifier les points de prix critiques, en combinant les points de rattrapage définissant les zones de rattrapage et les signaux de négociation lorsque les prix franchissent ces zones.

Principe de stratégie

La logique centrale de la stratégie comprend les étapes clés suivantes:

  1. Identifier les points de basculement importants en repérant les plus hauts et les plus bas de la période de retour en arrière
  2. Suivre les tendances des prix à l’aide de l’algorithme ZigZag pour déterminer les points de support et de résistance clés
  3. Confirmation de l’intervalle de consolidation effectif en définissant la longueur minimale de consolidation
  4. Mise à jour dynamique des frontières supérieures et inférieures, suivi en temps réel des changements dans la zone de comptage
  5. Signal de transaction déclenché lorsque le prix franchit la fourchette de reprise

Avantages stratégiques

  1. Adaptabilité - la stratégie est capable d’identifier et d’actualiser dynamiquement les intervalles de couverture pour s’adapter à différents environnements de marché
  2. Risque maîtrisé - fournir une position de stop loss claire pour les transactions en définissant clairement les intervalles de liquidation
  3. Soutien visuel - fournit une présentation visuelle de la zone de couverture pour aider les traders à comprendre l’état du marché
  4. Travail bidirectionnel - soutenir les opportunités de transaction à la hausse et à la baisse pour maximiser les opportunités de marché
  5. Paramètres réglables - offre plusieurs paramètres réglables pour une optimisation en fonction des différentes caractéristiques du marché

Risque stratégique

  1. Risque de fausse rupture - le marché peut subir une fausse rupture, entraînant un échec des transactions
  2. Risque de glissade - une plus grande glissade est possible en cas de vitesse élevée
  3. Dépendance sur l’environnement du marché - les stratégies peuvent être efficaces en cas de choc, mais moins efficaces en cas de tendance
  4. Sensitivité des paramètres - une mauvaise configuration des paramètres peut affecter les performances de la stratégie
  5. Risques de gestion des fonds - un contrôle raisonnable de la taille des fonds à chaque transaction

Orientation de l’optimisation de la stratégie

  1. Introduction d’indicateurs de chiffre d’affaires - validation de la percée par le chiffre d’affaires
  2. Optimiser le timing des admissions - renforcer les mécanismes de confirmation des rappels et améliorer la qualité des admissions
  3. Améliorer les mécanismes de prévention des pertes - concevoir des stratégies de prévention des pertes plus flexibles
  4. Augmenter le filtrage des conditions de marché - ajouter un jugement de tendance pour fonctionner dans les conditions de marché appropriées
  5. Adaptation des paramètres d’optimisation - Ajustez automatiquement les paramètres en fonction de la volatilité du marché

Résumer

Il s’agit d’une stratégie de trading quantifiée conçue de manière rationnelle et logique. Elle fournit aux traders un système de trading fiable grâce à l’identification des intervalles de convergence et à la capture des signaux de rupture. L’effet de visualisation et la flexibilité des paramètres de la stratégie la rendent plus pratique.

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

// This code is released under the Mozilla Public License 2.0
// More details at: https://mozilla.org/MPL/2.0/
// © LonesomeTheBlue

//@version=5
strategy("Consolidation Zones - Live [Strategy]", overlay=true, max_bars_back=1100)

//-----------------------------------------------------------------------//
//                        Input Variables
//-----------------------------------------------------------------------//
prd       = input.int(defval=10, title="Loopback Period", minval=2, maxval=50)
conslen   = input.int(defval=5,  title="Min. Consolidation Length", minval=2, maxval=20)
paintcons = input.bool(defval=true, title="Color Consolidation Zone?")
zonecol   = input.color(defval=color.new(color.blue, 70), title="Zone Color")

//-----------------------------------------------------------------------//
//                  Variables and Calculations for ZZ (ZigZag) Detection
//-----------------------------------------------------------------------//

// Check if the bar has the highest High or lowest Low in the last prd bars
float hb_ = ta.highestbars(prd) == 0 ? high : na
float lb_ = ta.lowestbars(prd)  == 0 ? low  : na

// Convert to bool to check if hb_ and lb_ are valid (not na)
bool hasHb = not na(hb_)
bool hasLb = not na(lb_)

// Direction variable to determine the trend, based on the last high or low pivot
var int dir = 0

// ZigZag value and last pivot
float zz = na
float pp = na

// 1) Determine direction based on whether a high or low pivot occurred
dir := if hasHb and not hasLb
    1
else if hasLb and not hasHb
    -1
else
    dir  // unchanged direction

// 2) If both a high and low pivot occurred in the same bar
bool sameBar = hasHb and hasLb
if sameBar
    if dir == 1
        zz := hb_
    else
        zz := lb_
else
    zz := hasHb ? hb_ : (hasLb ? lb_ : na)

// 3) Storing last pivots (pp) - iterate over older bars
for x = 0 to 1000
    if na(close) or dir != dir[x]
        break
    if not na(zz[x])  // if zz[x] is a valid value
        if na(pp)
            pp := zz[x]
        else
            if dir[x] == 1 and zz[x] > pp
                pp := zz[x]
            if dir[x] == -1 and zz[x] < pp
                pp := zz[x]

//-----------------------------------------------------------------------//
//                Logic for Consolidation Zone Detection
//-----------------------------------------------------------------------//
var int   conscnt    = 0
var float condhigh   = na
var float condlow    = na

float H_ = ta.highest(conslen)
float L_ = ta.lowest(conslen)

var line upline      = na
var line dnline      = na

bool breakoutup    = false
bool breakoutdown  = false

// Check if pp has changed
bool changedPP = ta.change(pp) != 0

if changedPP
    // If enough candles are in consolidation, check for breakout
    if conscnt > conslen and not na(condhigh) and not na(condlow) and not na(pp)
        if pp > condhigh
            breakoutup := true
        if pp < condlow
            breakoutdown := true
    
    // Check if we are still "in the zone"
    bool inZone = conscnt > 0 and not na(pp) and not na(condhigh) and not na(condlow) and (pp <= condhigh) and (pp >= condlow)
    if inZone
        conscnt += 1
    else
        conscnt := 0
else
    // No change in pivot -> continue consolidation
    conscnt += 1

if conscnt >= conslen
    // At the first "touch" of the required number of candles
    if conscnt == conslen
        condhigh := H_
        condlow  := L_
    else
        condhigh := math.max(condhigh, high)
        condlow  := math.min(condlow, low)
    

//-----------------------------------------------------------------------//
//                          Drawing Fill
//-----------------------------------------------------------------------//
// Declare two plot variables (just ordinary assignment)
condHighPlot = plot(condhigh, color=na, style=plot.style_stepline)
condLowPlot  = plot(condlow,  color=na, style=plot.style_stepline)

// bool to check if we want to color the zone
bool doFill = paintcons and (conscnt > conslen)

// Calling fill
fill(condHighPlot, condLowPlot, color= doFill ? zonecol : color.new(color.white, 100))

//-----------------------------------------------------------------------//
//                          Alerts & STRATEGY
//-----------------------------------------------------------------------//
alertcondition(breakoutup,   title="Breakout Up",   message="Breakout Up")
alertcondition(breakoutdown, title="Breakout Down", message="Breakout Down")

if breakoutup
    // Close short first
    if strategy.position_size < 0
        strategy.close("Breakout Short")
    // Open LONG
    strategy.entry("Breakout Long", strategy.long)

if breakoutdown
    // Close long first
    if strategy.position_size > 0
        strategy.close("Breakout Long")
    // Open SHORT
    strategy.entry("Breakout Short", strategy.short)