Stratégie de rupture de support et de résistance et système de trading quantitatif de filtre de tendance ADX

ADX SMA 支撑阻力位 趋势滤波器 突破策略 枢轴点 动向指标 风险管理
Date de création: 2025-05-30 11:58:27 Dernière modification: 2025-05-30 11:58:27
Copier: 0 Nombre de clics: 367
2
Suivre
319
Abonnés

Stratégie de rupture de support et de résistance et système de trading quantitatif de filtre de tendance ADX Stratégie de rupture de support et de résistance et système de trading quantitatif de filtre de tendance ADX

Aperçu

Le système de négociation quantifiée par filtre ADX est une stratégie de négociation intégrée qui combine l’identification de points de résistance de soutien, la confirmation de tendance et la vérification de la force du marché dans l’analyse technique. La stratégie est basée sur le comportement de rupture des prix du marché sur les niveaux de prix critiques et améliore la fiabilité du signal de négociation en utilisant la moyenne mobile et l’indice de direction moyenne (ADX) comme filtre. Le système utilise un cadre temporel d’une heure pour construire des zones de résistance de rupture de soutien dynamiques en identifiant les hauts et les bas de l’axe et en émettant des signaux de négociation lorsque ces zones de rupture de prix sont activées, tout en mettant en place un système de stop loss à pourcentage fixe pour contrôler le risque.

Principe de stratégie

Les principes centraux de cette stratégie sont basés sur le comportement de rupture des prix dans les points de résistance de soutien critiques, combinés à la direction de la tendance et au filtrage de l’intensité du marché, pour former un système de négociation complet. Les principes de mise en œuvre comprennent:

  1. Détection de la résistance au supportLe système utilise la méthode des Pivot Points pour identifier les niveaux de prix importants.ta.pivothighetta.pivotlowLa fonction calcule les hauts et les bas de l’axe central en utilisant 5 cycles comme paramètres par défaut et place ces points comme points de résistance et de support potentiels.

  2. Gestion dynamique des régions: Système utilisant une structure d’arrayonssupportLevelsetresistanceLevelsStocker le bit de résistance supporté, et passer par une fonction personnaliséef_add_levelGérer intelligemment ces niveaux de prix. Cette fonction assure que les niveaux nouvellement ajoutés sont suffisamment éloignés des niveaux existants (par défaut 2%) pour éviter la surpopulation des zones, tout en limitant le maintien de 5 niveaux les plus récents.

  3. Filtre de confirmation de tendance: La stratégie utilise la moyenne mobile simple à 50 cycles (SMA) comme indicateur de la direction de la tendance. Le surplus n’est considéré que lorsque le prix est au-dessus de la moyenne et le creux au-dessous de la moyenne, afin de suivre la tendance générale du marché.

  4. Vérification de la force du marché: Évaluation de la force du marché via la fonction ADX (indice de direction moyenne) personnalisée. La valeur ADX doit être supérieure à la barre définie (défaut de 25), assurant l’entrée en bourse uniquement lorsque le marché est suffisamment fort pour éviter les fausses percées dans un environnement de marché faible.

  5. Signal d’entrée généré:

    • Signaux à plusieurs têtes: déclenchés lorsque le prix franchit le support en dessous (le bas est inférieur au support mais le prix de clôture est supérieur au support) et que le prix est au-dessus de la moyenne des 50 cycles et que la valeur ADX est supérieure à la valeur de la marge.
    • Signal de tête vide: déclenché lorsque le prix franchit la résistance par le haut (le sommet est au-dessus de la résistance, mais le prix de clôture est en dessous de la résistance) et que le prix est en dessous de la moyenne des 50 cycles et que la valeur ADX est supérieure à la valeur de la baisse.
  6. Le mécanisme de gestion des risques: La stratégie utilise un stop loss et un stop loss à pourcentage fixe, un stop loss et un stop loss à 15% par défaut pour le multi-chef et un stop loss et un stop loss et un stop loss à 10% par défaut pour le vacant. Une fois que le prix atteint ces niveaux, le système nettoie automatiquement la position et réinitialise le trading.

Avantages stratégiques

Sur la base d’une analyse approfondie du code, cette stratégie présente les avantages suivants:

  1. Mécanisme de confirmation multiple: La triple confirmation combinant la résistance de rupture du support, la direction de la tendance et la force de l’ADX réduit efficacement le risque de fausse rupture. Le mécanisme de confirmation multiple améliore la fiabilité des signaux de négociation par rapport à un seul indicateur.

  2. Zones de résistance dynamiquesLe système identifie et gère dynamiquement les points de résistance et de soutien en fonction de l’environnement du marché. Il conserve jusqu’à cinq points de résistance et de soutien les plus récents, en veillant à ce que la stratégie se concentre sur les niveaux de prix les plus pertinents.

  3. Groupe de régions intelligentes: Par le paramètre de pourcentage de la largeur maximale de la zone (maxZoneWidthPct), le recomptage des points de résistance de support trop proches est évité et le signal redondant est réduit.

  4. Calcul ADX personnalisé: Stratégie d’utilisation de la fonction ADX personnalisée pour assurer l’exactitude et la flexibilité des calculs de l’indicateur en calculant directement l’amplitude réelle, le déplacement de la direction et le traitement de l’alignement.

  5. Configuration flexible des paramètres: La stratégie offre plusieurs paramètres réglables, y compris la longueur de l’axe cardinal, le cycle de rétrocession, la largeur maximale de la zone, le pourcentage de stop loss et le seuil ADX, que l’utilisateur peut optimiser en fonction des différentes conditions du marché et des préférences de négociation.

  6. Le contrôle des risques est clair: Fournir un cadre de gestion des risques clair pour chaque transaction, en prévoyant un pourcentage de stop-loss par défaut, afin de prévenir les pertes excessives de chaque transaction, tout en bloquant les bénéfices raisonnables.

  7. La visualisation intuitiveLa stratégie consiste à marquer les résistances de soutien et les signaux de transaction sur un graphique, en fournissant un retour visuel intuitif par le codage des couleurs (support en vert, résistance en rouge) et les balises (long, court, EXIT) pour faciliter l’analyse de retour et la surveillance en temps réel.

Risque stratégique

Malgré la bonne conception de la stratégie, les risques et les limites potentiels sont les suivants:

  1. Une fausse percée dans un marché très volatil: Dans un environnement de marché hautement volatile, les prix peuvent fréquemment franchir la résistance de soutien et revenir à la zone d’origine, ce qui entraîne une augmentation du nombre de signaux de fausse rupture. Solution: Il est possible d’envisager d’augmenter le cycle de confirmation, en demandant aux prix de rester un certain temps après la rupture ou de former une forme particulière avant de confirmer le signal.

  2. Une dépendance excessive à la résistance historique: La stratégie est basée sur des niveaux de résistance de soutien formés historiquement, ces niveaux historiques peuvent être invalidés en cas de changements fondamentaux dans la structure du marché (comme les événements majeurs de l’actualité). Solution: Il est possible d’envisager d’ajouter un mécanisme d’ajustement dynamique pour ajuster automatiquement les niveaux de résistance de soutien en fonction de la volatilité du marché.

  3. Limitation du pourcentage fixe de stop loss: Le stop loss à pourcentage fixe peut ne pas convenir à tous les environnements de marché, peut être trop élevé dans les marchés à faible volatilité et peut être trop faible dans les marchés à forte volatilité. Solution: Il est possible de considérer un ajustement dynamique du niveau de stop loss en fonction de l’ATR (amplitude réelle des vagues).

  4. Risque d’inversion de tendance: L’utilisation d’un SMA à 50 cycles comme indicateur de tendance peut entraîner un retard de réaction au début d’un renversement de tendance, ce qui entraîne une entrée en cours de tendance alors que la tendance est sur le point de s’arrêter. Remède: Vous pouvez envisager d’ajouter un indicateur de tendance à court terme plus sensible ou un indicateur de dynamique comme jugement auxiliaire.

  5. Stratégies à forte intensité de calculLes stratégies nécessitent le calcul et la maintenance en temps réel de plusieurs ensembles et indicateurs, et peuvent faire face à des défis de performance dans des environnements de transactions à haute fréquence ou de ressources limitées. Les solutions: optimiser l’efficacité de l’algorithme, réduire les calculs inutiles ou envisager de réduire la fréquence des mises à jour.

  6. Paramètre SensibilitéLes performances stratégiques sont sensibles aux paramètres (par exemple, la longueur de l’axe pivot, les seuils ADX) et une mauvaise sélection des paramètres peut entraîner une survente des transactions ou des opportunités manquées. Solution: établir un cadre d’optimisation des paramètres en analysant les performances des paramètres dans différentes conditions de marché.

Orientation de l’optimisation de la stratégie

Sur la base d’une analyse approfondie du code stratégique, voici les directions d’optimisation potentielles:

  1. Mécanisme d’adaptation des paramètresIntroduction d’un mécanisme permettant d’ajuster automatiquement les paramètres clés en fonction de la volatilité du marché. Par exemple, augmenter les seuils d’ADX ou la largeur des zones de résistance de soutien pendant les périodes de forte volatilité et réduire ces paramètres pendant les périodes de faible volatilité, afin de mieux adapter la stratégie aux différentes conditions du marché. Cela réduit les erreurs de transaction dans des conditions de marché inappropriées.

  2. Analyse de plusieurs périodesEn vérifiant si les niveaux de résistance de soutien sur les graphiques de jour ou de jour correspondent aux niveaux sur les graphiques de 1 heure actuels, il est possible d’identifier des zones de prix critiques plus fortes et reconnues sur plusieurs périodes, ce qui améliore la qualité du signal.

  3. Confirmation de la transaction: Validation de l’efficacité de la rupture combinée à l’analyse du volume des transactions. Les ruptures vraiment efficaces sont généralement accompagnées d’une augmentation significative du volume des transactions. Le risque de fausse rupture causée par un faible volume des transactions peut être réduit en ajoutant des conditions de filtrage du volume des transactions.

  4. Arrêt et arrêt dynamiqueIl permet une plus grande flexibilité dans la gestion des risques, permettant d’ajuster automatiquement le niveau de protection en fonction des conditions actuelles du marché, de définir des arrêts plus souples dans les marchés à forte volatilité et des arrêts plus serrés dans les marchés à faible volatilité.

  5. Le blocage partiel des bénéficesIntroduction d’un mécanisme de profit par tranches, permettant de déplacer les pertes au coût ou de bloquer une partie des bénéfices après avoir atteint un certain niveau de profit. Cette méthode peut réduire le risque de retrait tout en conservant un potentiel de rendement élevé.

  6. Intégration des indicateurs émotionnelsConsidérez l’intégration d’indicateurs de l’humeur du marché (comme le VIX ou l’indicateur de la relative faiblesse) comme condition de filtrage supplémentaire. L’humeur du marché affecte souvent la durabilité des percées.

  7. Classement de la résistance au supportIntroduction d’un mécanisme d’évaluation de l’intensité des points de résistance de soutien, permettant de noter les niveaux d’intensité en fonction de facteurs tels que le nombre de tests historiques, la durée de formation. Ainsi, il est possible de donner la priorité aux niveaux de prix les plus forts et les plus susceptibles de provoquer une réaction efficace.

  8. Optimisation du machine learningLes algorithmes d’apprentissage automatique peuvent aider à identifier les combinaisons de paramètres et les conditions de marché les plus efficaces en analysant les modèles de transactions qui ont réussi et échoué dans les données historiques.

Résumer

Le système de négociation quantifiée par filtre ADX est un système de négociation intégré bien conçu qui combine plusieurs éléments clés de l’analyse technique. La stratégie identifie et surveille dynamiquement les points de résistance de soutien, en combinant le filtrage de la direction de la tendance et de la force du marché, pour créer un mécanisme de génération de signaux de négociation relativement fiable.

Le principal avantage de la stratégie réside dans son mécanisme de confirmation multiple et son cadre de gestion des risques, qui réduisent efficacement le risque de faux-breech et limitent les pertes potentielles d’une seule transaction. En outre, la stratégie offre de nombreuses options de configuration de paramètres, permettant aux traders de s’adapter de manière flexible en fonction de leurs préférences de risque personnelles et de l’environnement du marché.

Cependant, la stratégie est confrontée à des défis, tels que le risque de faux-passer dans des marchés très volatils, les limites des stop-loss fixes et la sensibilité des paramètres. Les performances de la stratégie devraient être encore améliorées par l’introduction de mesures d’optimisation telles que des mécanismes de paramètres adaptatifs, l’analyse des cadres temporels multiples, la confirmation du volume des transactions et la gestion dynamique des risques.

Dans l’ensemble, il s’agit d’une stratégie de trading quantitative logiquement claire et rationnellement conçue, adaptée aux traders ayant une certaine compréhension de l’analyse technique et de la structure du marché. Par l’optimisation continue et l’adaptation aux changements du marché, la stratégie a le potentiel de maintenir une performance stable dans différents environnements de marché.

Code source de la stratégie
/*backtest
start: 2024-05-30 00:00:00
end: 2025-05-29 00:00:00
period: 3d
basePeriod: 3d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy("S/R Breakout Strategy (1H) with Trend and ADX Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// ─────────────────────────────────────────────────────────────
// INPUTS
// ─────────────────────────────────────────────────────────────
pivotLen        = input.int(5, title="Pivot Length")
lookbackBars    = input.int(300, title="Lookback Bars")
maxZoneWidthPct = input.float(2.0, title="Max Zone Width %")
tpLong          = input.float(0.15, title="Take Profit % (Long)")
slLong          = input.float(0.10, title="Stop Loss % (Long)")
tpShort         = input.float(0.10, title="Take Profit % (Short)")
slShort         = input.float(0.10, title="Stop Loss % (Short)")
allowLong       = input.bool(true, title="Allow Long Trades")
allowShort      = input.bool(true, title="Allow Short Trades")

// ADX settings
adxThreshold    = input.float(25.0, title="ADX Threshold")
adxLen          = input.int(14, title="ADX Length")

// Trend filter: 50-period moving average
ma50 = ta.sma(close, 50)

// ─────────────────────────────────────────────────────────────
// CUSTOM ADX FUNCTION
// ─────────────────────────────────────────────────────────────
// This function calculates ADX using the common method based on true range,
// directional movement and smoothing it with the RMA.
f_adx(len) =>
    // true range for the current bar
    tr = ta.tr
    // Calculate upward and downward moves
    upMove   = high - high[1]
    downMove = low[1] - low
    // Determine directional movements
    plusDM  = (upMove > downMove and upMove > 0) ? upMove : 0.0
    minusDM = (downMove > upMove and downMove > 0) ? downMove : 0.0
    // Smooth the values using RMA (running moving average)
    smPlusDM  = ta.rma(plusDM, len)
    smMinusDM = ta.rma(minusDM, len)
    smTR      = ta.rma(tr, len)
    // Calculate the directional indicators, avoid division by zero
    plusDI  = (smTR != 0) ? 100 * smPlusDM / smTR : 0.0
    minusDI = (smTR != 0) ? 100 * smMinusDM / smTR : 0.0
    diSum   = plusDI + minusDI
    dx      = (diSum != 0) ? 100 * math.abs(plusDI - minusDI) / diSum : 0.0
    // Smooth the DX to get ADX
    ta.rma(dx, len)

// Compute ADX value using the custom function
adxValue = f_adx(adxLen)

// ─────────────────────────────────────────────────────────────
// PIVOT DETECTION & SUPPORT/RESISTANCE LEVELS
// ─────────────────────────────────────────────────────────────
pivotHigh = ta.pivothigh(high, pivotLen, pivotLen)
pivotLow  = ta.pivotlow(low, pivotLen, pivotLen)

// Declare arrays for support and resistance levels
var float[] supportLevels    = array.new_float()
var float[] resistanceLevels = array.new_float()

// Function to add a level into the provided array if it meets the criteria.
// Always returns a float (0.0) for consistency.
f_add_level(arr, newLevel) =>
    if array.size(arr) == 0
        array.push(arr, newLevel)
    else
        shouldAdd = true
        for i = 0 to (array.size(arr) - 1)
            existing = array.get(arr, i)
            if math.abs(existing - newLevel) / newLevel * 100 <= maxZoneWidthPct
                shouldAdd := false
        if shouldAdd
            array.push(arr, newLevel)
            if array.size(arr) > 5
                array.shift(arr)
    0.0

// Update support and resistance arrays once sufficient bars have formed
if bar_index > pivotLen * 2
    if not na(pivotLow)
        f_add_level(supportLevels, pivotLow)
    if not na(pivotHigh)
        f_add_level(resistanceLevels, pivotHigh)

// ─────────────────────────────────────────────────────────────
// TRADE MANAGEMENT VARIABLES
// ─────────────────────────────────────────────────────────────
var bool   inTrade    = false
var bool   isLong     = false
var float  entryPrice = na

// Signal flags
longSignal  = false
shortSignal = false

// Detect long signal: price crosses above support level
if array.size(supportLevels) > 0
    for i = 0 to (array.size(supportLevels) - 1)
        lvl = array.get(supportLevels, i)
        if low < lvl and close > lvl
            longSignal := true

// Detect short signal: price crosses below resistance level
if array.size(resistanceLevels) > 0
    for i = 0 to (array.size(resistanceLevels) - 1)
        lvl = array.get(resistanceLevels, i)
        if high > lvl and close < lvl
            shortSignal := true

// ─────────────────────────────────────────────────────────────
// ENTRY CONDITIONS & EXECUTION
// ─────────────────────────────────────────────────────────────
if not inTrade
    // Long entry: require long signal, price above 50MA, and ADX above threshold
    if allowLong and longSignal and close > ma50 and adxValue > adxThreshold
        strategy.entry("Long", strategy.long)
        label.new(x=bar_index, y=low, text="LONG", xloc=xloc.bar_index, style=label.style_label_up, color=color.green, textcolor=color.white)
        entryPrice := close
        isLong     := true
        inTrade    := true
    // Short entry: require short signal, price below 50MA, and ADX above threshold
    else if allowShort and shortSignal and close < ma50 and adxValue > adxThreshold
        strategy.entry("Short", strategy.short)
        label.new(x=bar_index, y=high, text="SHORT", xloc=xloc.bar_index, style=label.style_label_down, color=color.red, textcolor=color.white)
        entryPrice := close
        isLong     := false
        inTrade    := true

// ─────────────────────────────────────────────────────────────
// EXIT CONDITIONS
// ─────────────────────────────────────────────────────────────
if inTrade
    ret = isLong ? (close - entryPrice) / entryPrice : (entryPrice - close) / entryPrice
    tp  = isLong ? tpLong : tpShort
    sl  = isLong ? slLong : slShort
    if ret >= tp or ret <= -sl
        strategy.close_all()
        label.new(x=bar_index, y=close, text="EXIT", xloc=xloc.bar_index, style=label.style_label_left, color=color.orange, textcolor=color.black)
        inTrade    := false
        entryPrice := na

// ─────────────────────────────────────────────────────────────
// ALERT CONDITIONS
// ─────────────────────────────────────────────────────────────
alertcondition(longSignal and allowLong, title="Long Breakout", message="🚀 Long breakout on {{ticker}} at {{close}}")
alertcondition(shortSignal and allowShort, title="Short Breakout", message="🔻 Short breakout on {{ticker}} at {{close}}")