
Ce système de trading à double dynamique est une stratégie de trading quantitative complète qui combine des éléments de suivi de tendance et de trading inversé. La stratégie utilise des moyennes mobiles de deux cycles différents (les 100 et les 500) pour déterminer la direction de la tendance du marché, tout en intégrant plusieurs indicateurs techniques comme conditions de filtrage, y compris le RSI (indice de force et de faiblesse relative), l’ADX (indice de direction moyenne) et l’ATR (valeur moyenne de la vraie vague). Le système permet de négocier dans de nombreuses directions, avec des entrées et des sorties différentes selon les conditions du marché.
Le principe de base de la stratégie est un mécanisme de double vérification basé sur l’identification des tendances et la confirmation des dynamiques:
Identifier les tendancesLa stratégie utilise une moyenne mobile de 100 cycles et de 500 cycles (EMA ou SMA en option) pour déterminer la tendance du marché. Lorsque la MA100 est au-dessus de la MA500, elle est considérée comme tendance à la hausse; le contraire peut être tendance à la baisse.
Conditions d’admission pour plusieurs personnes:
Conditions d’entrée à vide:
Gestion des risques et stratégie de sortie:
Cette conception permet à la stratégie de saisir les occasions de grandes vagues dans un marché tendanciel, tout en cherchant des points de retournement dans des conditions de survente.
Très adaptableLa stratégie offre une grande personnalisation grâce à plusieurs filtres optionnels (RSI, ADX, ATR) qui s’adaptent à différents environnements de marché et styles de traders. L’utilisateur peut activer ou désactiver ces filtres de manière flexible en fonction de l’état actuel du marché.
Travail à deuxContrairement à un simple suivi de tendance ou à un système de retournement, cette stratégie combine deux méthodes de négociation, permettant de faire plus dans une tendance haussière et de faire moins dans des conditions de survente extrêmes, augmentant ainsi les chances de profit.
Le jugement des tendances de l’intelligenceL’utilisation d’un système à double ligne droite (MA100 et MA500) fournit un jugement de tendance plus fiable et permet de filtrer les fausses percées par rapport à un seul système à ligne droite.
Adaptation à la volatilité dynamiqueLe filtrage ATR permet à la stratégie de s’adapter automatiquement aux variations de la volatilité du marché, d’éviter de négocier fréquemment dans un environnement à faible volatilité et de réduire les coûts de transaction inutiles.
Pour empêcher le renversement de tendanceLe trading aérien a mis en place un mécanisme de “blocage de la forte hausse”, qui interdit la prise de position négative lorsque la MA100 est supérieure à la MA500 au-dessus du pourcentage fixé, évitant ainsi le risque de contre-courant dans une situation de forte hausse.
Mécanisme de confirmation multipleLes signaux d’entrée nécessitent la co-confirmation de plusieurs indicateurs techniques, ce qui réduit considérablement la probabilité de faux signaux et améliore la stabilité de la stratégie.
La flexibilité des départs: La stratégie est conçue avec une logique de sortie différente pour les multi-têtes et les blancs, les multi-têtes peuvent être arrêtés dynamiquement via le MA500, tandis que les blancs ont des objectifs de stop-loss fixes, ce qui correspond aux caractéristiques des transactions dans différentes directions.
Paramètre Sensibilité: la stratégie repose sur plusieurs paramètres techniques et paramètres, dont de légères variations peuvent entraîner des variations significatives dans les résultats de la rétro-évaluation. Dans les transactions réelles, les paramètres optimaux peuvent changer avec les changements de l’état du marché, avec un risque de sur-adaptation aux données historiques. La solution consiste à utiliser l’optimisation progressive et le test avant pour vérifier la stabilité des paramètres.
Risque de retard: Les indicateurs tels que les moyennes mobiles sont essentiellement des indicateurs en retard, qui peuvent ne pas être capables de saisir les points de basculement en temps opportun dans des marchés très volatils, ce qui entraîne des retards d’entrée ou de sortie. Il est recommandé de raccourcir la période des moyennes mobiles de manière appropriée ou d’ajouter d’autres indicateurs de pointe dans des marchés très volatils.
Une mauvaise période de transitionLa stratégie peut générer de fréquents faux signaux, entraînant des pertes continues, pendant les périodes de turbulences ou de changement de tendance. La solution consiste à ajouter un mécanisme d’identification de l’état du marché, qui réduit automatiquement la position ou suspend la négociation lorsqu’il est identifié que le marché est en turbulence.
Risques liés à la gestion des fondsStratégie: Utilisez 100% des fonds du compte par défaut, en plus d’autoriser une mise en forme pyramidale, avec possibilité de retrait plus important dans des conditions défavorables. Il est recommandé d’ajuster la taille de la position en fonction de la tolérance au risque personnelle et d’éviter d’utiliser tous les fonds de la transaction.
Risques liés à la liquidité: Dans les marchés ou les périodes de faible liquidité, il est possible de risquer une augmentation des points de glissement ou de ne pas pouvoir négocier au prix prévu. La stratégie de fonctionnement des paires et des périodes de négociation traditionnelles est recommandée.
Le risque de l’événement Black SwanIl est recommandé de fixer des limites de perte maximale et de prendre en compte les risques extrêmes de couverture des produits dérivés tels que les options.
Introduction à la classification des états du marché: les stratégies actuelles utilisent les mêmes paramètres de paramètres dans différents états de marché (tendance, oscillation, haute volatilité, basse volatilité), il est possible d’envisager d’ajouter une fonctionnalité d’identification des états de marché et d’optimiser différentes combinaisons de paramètres pour différents états. La mise en œuvre spécifique peut être divisée en états de marché à l’aide d’indicateurs de volatilité (tels que le pourcentage ATR) ou d’indicateurs de force de tendance (tels que les valeurs ADX).
Optimisation de la gestion des fondsLa stratégie actuelle consiste à utiliser des fonds de compte à proportion fixe, ce qui peut être amélioré pour une gestion de position dynamique basée sur la volatilité, augmentant les positions dans un environnement à faible volatilité et réduisant les positions dans un environnement à forte volatilité, afin d’équilibrer le risque. La valeur relative de l’ATR peut être utilisée pour ajuster dynamiquement le ratio de fonds par transaction.
Ajouter un filtre de temps: certains marchés peuvent être meilleurs ou pires sur une période donnée, on peut ajouter des filtres temporels pour éviter les périodes historiques de mauvais rendement. Cela peut être réalisé en analysant la performance stratégique de différentes périodes (par exemple, les heures de négociation en Asie, en Europe et aux États-Unis).
Confirmation de plusieurs périodes: La stratégie actuelle ne fonctionne que sur un seul fuseau horaire (((3 heures), il est possible d’envisager d’ajouter une confirmation de tendance pour les fuseaux horaires plus élevés, d’entrer en jeu et d’augmenter le taux de victoire uniquement lorsque la direction de la tendance des fuseaux horaires plus élevés est cohérente. Par exemple, le signal multicouche sur le graphique des 3 heures n’est exécuté que lorsque la tendance du graphique du jour est à la hausse.
Arrêt et arrêt dynamiques: les arrêts et les arrêts sont remplacés par des pourcentages fixes basés sur la volatilité du marché, ce qui permet à la stratégie de mieux s’adapter aux différents environnements de volatilité. Les multiples de l’ATR peuvent être utilisés pour définir les points d’arrêt et d’arrêt, élargissant automatiquement la plage d’arrêt lorsque la volatilité augmente.
Intégration des indicateurs émotionnelsAjout d’indicateurs de l’émotion du marché comme filtres supplémentaires, tels que le volume des transactions, le taux d’intérêt (pour les contrats à durée indéterminée) ou la prime à terme, afin d’éviter de négocier à contre-courant dans un état d’émotion extrême. Ces indicateurs peuvent servir de signaux d’avertissement que le marché est trop chaud ou trop froid.
Optimisation du machine learning: Choisir dynamiquement la combinaison optimale de paramètres à l’aide d’algorithmes d’apprentissage automatique, en ajustant automatiquement les paramètres de stratégie en fonction de l’état du marché le plus récent. Cela peut être réalisé en appliquant l’optimisation des paramètres de la fenêtre de défilement ou des méthodes d’apprentissage par renforcement.
Le système de suivi de tendance et de retournement de la dynamique binaire est une stratégie de négociation quantitative soigneusement conçue qui offre une grande adaptabilité et une grande personnalisation tout en conservant la simplicité de la stratégie en combinant le système linéaire, les indicateurs de dynamique et les filtres de volatilité. Le principal avantage de la stratégie réside dans ses mécanismes de confirmation multiples et son système de filtrage flexible, qui lui permettent de s’adapter à différents environnements de marché.
Cependant, comme toutes les stratégies de négociation, il est confronté à des défis tels que la sensibilité aux paramètres, le retard et les changements d’état du marché. La stabilité et l’adaptabilité de la stratégie devraient être encore améliorées grâce à l’introduction d’améliorations dans des domaines tels que la classification des états du marché, la gestion dynamique des fonds, l’analyse de plusieurs périodes et l’optimisation de l’apprentissage automatique.
Surtout, les traders doivent bien comprendre les principes et les limites de la stratégie, s’y adapter en fonction de leurs préférences personnelles en matière de risque et de leur expérience du marché, et toujours respecter des principes stricts de gestion des risques. Il n’y a pas de stratégie de trading parfaite, mais avec une optimisation continue et une application prudente, le système peut devenir une arme puissante dans la boîte à outils des traders.
/*backtest
start: 2024-05-26 00:00:00
end: 2025-05-25 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=6
strategy("Momentum Long + Short Strategy (BTC 3H)", overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=1000,
commission_type=strategy.commission.percent,
commission_value=0.1,
slippage=1,
pyramiding=1)
// ==============================================================================
// === LONG TRADE SETTINGS
// ==============================================================================
enableLongs = input.bool(true, "Enable Long Trades", group="LONG TRADE SETTINGS")
slPercentLong = input.float(3.0, "Long Stop Loss %", minval=0.1, group="LONG TRADE SETTINGS")
useRSIFilter = input.bool(false, "Enable RSI Filter", group="LONG FILTER SETTINGS")
useADXFilter = input.bool(false, "Enable ADX Filter", group="LONG FILTER SETTINGS")
useATRFilter = input.bool(false, "Enable ATR Filter", group="LONG FILTER SETTINGS")
useTrendFilter = input.bool(true, "Require MA100 > MA500", group="LONG FILTER SETTINGS")
smoothType = input.string("EMA", "Smoothing Type", options=["EMA", "SMA"], group="LONG FILTER SETTINGS")
smoothingLength = input.int(100, "Smoothing Length (for filters)", group="LONG FILTER SETTINGS")
rsiLengthLong = input.int(14, "RSI Length", group="RSI FILTER")
adxLength = input.int(14, "ADX Length", group="ADX FILTER")
atrLength = input.int(14, "ATR Length", group="ATR FILTER")
// ==============================================================================
// === SHORT TRADE SETTINGS
// ==============================================================================
enableShorts = input.bool(false, "Enable Short Trades", group="SHORT TRADE SETTINGS")
slPercentShort = input.float(3.0, "Short Stop Loss %", minval=0.1, group="SHORT TRADE SETTINGS")
tpPercentShort = input.float(4.0, "Short Take Profit %", minval=0.1, group="SHORT TRADE SETTINGS")
rsiLengthShort = input.int(14, "RSI Length", group="SHORT FILTER SETTINGS")
rsiThresholdShort = input.float(33, "RSI Threshold", minval=1, maxval=100, group="SHORT FILTER SETTINGS")
bbLength = input.int(20, "Bollinger Band Length", group="SHORT FILTER SETTINGS")
useATRFilterShort = input.bool(true, "Enable ATR Filter (Short)", group="SHORT FILTER SETTINGS")
useStrongUptrendBlock = input.bool(true, "Block Shorts if MA100 > MA500 by (%)", group="SHORT FILTER SETTINGS")
shortTrendGapPct = input.float(2.0, "Threshold (%) for Blocking Shorts", minval=0.1, group="SHORT FILTER SETTINGS")
// ==============================================================================
// === COMMON INDICATORS
// ==============================================================================
ma100 = smoothType == "EMA" ? ta.ema(close, 100) : ta.sma(close, 100)
ma500 = smoothType == "EMA" ? ta.ema(close, 500) : ta.sma(close, 500)
priceAboveMAs = close > ma100 and close > ma500
trendAlignment = not useTrendFilter or ma100 > ma500
plot(ma100, title="MA 100", color=color.orange)
plot(ma500, title="MA 500", color=color.blue)
// ==============================================================================
// === LONG FILTER LOGIC
// ==============================================================================
rsiLong = ta.rsi(close, rsiLengthLong)
rsiSmooth = smoothType == "EMA" ? ta.ema(rsiLong, smoothingLength) : ta.sma(rsiLong, smoothingLength)
rsiPass = not useRSIFilter or rsiLong > rsiSmooth
dmi(len) =>
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plusDI = 100 * ta.rma(plusDM, len) / trur
minusDI = 100 * ta.rma(minusDM, len) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
ta.rma(dx, len)
adx = dmi(adxLength)
adxSmooth = smoothType == "EMA" ? ta.ema(adx, smoothingLength) : ta.sma(adx, smoothingLength)
adxPass = not useADXFilter or adx > adxSmooth
atr = ta.atr(atrLength)
atrSmooth = smoothType == "EMA" ? ta.ema(atr, smoothingLength) : ta.sma(atr, smoothingLength)
atrPass = not useATRFilter or atr > atrSmooth
// ==============================================================================
// === SHORT FILTER LOGIC
// ==============================================================================
rsiShort = ta.rsi(close, rsiLengthShort)
bbBasis = ta.sma(close, bbLength)
bbDev = ta.stdev(close, bbLength)
bbLower = bbBasis - bbDev * 2
priceBelowBB = close < bbLower
priceBelowMAs = close < ma100 and close < ma500
rsiOversold = rsiShort < rsiThresholdShort
atrShort = ta.atr(atrLength)
atrShortSmoothed = smoothType == "EMA" ? ta.ema(atrShort, smoothingLength) : ta.sma(atrShort, smoothingLength)
atrShortPass = not useATRFilterShort or atrShort > atrShortSmoothed
emaGapTooWide = (ma100 - ma500) / ma500 * 100 > shortTrendGapPct
strongUptrendBlock = not useStrongUptrendBlock or not emaGapTooWide
// ==============================================================================
// === ENTRY CONDITIONS
// ==============================================================================
longCondition = enableLongs and priceAboveMAs and trendAlignment and rsiPass and adxPass and atrPass
shortCondition = enableShorts and priceBelowMAs and priceBelowBB and rsiOversold and atrShortPass and strongUptrendBlock
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
// ==============================================================================
// === EXIT CONDITIONS
// ==============================================================================
longStop = strategy.position_avg_price * (1 - slPercentLong / 100)
strategy.exit("SL Long", from_entry="Long", stop=longStop)
if strategy.position_size > 0 and close < ma500
strategy.close("Long", comment="TP Below MA500")
shortStop = strategy.position_avg_price * (1 + slPercentShort / 100)
shortTP = strategy.position_avg_price * (1 - tpPercentShort / 100)
strategy.exit("SL/TP Short", from_entry="Short", stop=shortStop, limit=shortTP)