
La stratégie EMAx RSI est un système de trading quantitatif qui combine l’analyse technique et la gestion des risques. La stratégie est basée sur les signaux croisés EMA, la confirmation de filtrage est effectuée en combinaison avec les indicateurs RSI et le niveau de stop loss est ajusté dynamiquement par l’ATR.
La stratégie utilise une combinaison d’indicateurs techniques multiples pour déterminer les tendances du marché et le moment d’entrée, selon la logique suivante:
Le jugement de la tendance et les signaux d’entrée:
RSI est confirmé:
Le mécanisme de gestion des risques:
La tendance à la reprise:
L’analyse de ce code stratégique permet de résumer les avantages notables suivants:
Gestion dynamique des risquesLa stratégie consiste à ne pas utiliser de points de stop-loss fixes, mais à ajuster la distance de stop-loss par l’ATR pour s’adapter à la volatilité du marché, de sorte que le paramètre de stop-loss ne soit ni trop étroitement touché par le bruit du marché, ni trop lâche pour entraîner une perte individuelle excessive.
Répartition des risques: en calculant avec précision le ratio de risque de chaque transaction, assurez-vous que les pertes de chaque transaction sont contrôlées dans le pourcentage prédéfini du capital total (default 1%), et évitez efficacement le risque de rupture de position.
Suivre les tendances et s’adapterLa combinaison de l’EMA croisée et du filtre RSI permet de suivre la tendance principale tout en évitant les transactions à contre-courant dans les zones de surachat et de survente, ce qui améliore la qualité du signal.
Résultats positifs par rapport au risquePar défaut, la distance d’arrêt par défaut est deux fois plus longue que la distance d’arrêt par défaut, ce qui garantit un bon rapport risque/rendement, un facteur important pour la stabilité des bénéfices à long terme.
La protection contre le changement de tendance: Le mécanisme de liquidation automatique en cas de revers de tendance permet de verrouiller les bénéfices ou de réduire les pertes en temps opportun et d’éviter que les détenteurs de positions ne soient confrontés à des retraits importants.
Bien que cette stratégie soit conçue de manière globale, les risques potentiels sont les suivants:
Risque de fausse percée: Les croisements EMA peuvent générer de faux signaux de rupture, en particulier dans les marchés à oscillation horizontale. La solution consiste à envisager d’augmenter la confirmation de la transaction ou d’augmenter les conditions de filtrage du signal, par exemple en utilisant l’indicateur de force de tendance ADX.
Les points de glissement et les effets de la différence: La stratégie ne prend pas en compte les facteurs de dérapage et de différence de prix dans les transactions réelles, ce qui peut entraîner un écart entre les résultats de la rétro-évaluation et les résultats de l’exécution réelle. La solution consiste à ajuster la distance entre les arrêts et les arrêts lors du déploiement réel, en réservant de l’espace pour les points de dérapage.
Paramètre SensibilitéLes effets de la stratégie sont sensibles aux paramètres tels que les cycles EMA, les valeurs de seuil RSI et les multiples ATR. La solution consiste à effectuer une optimisation complète des paramètres et des tests de robustesse pour s’assurer que les paramètres ne correspondent pas trop aux données historiques.
Les changements de tendance sont fréquents: Dans les marchés en convulsions, les EMA peuvent se croiser fréquemment, ce qui entraîne une sur-trading et une érosion des frais de traitement. La solution consiste à ajouter des conditions de filtrage pour la durée de la tendance ou à ajuster les paramètres EMA pour des périodes plus longues.
Risques liés à la gestion des fonds: Bien que la stratégie intègre un mécanisme de gestion des fonds, elle ne prend pas en compte les pertes simultanées des actifs concernés. La solution consiste à mettre en œuvre une gestion des risques de portefeuille pour contrôler le risque global des actifs concernés.
Sur la base de l’analyse du code, la stratégie peut être optimisée de la manière suivante:
Filtrage d’intensité de la tendance à la hausse: l’introduction d’un indicateur ADX pour évaluer la force de la tendance et l’exécution de transactions uniquement lorsque la tendance est claire (par exemple, ADX> 25), peut réduire considérablement les faux signaux et les transactions inutiles dans les marchés sur le qui-vive.
Optimiser le temps d’entréeConsidérez d’ajouter des confirmations de formes de jetons ou de niveaux de support/résistance, comme l’attente d’un rebond après un redressement du prix vers la moyenne mobile, plutôt que d’entrer directement à la croisée des chemins, pour obtenir un meilleur prix d’entrée.
Paramètres personnalisés: Basé sur l’état du marché ((haute volatilité vs basse volatilité) pour ajuster automatiquement les périodes d’EMA et les valeurs minimales du RSI afin de mieux adapter la stratégie aux différentes conditions du marché.
Ajouter un filtrage de tempsLes conditions de filtrage des heures de négociation permettent d’améliorer la qualité des transactions en évitant les périodes de faible liquidité ou de fluctuations anormales du marché.
Optimisation de la gestion des fonds: mise en place d’une gestion progressive des positions, augmentation modérée de la taille des positions après des gains consécutifs, réduction de l’ouverture de risque après des pertes consécutives, afin d’optimiser la courbe de fonds.
Le blocage partiel des bénéficesIntroduction d’une stratégie de stop-loss à plusieurs niveaux, par exemple en déplaçant le stop-loss vers le prix de revient ou la clôture par lots lorsque le profit atteint un certain niveau, afin de garantir le blocage des bénéfices sans perdre de vue le marché.
La stratégie EMAx RSI est un système de trading quantifié, structuré et logiquement clair, qui identifie les tendances grâce à une combinaison d’indicateurs techniques, combinés à une gestion dynamique des fonds et à un mécanisme de contrôle des risques, formant un cadre de décision de trading efficace. L’avantage de la stratégie réside dans l’adaptation des positions de stop loss et de la taille des positions aux fluctuations du marché, tout en améliorant la qualité du signal grâce au filtrage RSI et à l’inversion de tendance.
/*backtest
start: 2024-04-07 00:00:00
end: 2025-04-06 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Kad_Sniper", overlay=true)
// Entrée Sniper avec Fermeture Tendance + Taille de Lot + SL et TP
// === Périodes des Moyennes Mobiles et RSI ===
shortEMALen = input.int(20, title="Période EMA 20")
longEMALen = input.int(50, title="Période EMA 50")
rsiLen = input.int(14, title="Période RSI")
rsiOverbought = input.int(70, title="RSI Suracheté")
rsiOversold = input.int(30, title="RSI Survendu")
// === Calcul des Moyennes Mobiles ===
ema20 = ta.ema(close, shortEMALen)
ema50 = ta.ema(close, longEMALen)
// === Calcul du RSI ===
rsi = ta.rsi(close, rsiLen)
// === Paramètres de Gestion de Risque ===
capital = input.float(1000, title="Capital Total ($)", minval=1) // Capital total alloué
risqueParTrade = input.float(1, title="Risque par Trade (%)", minval=0.1, maxval=100) // Risque par trade en %
stopLossMultiplier = input.float(1, title="Multiplier Stop Loss (en ATR)", minval=0.1, maxval=10) // Multiplier du stop-loss basé sur l'ATR
takeProfitMultiplier = input.float(2, title="Multiplier Take Profit (en ATR)", minval=0.1, maxval=10) // Multiplier du take-profit basé sur l'ATR
// === Calcul du Stop-Loss et Take Profit en Pips (en utilisant ATR pour déterminer la volatilité) ===
atr = ta.atr(14)
stopLossDistance = atr * stopLossMultiplier // Distance du stop-loss en pips, ajustée par ATR
takeProfitDistance = atr * takeProfitMultiplier // Distance du take-profit en pips, ajustée par ATR
// === Calcul de la Taille de Lot ===
montantRisque = capital * (risqueParTrade / 100) // Risque par trade en $ (capital * pourcentage de risque)
tailleLot = montantRisque / stopLossDistance // Taille du lot en fonction du risque et de la distance du stop-loss
// === Signaux de Croisement EMA et RSI ===
buySignal = ta.crossover(ema20, ema50) and rsi < rsiOverbought and close > ema50
sellSignal = ta.crossunder(ema20, ema50) and rsi > rsiOversold and close < ema50
// === Filtrage des Signaux ===
confirmedBuySignal = buySignal and rsi < rsiOverbought
confirmedSellSignal = sellSignal and rsi > rsiOversold
// === Fermeture des Positions lors du Changement de Tendance ===
// Fermer la position Buy si le signal Sell est détecté
if (confirmedSellSignal)
strategy.close("Buy", comment="Close Buy")
// Fermer la position Sell si le signal Buy est détecté
if (confirmedBuySignal)
strategy.close("Sell", comment="Close Sell")
// === Entrée dans les Positions avec SL et TP ===
// Entrée Buy lorsque les conditions sont validées
if (confirmedBuySignal)
strategy.entry("Buy", strategy.long, qty=tailleLot, comment="Buy")
strategy.exit("Exit", "Buy", stop=close - stopLossDistance, limit=close + takeProfitDistance)
// Entrée Sell lorsque les conditions sont validées
if (confirmedSellSignal)
strategy.entry("Sell", strategy.short, qty=tailleLot, comment="Sell")
strategy.exit("Exit", "Sell", stop=close + stopLossDistance, limit=close - takeProfitDistance )
// === Affichage des Signaux sous forme de points ultra petits ===
// Afficher un petit point vert (Buy) directement sous la bougie lorsque toutes les conditions sont validées
plotshape(series=confirmedBuySignal, location=location.belowbar, color=color.green, style=shape.circle, title="Signal Buy", size=size.tiny)
// Afficher un petit point rouge (Sell) directement au-dessus de la bougie lorsque toutes les conditions sont validées
plotshape(series=confirmedSellSignal, location=location.abovebar, color=color.red, style=shape.circle, title="Signal Sell", size=size.tiny)
// === Affichage de la Taille de Lot ===
if (confirmedBuySignal or confirmedSellSignal)
label.new(bar_index, close, "Taille Lot: " + str.tostring(tailleLot, "#.##"), color=color.blue, style=label.style_label_down, textcolor=color.white, size=size.small)
// === Affichage des Moyennes Mobiles ===
plot(ema20, color=color.blue, title="EMA 20")
plot(ema50, color=color.orange, title="EMA 50")
// === Affichage RSI pour la confirmation ===
hline(50, "RSI 50", color=color.gray)
plot(rsi, color=color.rgb(153, 124, 158), title="RSI", linewidth=2)