Stratégie de suivi et d'inversion de tendance de croisement de moyenne mobile dynamique

MA SMA EMA VWMA 移动平均线 趋势跟踪 止损 交叉策略 动态阈值 多空交易
Date de création: 2025-04-29 09:28:25 Dernière modification: 2025-04-29 09:28:25
Copier: 0 Nombre de clics: 315
2
Suivre
319
Abonnés

Stratégie de suivi et d’inversion de tendance de croisement de moyenne mobile dynamique Stratégie de suivi et d’inversion de tendance de croisement de moyenne mobile dynamique

Aperçu

La stratégie de suivi et de renversement de la tendance croisée des moyennes mobiles est un système de négociation quantitative basé sur la relation entre le prix et les moyennes mobiles. La stratégie détermine les signaux de négociation en déterminant la direction des moyennes mobiles et les ruptures de prix, et dispose d’un mécanisme de stop-loss dynamique. Son idée centrale est de faire plus dans la tendance haussière et de faire moins dans la tendance baissière.

Principe de stratégie

La stratégie est basée sur les principes clés suivants:

  1. Les mécanismes de détermination des tendances dynamiques: La stratégie utilise les variations de direction des moyennes mobiles (SMA, EMA ou VWMA) pour déterminer la tendance du marché. Une hausse de la moyenne mobile est jugée comme une tendance à la hausse lorsque la hausse dépasse la limite définie (la valeur par défaut de 0,25%) et une baisse de la même valeur est jugée comme une tendance à la baisse.

  2. Conditions d’entrée précises:

    • En cas de conditions multiples, l’entrée se fait lorsque la moyenne mobile est en hausse et que le prix dépasse la moyenne mobile d’un certain pourcentage au cours de la période de négociation.
    • Faire plus de réintégration: Offrir des opportunités de réintégration lorsque le cours est toujours en hausse mais que le cours est réorienté vers la moyenne mobile (en dessous de 1,01 fois la MA).
    • Conditions de mise en libre-service: Entrée dans la période de négociation lorsque la moyenne mobile est en baisse et que le prix tombe en dessous d’un certain pourcentage de la moyenne mobile.
    • Réentrée à vide: offre une réentrée lorsque le cours est toujours en baisse et que le prix rebondit vers la moyenne mobile (plus de 0,998 fois la MA).
  3. Mécanisme à plusieurs niveaux:

    • Faire plusieurs sorties: Sortez lorsque le prix recule d’un certain pourcentage par rapport au sommet (default 1%) ou tombe en dessous de la moyenne mobile.
    • Sortie à vide: sortie lorsque le prix recule d’un certain pourcentage par rapport au point le plus bas (default 0.5%) ou qu’il dépasse la moyenne mobile.
    • Stop de dureté de l’offre: pour contrôler le risque de shorting, un stop de dureté d’un pourcentage spécifique (défault 1.5%) est défini au-dessus du prix d’entrée.
  4. Filtre par tempsLa stratégie intègre un filtrage des heures de négociation, permettant de négocier par défaut seulement entre 9h30 et 15h15, évitant ainsi les fluctuations des heures de non-transaction.

  5. Durée de détectionLes utilisateurs peuvent personnaliser les dates de début et de fin de la rétroaction pour évaluer la performance de la stratégie dans différents environnements de marché.

Avantages stratégiques

Une analyse approfondie de la stratégie a révélé les avantages suivants:

  1. Adaptation au marché: La stratégie est capable d’ajuster automatiquement la direction de la transaction en fonction des tendances du marché, en fonction des différentes conditions du marché, en fonction de la direction de la moyenne mobile dynamique.

  2. Le contrôle des risquesLa stratégie a conçu un mécanisme de contrôle du risque à plusieurs niveaux, comprenant un filtrage de tendance, des sorties de retrait, des moyennes mobiles traversant les sorties et des arrêts de dureté, afin de prévenir efficacement les pertes importantes.

  3. Sensibilité de réaction réglableEn ajustant le type de moyenne mobile (SMA/EMA/VWMA), la base de calcul (prix de clôture/OHLC/4, etc.) et les paramètres de longueur, l’utilisateur peut optimiser la sensibilité de la stratégie aux fluctuations du marché.

  4. Diversité des offres d’admissionLa stratégie fournit non seulement les principaux signaux d’entrée de rupture, mais comprend également un mécanisme de réinitialisation de la réentrée, augmentant les opportunités de négociation et optimisant le prix moyen d’entrée.

  5. Vue d’état des transactions: Le code intègre des balises d’état de transaction et des balises d’entrée et de sortie pour visualiser l’exécution de la stratégie et faciliter l’analyse et l’optimisation.

  6. Un système d’alerte complet: Fonction d’alerte de signal de transaction intégrée, permettant une surveillance et des rappels en temps réel, améliorant l’efficacité de l’exécution de la stratégie.

Risque stratégique

Bien que cette stratégie soit conçue de manière globale, les risques potentiels sont les suivants:

  1. Faux signaux sur les marchés: Dans les marchés à oscillation horizontale, la direction de la moyenne mobile peut varier fréquemment, ce qui entraîne des transactions excessives et des pertes. La solution consiste à ajouter un seuil de confirmation de direction ou à intégrer d’autres signaux de filtrage d’indicateurs.

  2. Paramètre Sensibilité: La performance de la stratégie dépend fortement des paramètres tels que la longueur des moyennes mobiles et les pourcentages de toutes sortes de marges. Différentes variétés de transactions peuvent nécessiter des paramètres différents, ce qui nécessite une optimisation adéquate des paramètres.

  3. Manque de confirmation de la livraison: La stratégie actuelle est basée sur la relation entre les prix et les moyennes mobiles et ne prend pas en compte les facteurs de volume, ce qui peut générer des signaux trompeurs dans un environnement de faible volume.

  4. Risque de faille lié à la limitation des heures de négociationLa stratégie de limiter les transactions à des périodes précises peut ne pas être adaptée aux changements majeurs de la tendance de l’après-midi ou de l’extérieur des heures de négociation, en particulier aux sauts de prix.

  5. Réaction retardée à l’inversion de tendance: Bien qu’il existe des mécanismes d’évaluation des tendances dynamiques, la réaction à un revirement de tendance brusque peut être retardée, ce qui peut entraîner un retrait plus important dans un marché à rebours rapides.

Orientation de l’optimisation de la stratégie

Cette stratégie peut être optimisée dans les directions suivantes, en fonction de l’analyse du code:

  1. Indicateur de dynamique intégré: l’intégration d’indicateurs dynamiques tels que le RSI et le MACD dans le système de confirmation des signaux améliore l’exactitude des jugements de tendance et réduit les faux signaux. La raison en est que les ruptures de prix pur peuvent parfois conduire à des erreurs de jugement, tandis que les indicateurs dynamiques fournissent une confirmation supplémentaire.

  2. Augmentation des composants de volatilité adaptative: Ajustez la marge d’entrée et la marge d’arrêt en fonction de la dynamique de la volatilité du marché, augmentez les exigences de marge dans un environnement à forte volatilité et réduisez la fréquence de déclenchement; réduisez la marge dans un environnement à faible volatilité et augmentez la sensibilité.

  3. Ajouter un filtre de volume: Introduction d’un mécanisme de confirmation de transaction qui exige que la rupture du prix soit accompagnée d’une augmentation du volume de transaction et filtre les signaux de rupture faibles dans un environnement de faible volume de transaction.

  4. Optimisation de la gestion des fonds: Ajustez la taille de la position en fonction de la performance de la transaction, de l’ampleur des retraits et de la dynamique du taux de victoire. Augmentez la position lorsque le signal de confiance est élevé et diminuez la position lorsque l’incertitude est élevée.

  5. Synthèse du cadre temporel: La combinaison de signaux de plusieurs fuseaux horaires, par exemple en exigeant que les transactions se déroulent lorsque les lignes horaires et les lignes journalières sont alignées, améliore la stabilité du système.

  6. Stratégie de construction par lots et de mise en valeur: Mise en place d’un système d’entrée et de sortie par lots, évitant les risques d’entrée en un seul point, tout en bénéficiant d’une partie des bénéfices de la protection des gains.

Résumer

La stratégie de suivi et de retournement de tendance croisée des moyennes mobiles dynamiques est un système de négociation soigneusement conçu qui fournit aux traders les outils nécessaires pour répondre systématiquement aux fluctuations du marché grâce à la détermination des tendances dynamiques, à des conditions d’entrée flexibles et à une gestion des risques à plusieurs niveaux. Sa plus grande caractéristique réside dans la combinaison des avantages du suivi des tendances et du retournement des entrées, tout en respectant les grandes tendances.

La stratégie est particulièrement adaptée aux marchés à forte volatilité à moyen et long terme. Les traders peuvent optimiser la stratégie en ajustant le type, la longueur et les paramètres de dépréciation des moyennes mobiles pour s’adapter aux différents types de transactions. Bien qu’il existe des risques tels que la sensibilité des paramètres et les faux signaux sur les marchés de choc, la robustesse et l’adaptabilité de la stratégie peuvent être encore améliorées par les orientations d’optimisation recommandées, telles que l’intégration des indicateurs de dynamique, l’ajustement de la volatilité et la confirmation de plusieurs périodes.

Dans l’ensemble, la stratégie offre aux traders un cadre de trading quantitatif et structuré qui, avec la bonne configuration des paramètres et une bonne gestion des risques, a le potentiel d’obtenir des rendements plus adaptés au risque que les traders traditionnels.

Code source de la stratégie
/*backtest
start: 2024-04-29 00:00:00
end: 2024-07-27 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
// @ipuneetg 
strategy("PG MA Crossover Buy and Sell Options Special", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// === INPUTS ===
maType = input.string("SMA", title="Select MA Type", options=["SMA", "EMA", "VWMA"])
calcBasis = input.string("close", title="Calculation Basis", options=["close", "OHLC/4", "HLC/3", "HLCC/4"])
maLength = input.int(21, title="Moving Average Length")
reversalThresholdPercent = input.float(0.25, title="Reversal Threshold (%)", step=0.01)
percentBelowTop = input.float(1.0, title="Exit % Below Top (%)", step=0.1, minval=0.1)
shortProfitPercent = input.float(0.5, title="Short Profit Protection (%)", minval=0.1, step=0.1)
stopLossPercent = input.float(1.5, title="Stop Loss % Above Entry (for Shorts)", step=0.1, minval=0.1)
allowShorts = input.bool(true, title="Allow Short Trades?")

// === SESSION SETTINGS ===
startHour = input.int(9, title="Trade Start Hour")
startMinute = input.int(30, title="Start Minute")
endHour = input.int(15, title="Trade End Hour")
endMinute = input.int(15, title="End Minute")

tradeSession = str.tostring(startHour, "00") + str.tostring(startMinute, "00") + "-" + str.tostring(endHour, "00") + str.tostring(endMinute, "00")
sessionActive = not na(time(timeframe.period, tradeSession))


// === PRICE BASIS ===
basis = switch calcBasis
    "OHLC/4" => (open + high + low + close) / 4
    "HLC/3" => (high + low + close) / 3
    "HLCC/4" => (high + low + close + close) / 4
    => close

// === MOVING AVERAGE ===
ma = switch maType
    "SMA" => ta.sma(basis, maLength)
    "EMA" => ta.ema(basis, maLength)
    "VWMA" => ta.vwma(basis, maLength)

// === DYNAMIC REVERSAL DETECTION ===
var float lastReversal = na
var bool isRising = true
thresholdValue = ma * reversalThresholdPercent / 100

if na(lastReversal)
    lastReversal := ma

if ma > lastReversal + thresholdValue
    isRising := true
    lastReversal := ma
else if ma < lastReversal - thresholdValue
    isRising := false
    lastReversal := ma

maColor = isRising ? color.green : color.red

// === TRADE VARIABLES ===
var float tradeHigh = na
var float tradeLow = na
var float shortEntryPrice = na
var bool inLong = false
var bool inShort = false

// === LONG & SHORT CONDITIONS ===
longEntry = sessionActive and isRising and close >= ma * (1 + reversalThresholdPercent / 100)
longReEntry = sessionActive and isRising and not inLong and close <= ma * 1.01

shortEntry = sessionActive and not isRising and close <= ma * (1 - reversalThresholdPercent / 100)
shortReEntry = sessionActive and not inShort and close >= ma * 0.998

// === EXIT CONDITIONS ===
exitLongBelowTop = close < tradeHigh * (1 - percentBelowTop / 100)
exitLongBelowMA = close < ma

exitShortAboveTop = close > tradeHigh * (1 + percentBelowTop / 100)
exitShortAboveMA = close > ma

// === EXECUTE TRADES ===

// === LONG SIDE ===
if not inLong and (longEntry or longReEntry)
    strategy.entry("Long", strategy.long)
    tradeHigh := close
    inLong := true

if inLong
    tradeHigh := math.max(tradeHigh, high)
    if exitLongBelowTop or exitLongBelowMA
        strategy.close("Long")
        reason = exitLongBelowTop ? "Exit Long (Below Top)" : "Exit Long (Below MA)"
        inLong := false

// === SHORT SIDE ===
if allowShorts
    if not inShort and (shortEntry or shortReEntry)
        if close >= ma * 0.996 and close <= ma * 1.002
            strategy.entry("Short", strategy.short)
            tradeHigh := close
            tradeLow := close
            shortEntryPrice := close
            inShort := true

    if inShort
        // Update tradeLow dynamically
        tradeLow := na(tradeLow) ? close : math.min(tradeLow, close)

        // Calculate Stop Levels
        hardStopLossPrice = shortEntryPrice * (1 + stopLossPercent / 100)
        hardStopLossTriggered = high >= hardStopLossPrice

        normalExitPrice1 = tradeLow * (1 + shortProfitPercent / 100)
        normalExitTriggered = close > normalExitPrice1 or close > ma

        // Exit Conditions
        if hardStopLossTriggered
            strategy.close("Short", comment="Hard Stop Loss")
            inShort := false
            tradeLow := na
        else
            if normalExitTriggered
                reason = close > normalExitPrice1 ? "Exit Short (Above Profit %)" : "Exit Short (Above MA)"
                strategy.close("Short", comment=reason)
                inShort := false
                tradeLow := na

// === PLOT MA ===
plot(ma, color=maColor, title="Dynamic Moving Average", linewidth=2)

// === TRADE STATUS BOX ===
var label tradeStatusLabel = na
var color statusColor = color.blue
var string statusText = "No Open Trade"

if inLong
    statusColor := color.green
    statusText := "Long Trade Open"
else if inShort
    statusColor := color.red
    statusText := "Short Trade Open"

if not na(tradeStatusLabel)
    label.delete(tradeStatusLabel)