
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.
La stratégie est basée sur les principes clés suivants:
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.
Conditions d’entrée précises:
Mécanisme à plusieurs niveaux:
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.
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é.
Une analyse approfondie de la stratégie a révélé les avantages suivants:
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.
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.
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é.
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.
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.
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.
Bien que cette stratégie soit conçue de manière globale, les risques potentiels sont les suivants:
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.
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.
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.
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.
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.
Cette stratégie peut être optimisée dans les directions suivantes, en fonction de l’analyse du code:
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.
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é.
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.
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.
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.
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.
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.
/*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)