
La stratégie de croisement SMA à suivi dynamique ADX est un système de trading quantitatif qui combine les signaux de croisement SMA avec un filtre ADX. La stratégie confirme la force de la tendance du marché avec les indicateurs ADX, exécute les signaux de croisement SMA uniquement lorsqu’il y a suffisamment de dynamisme et utilise des mécanismes de stop-loss et de suivi de stop-loss dynamiques pour protéger les bénéfices et limiter les risques.
La logique de base de cette stratégie repose sur les éléments clés suivants:
Signaux croisés SMA: Utilisation d’une moyenne mobile simple à court terme (default 3 cycles) produisant un signal de plus lorsque le prix traverse le SMA vers le haut et un signal de moins lorsque le prix traverse le SMA vers le bas.
Filtre à ADX: Le calcul manuel de l’indicateur ADX (la période par défaut est de 15) confirme que le marché a suffisamment d’intensité de tendance pour effectuer une transaction uniquement lorsque la valeur ADX est supérieure à la valeur de seuil définie (la valeur par défaut est de 15). Cela filtre efficacement les faux signaux dans les marchés de choc.
Gestion dynamique des risques:
Gestion de la session: Obligation de plafonnement de toutes les positions à la fin de la session de négociation spécifiée (par défaut 16h00) pour éviter le risque du jour au lendemain
Signaux d’alerte en temps réel: Lorsqu’un signal de transaction est déclenché, un message d’alerte au format JSON est généré contenant la direction de la transaction, le prix d’entrée, le prix de stop-loss et le prix d’arrêt.
Fonction anti-redessinage: fournit la fonction reso_no_repaint pour s’assurer que l’indicateur n’est pas repeint et améliore la fiabilité de la stratégie.
Mécanisme de reconnaissance des tendancesLa combinaison de la SMA croisée et de l’indicateur ADX permet d’identifier efficacement les tendances fortes et de réduire les signaux erronés dans les marchés volatiles. Comparée à la simple stratégie de la SMA croisée, la probabilité de succès des transactions est augmentée.
Une gestion des risques souple: Offre une gamme complète de mesures de contrôle des risques, y compris des arrêts fixes, des arrêts cibles et des arrêts de suivi, permettant aux traders d’ajuster les paramètres en fonction de leurs préférences en matière de risque.
Fonctionnalités de gestion de session: Le placement automatique de la position à la fin de la journée de négociation, pour éviter le risque du jour au lendemain, est particulièrement adapté aux traders de jour ou aux traders qui souhaitent éviter les risques liés aux nouvelles et événements économiques majeurs.
Système d’alerte en temps réel: Alertes structurées au format JSON pour une intégration facile dans un système de trading automatisé ou un mécanisme de notification.
Simple mais efficace: La logique de la stratégie est claire, avec moins de paramètres, facile à comprendre et à ajuster, adaptée aux traders de tous niveaux.
Conception anti-repeinture: Assure la fiabilité de la stratégie dans un environnement réel grâce à la fonction anti-redéfinition.
Volatilité des SMA à court terme: Le SMA à 3 cycles utilisé par défaut peut être trop sensible et peut générer trop de signaux de négociation dans des marchés très volatils, augmentant les coûts de négociation et pouvant entraîner des pertes continues. La solution consiste à ajuster la longueur du SMA en fonction des différentes conditions de marché et des délais.
Gestion des risques à points fixesLa stratégie utilise des points fixes plutôt que des pourcentages ou des multiples d’ATR pour régler les stop-loss, ce qui peut ne pas être suffisamment souple dans différents environnements de volatilité. Les arrêts de vente dans les marchés à forte volatilité peuvent être trop petits et les arrêts de vente dans les marchés à faible volatilité peuvent être trop importants.
Décalage de l’ADX: L’ADX est un indicateur en retard qui peut donner un signal de confirmation une fois que la tendance est établie, entraînant une entrée tardive. Cela peut être amélioré en optimisant les paramètres ADX ou en combinant d’autres indicateurs de pointe.
Absence de distinction entre les états du marché: La stratégie ne fait pas de distinction entre les différents états du marché (par exemple, tendances, fluctuations intermédiaires), utilise la même logique de négociation dans tous les environnements de marché, ce qui peut entraîner une mauvaise performance dans les marchés non tendance.
Limite à une seule période de tempsLa stratégie est basée sur une analyse en un seul temps, sans confirmation en plusieurs temps, et risque de manquer d’importants changements de marché dans le contexte de tendances plus larges.
Amélioration de la gestion dynamique des risques: Le remplacement du stop loss à points fixes par un système de gestion du risque dynamique basé sur l’ATR (la moyenne de l’amplitude réelle des fluctuations) permet à la stratégie de s’adapter à différents environnements de volatilité du marché. Par exemple, le stop loss peut être défini à 1,5 fois l’ATR et le stop loss à 3 fois l’ATR.
Analyse de plusieurs périodes: Ajout de confirmation de tendance à des périodes plus élevées, de négociation uniquement dans la direction de la plus grande tendance, pour améliorer le taux de victoire. Des SMA à plus longue période peuvent être ajoutés comme filtres de tendance.
Identifier l’état du marché: introduire des mécanismes de classification des états du marché, tels que des indicateurs de volatilité ou des indicateurs de force de tendance, appliquer différents paramètres stratégiques ou logiques de négociation dans différents environnements de marché.
Optimisation de l’entréeConsidérez l’ajout d’indicateurs de confirmation d’entrée supplémentaires, tels que le RSI (indicateur de la force relative) ou la bande de Brin, pour améliorer la qualité du signal d’entrée. Vous pouvez également mettre en œuvre une stratégie de construction en lots pour réduire le risque d’entrée en un seul point.
Paramètres d’adaptation: Mise en œuvre d’un mécanisme d’adaptation des paramètres qui ajuste automatiquement la longueur des SMA, les seuils ADX et les paramètres de gestion des risques en fonction de l’activité récente du marché, permettant ainsi à la stratégie de s’adapter aux conditions changeantes du marché.
Filtreur de temps: Ajout d’un filtre pour les heures de négociation, afin d’éviter les périodes de faible liquidité ou les périodes de presse très volatiles, et de réduire le risque de points de glissement et de mouvements anormaux.
La stratégie de croisement SMA augmentée ADX de suivi dynamique est un système de négociation complet qui combine l’analyse technique et la gestion des risques. La stratégie permet d’identifier plus précisément les opportunités de négociation avantageuses en combinant le simple signal de croisement SMA avec la confirmation de la tendance ADX.
Malgré certaines limitations, telles que la gestion du risque à points fixes et l’analyse sur un seul cadre temporel, ces problèmes peuvent être résolus par les orientations d’optimisation proposées dans cet article. La stratégie a le potentiel d’être un système de trading plus robuste et plus adapté en introduisant des améliorations telles que la gestion du risque dynamique basée sur l’ATR, l’analyse sur plusieurs cadres temporels et l’identification de l’état du marché.
En fin de compte, le succès de la stratégie dépend de l’ajustement minutieux des paramètres par le trader et de son adaptation à un marché et à un laps de temps spécifiques. Il est recommandé de faire un retour d’expérience et de simuler les transactions avant la négociation en direct pour vérifier la performance de la stratégie dans différentes conditions de marché.
/*backtest
start: 2024-08-04 00:00:00
end: 2025-08-02 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("safa bot alert", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
// === INPUTS ===
smaLength = input.int(3, title="SMA Length")
tpPoints = input.float(80, title="Take Profit (Points)")
slPoints = input.float(35, title="Stop Loss (Points)")
trailPoints = input.float(15, title="Trailing Stop (Points)")
sessionCloseHour = input.int(16, "Session Close Hour (24h)")
sessionCloseMinute = input.int(0, "Session Close Minute")
// === ADX INPUTS ===
adxLength = input.int(15, title="ADX Length")
adxThreshold = input.float(15, title="Minimum ADX to Trade")
// === INDICATORS ===
sma = ta.sma(close, smaLength)
plot(sma, title="3 SMA", color=color.orange)
// === MANUAL ADX CALCULATION ===
upMove = high - high[1]
downMove = low[1] - low
plusDM = (upMove > downMove and upMove > 0) ? upMove : 0
minusDM = (downMove > upMove and downMove > 0) ? downMove : 0
trur = ta.rma(ta.tr, adxLength)
plusDI = 100 * ta.rma(plusDM, adxLength) / trur
minusDI = 100 * ta.rma(minusDM, adxLength) / trur
dx = 100 * math.abs(plusDI - minusDI) / (plusDI + minusDI)
adx = ta.rma(dx, adxLength)
plot(adx, title="ADX", color=color.blue)
// === ENTRY CONDITIONS ===
longCondition = ta.crossover(close, sma) and adx > adxThreshold
shortCondition = ta.crossunder(close, sma) and adx > adxThreshold
// === STRATEGY EXECUTION ===
if (longCondition)
strategy.entry("Long", strategy.long)
strategy.exit("Exit", from_entry="Long", limit=close + tpPoints, stop=close - slPoints, trail_points=trailPoints, trail_offset=trailPoints)
// FIRE ALERT
string alertMsg = '{"signal":"BUY","entry":' + str.tostring(close) +
',"SL":' + str.tostring(close - slPoints) +
',"TP":' + str.tostring(close + tpPoints) +
',"time":"' + str.tostring(time) + '"}'
alert(alertMsg, alert.freq_once_per_bar_close)
if (shortCondition)
strategy.entry("Short", strategy.short)
strategy.exit("Exit", from_entry="Short", limit=close - tpPoints, stop=close + slPoints, trail_points=trailPoints, trail_offset=trailPoints)
// FIRE ALERT
string alertMsg = '{"signal":"SELL","entry":' + str.tostring(close) +
',"SL":' + str.tostring(close + slPoints) +
',"TP":' + str.tostring(close - tpPoints) +
',"time":"' + str.tostring(time) + '"}'
alert(alertMsg, alert.freq_once_per_bar_close)
// === FORCE EXIT AT SESSION CLOSE ===
sessionCloseTime = (hour == sessionCloseHour and minute == sessionCloseMinute)
if (sessionCloseTime)
strategy.close_all(comment="Session Close")
// === NO-REPAINT FUNCTION ===
reso_no_repaint(exp, use, res) =>
use ? request.security(syminfo.tickerid, res, exp[1], lookahead=barmerge.lookahead_off, gaps=barmerge.gaps_on)[0] : exp