
La stratégie est centrée sur les signaux d’achat lorsque le SMA court-métrage traverse le SMA long-métrage (formant une fourchette dorée) et que le RSI est supérieur au niveau de vente; et sur les signaux de vente lorsque le SMA court-métrage traverse le SMA long-métrage (formant une fourchette morte) et que le RSI est inférieur au niveau d’achat. De plus, la stratégie intègre des signaux de vente flexibles, comprenant des mécanismes d’arrêt complets et de sélection de stock et de stockage, qui fournissent aux gestionnaires d’entrepôts des outils plus précis pour gérer les positions de négociation.
Le principe de cette stratégie est basé sur la collaboration de deux indicateurs techniques clés:
Moyenne mobile simple (SMA): La stratégie utilise deux SMA de différentes périodes, qui sont définis par défaut comme des cycles de 20 à court terme et de 30 à long terme. Lorsque le SMA à court terme monte en traversant le SMA à long terme, cela indique que la dynamique des prix est en train de se transformer en une tendance à la hausse, ce qui forme un signal de vente potentiel; inversement, lorsque le SMA à court terme descend en traversant le SMA à long terme, cela indique que la dynamique des prix est en train de se transformer en une tendance à la baisse, ce qui forme un signal de vente potentiel.
Indicateur relativement faible (RSI): La stratégie utilise le RSI de 14 cycles pour confirmer si le marché est en survente ou en survente. Un RSI inférieur à 25 est considéré comme une condition de survente et un RSI supérieur à 75 est considéré comme une condition de survente. L’indicateur RSI joue un rôle de filtre dans cette stratégie, en veillant à ce que le signal d’achat se produise lorsque le RSI est sorti de la zone de survente et que le signal de vente se produise lorsque le RSI est sorti de la zone de survente.
La logique de l’opération est la suivante:
Dans l’implémentation du code, les fonctions ta.crossover et ta.crossunder sont utilisées pour détecter les situations de croisement des SMA, en combinaison avec les conditions RSI pour générer le signal d’achat et de vente final. Le statut de la transaction est suivi par les variables Boole inBuyState et inSellState, afin de s’assurer que la stratégie gère correctement le statut de la position.
Après une analyse approfondie du code, la stratégie présente les avantages suivants:
Synergies entre les composants: La stratégie combine habilement l’indicateur de suivi de la tendance (SMA) et l’indicateur de dynamique (RSI), ce qui réduit efficacement les faux signaux. La croisée des SMA confirme le changement de direction de la tendance, tandis que le RSI vérifie davantage l’état dynamique du marché, ce qui améliore la fiabilité du signal.
Un système de freinage flexibleLa stratégie est dotée d’une fonctionnalité de stop-loss personnalisable, avec un taux de profit cible de 2% par défaut. Plus important encore, les traders peuvent choisir d’activer ou de désactiver la fonction de stop-loss, et même de choisir le mode de stop-loss de la moitié de la position (halfPositionTakeProfit), qui permet d’effacer seulement la moitié de la position lorsque le prix cible est atteint, laissant le reste de la position continuer à obtenir des bénéfices potentiels. Cette flexibilité permet aux traders d’ajuster la stratégie en fonction de leurs préférences en matière de risque et des conditions du marché.
Personnalisation des paramètres: Tous les paramètres clés de la stratégie peuvent être ajustés par des variables d’entrée, y compris les cycles SMA à court et à long terme, les cycles RSI, les valeurs de dépassement et de rupture et les pourcentages d’arrêt. Cela permet à la stratégie de s’adapter à différents environnements de marché et types de transactions.
Les effets visuels intuitifs: La stratégie trace des lignes SMA à court et à long terme sur le graphique et change la couleur du graphique en fonction de l’état du marché (l’état d’achat est vert, celui de vente est rouge), permettant aux traders de suivre intuitivement les signaux de la stratégie et l’état du marché.
La structure du code est claire: Le code de stratégie est bien organisé, utilise des variables pour suivre l’état du marché, le prix d’entrée et le point d’arrêt de la moitié de la position, la logique est claire et facile à comprendre et à maintenir.
Malgré la bonne conception de cette stratégie, il existe des risques potentiels:
Les faux signaux du marché horizontal: Dans des conditions de marché horizontale ou de fluctuation limitée, les croisements SMA peuvent se produire fréquemment, entraînant une survente des transactions et des pertes continues. Dans cet environnement de marché, les indicateurs SMA produisent souvent de nombreux signaux de croisement inefficaces.
Paramètre Sensibilité: La performance de la stratégie est assez sensible aux paramètres des SMA et des RSI. Différentes conditions de marché peuvent nécessiter une configuration de paramètres différente et, si les paramètres sont mal configurés, la stratégie peut ne pas capturer le véritable point de basculement du marché.
Les limites d’un seul système de signalisation: Cette stratégie repose uniquement sur la génération de signaux par des indicateurs techniques, sans tenir compte d’autres facteurs importants tels que la structure du marché, les points de résistance de soutien ou les facteurs fondamentaux. Dans certaines conditions de marché, une stratégie purement guidée par des indicateurs techniques peut être déconnectée de la tendance réelle du marché.
Problèmes potentiels avec le réglage de l’arrêt: La fixation d’un stop à un pourcentage fixe peut ne pas convenir à tous les environnements de marché. Dans les marchés plus volatils, un stop à 2% peut être trop petit, ce qui entraîne des arrêts fréquents et manque une grande tendance; et dans les marchés moins volatils, un objectif de 2% peut être trop radical.
Les moyens de réduire ces risques sont les suivants:
Sur la base de l’analyse du code, la stratégie peut être optimisée de la manière suivante:
Mécanisme d’ajustement des paramètres dynamiquesUne direction d’optimisation efficace consiste à réaliser un ajustement dynamique des paramètres, par exemple en ajustant automatiquement les cycles SMA ou les seuils RSI en fonction de la volatilité du marché (ATR). Utilisez des cycles SMA plus courts dans les marchés à forte volatilité et des cycles SMA plus longs dans les marchés à faible volatilité, afin de mieux s’adapter aux différents environnements du marché.
Filtrage d’intensité de la tendance à la hausseIl est possible d’ajouter un indicateur de force de tendance tel que l’ADX (indice de direction moyenne) pour filtrer les signaux de croisement SMA. La tendance n’est confirmée que lorsque l’ADX est supérieur à une certaine barre (par exemple 25) et que le signal de transaction généré par le croisement SMA est suffisamment fort pour être exécuté.
Augmentation du mécanisme d’arrêt dynamiqueIl est recommandé d’ajouter un stop-loss dynamique basé sur l’ATR pour limiter la perte maximale d’une transaction. Par exemple, il est possible de définir un niveau de stop-loss pour le prix d’entrée moins 2 fois la valeur de l’ATR, afin d’ajuster automatiquement la distance de stop-loss en fonction de la volatilité du marché.
Optimisation de la logique d’arrêt de demi-position: La logique actuelle d’arrêt à la moitié de la position peut être améliorée, par exemple, en déplaçant les pertes de la position restante vers le prix d’entrée après l’atteinte du premier objectif d’arrêt (arrêt de garantie) ou en définissant plusieurs objectifs d’arrêt, en plaçant les positions en lots. Cela permet de protéger les positions déjà rentables tout en maximisant les chances de saisir la grande tendance.
Ajouter un filtre de temps de transaction: De nombreux marchés présentent des caractéristiques différentes à différentes périodes de négociation. Vous pouvez envisager d’ajouter un filtre de temps de négociation qui exécute le signal de négociation uniquement à certaines périodes de négociation de haute qualité (comme la période de chevauchement entre les périodes de négociation européennes et américaines).
L’idée centrale de ces orientations d’optimisation est de rendre les stratégies plus adaptables, capables d’ajuster automatiquement leur comportement en fonction des conditions du marché, ce qui améliore leur stabilité et leur rentabilité dans différents environnements de marché.
La stratégie de confirmation de la dynamique croisée des moyennes mobiles RSI est un système de négociation quantitative combinant les indicateurs d’analyse technique SMA et RSI pour générer un signal de négociation en identifiant les points de basculement de la tendance et en confirmant les conditions de dynamique. Les principaux avantages de la stratégie résident dans sa simplicité, sa personnalisation et son mécanisme d’arrêt flexible intégré, ce qui en fait un outil efficace pour suivre les tendances à moyen terme.
Malgré les risques de faux signaux et de sensibilité des paramètres du marché horizontal, la robustesse et l’adaptabilité des stratégies peuvent être considérablement améliorées par l’introduction de méthodes telles que l’ajustement dynamique des paramètres, le filtrage de l’intensité de la tendance, l’arrêt dynamique des pertes et la gestion optimisée des positions. En particulier, l’intégration de l’indicateur ATR dans l’ajustement des paramètres et la gestion des risques peut permettre aux stratégies de mieux s’adapter aux différentes conditions de fluctuation du marché.
La stratégie est adaptée aux marchés tendanciels à moyen et long terme et constitue un point de départ à la fois simple et extensible pour les traders intéressés à entrer dans le domaine du trading quantitatif. Grâce à une optimisation continue et à des ajustements personnalisés, les traders peuvent faire évoluer cette stratégie de base en un système de trading unique adapté à leur propre style de trading et à leurs préférences en matière de risque.
/*backtest
start: 2025-03-02 00:00:00
end: 2025-03-13 00:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("SMA+RSI Strategy", overlay=true)
// Customizable input settings
smaShortPeriod = input.int(20, title="SMA Short Period", minval=1)
smaLongPeriod = input.int(30, title="SMA Long Period", minval=1)
rsiPeriod = input.int(14, title="RSI Period", minval=1)
rsiOverbought = input.int(75, title="RSI Overbought Level", minval=1, maxval=100)
rsiOversold = input.int(25, title="RSI Oversold Level", minval=1, maxval=100)
takeProfitPerc = input.float(2.0, title="Take Profit (%)", minval=0.1, step=0.1) / 100 // Target profit percentage
enableTakeProfit = input.bool(true, title="Enable Take Profit") // Enable/disable take profit option
halfPositionTakeProfit = input.bool(false, title="Enable Half Position Take Profit") // Option to take profit on half position
// Indicator calculations
smaShort = ta.sma(close, smaShortPeriod)
smaLong = ta.sma(close, smaLongPeriod)
rsi = ta.rsi(close, rsiPeriod)
// Buy and sell signals
buySignal = ta.crossover(smaShort, smaLong) and rsi > rsiOversold
sellSignal = ta.crossunder(smaShort, smaLong) and rsi < rsiOverbought
// Variable to store current market state
var bool inBuyState = false
var bool inSellState = false
// Store entry price
var float entryPrice = na
// Variable to track whether half position take profit has been executed
var bool halfPositionTaken = false
// Update market state based on signals
if (buySignal)
inBuyState := true
inSellState := false
entryPrice := close // Store entry price at buy signal
halfPositionTaken := false // Reset half position take profit state when opening a new trade
if (sellSignal)
inSellState := true
inBuyState := false
halfPositionTaken := false // Reset half position take profit state when closing a trade
// Calculate target take profit level
takeProfitLevel = inBuyState ? entryPrice * (1 + takeProfitPerc) : na
// Execute trades
if (buySignal)
strategy.entry("Buy", strategy.long, comment="Buy") // Comment when opening trade
// Close half position at target if enabled and not yet taken
if (inBuyState and enableTakeProfit and halfPositionTakeProfit and close >= takeProfitLevel and not halfPositionTaken)
strategy.close("Buy", qty_percent=50, comment="partialClose") // Close half position
halfPositionTaken := true // Update state to prevent re-execution
// Close full position at target if half position take profit is disabled
if (inBuyState and enableTakeProfit and not halfPositionTakeProfit and close >= takeProfitLevel)
strategy.close("Buy", comment="Close") // Close full position
// Close position on sell signal
if (sellSignal)
strategy.close("Buy", comment="Close") // Close position on sell signal
// Plot moving averages on chart
plot(smaShort, color=color.blue, title="SMA Short")
plot(smaLong, color=color.red, title="SMA Long")
// Change candle colors based on market state
barcolor(inBuyState ? color.green : inSellState ? color.red : na)