
La stratégie est un système de trading automatisé basé sur l’indicateur SuperTrend, combinant RSI (indicateur de la force relative), volume de transactions et ATR (étendue réelle moyenne) pour prendre des décisions de négociation. Il permet d’identifier la direction de la tendance du marché tout en utilisant plusieurs conditions de filtrage pour assurer la qualité des transactions, ce qui permet d’obtenir un système de trading complet. La plus grande caractéristique de la stratégie est la combinaison étroite de l’analyse technique et de la gestion des risques, chaque transaction est basée sur la volatilité du marché.
La logique centrale de cette stratégie s’articule autour de plusieurs composantes principales:
Le jugement des tendances: Utilisez l’indicateur SuperTrend comme base pour construire une ligne d’orbite ascendante et descendante. Lorsque le prix franchit la trajectoire ascendante, le marché est considéré comme étant en tendance à la hausse; lorsqu’il franchit la descente, il est en tendance à la baisse.
Confirmation de la transaction: La stratégie exige que le volume de transactions en cours soit supérieur à un certain multiple de la moyenne des transactions sur 20 cycles (modifiable par le paramètre volumeMultiplier). Cela garantit que les transactions ne sont effectuées que lorsque la liquidité est suffisante.
Vérification de la résistance du corps: Calculer la taille de l’entité de coupon actuelle (la valeur absolue de la différence entre le prix de clôture et le prix d’ouverture) et la comparer à la valeur de l’ATR. Le mouvement des prix est considéré comme suffisamment fort seulement si le coupon atteint un certain pourcentage de l’ATR (le contrôle des paramètres bodyPctOfATR).
RSI est filtré: Utilisez l’indicateur RSI pour éviter de négocier dans des zones d’excès d’achat ou de vente excessive. Les signaux d’achat exigent un RSI inférieur au niveau de surachat (défaut de 70) et les signaux de vente exigent un RSI supérieur au niveau de survente (défaut de 30).
Arrêt automatique des pertes: le stop-loss est réglé sur une distance ATR par transaction, tandis que le stop-loss est réglé sur un multiple du stop-loss (contrôlé par le paramètre riskRewardRatio), permettant une gestion dynamique du risque basée sur la volatilité réelle du marché.
La stratégie crée les conditions d’achat et de vente grâce à la synthèse de ces cinq aspects:
L’analyse de la mise en œuvre du code de cette stratégie permet de résumer les avantages notables suivants:
Mécanisme de vérification multidimensionnelleLa confirmation multi-dimensionnelle du volume et de l’intensité du corps a permis de réduire considérablement les faux signaux et d’améliorer la précision des transactions. Ce mécanisme de confirmation multidimensionnelle permet d’éviter de nombreuses transactions inutiles, en particulier dans les marchés très volatils.
Gestion des risques adaptéeLe paramètre de risque est basé sur le paramètre ATR et le paramètre stop. Il permet à la stratégie d’ajuster automatiquement les paramètres de risque en fonction de la volatilité des différentes phases du marché, évitant ainsi les problèmes d’inadaptabilité causés par les arrêts fixes.
Intégration de la gestion des fondsLa stratégie est dotée d’une fonctionnalité de gestion de fonds qui permet d’ajuster le montant de chaque transaction en fonction de la taille du compte et des préférences de risque, en intégrant le contrôle des risques et la stratégie de trading.
Le niveau élevé d’automatisation des transactionsL’automatisation des signaux d’entrée, de l’allocation des fonds et de l’arrêt de la perte a réduit le stress psychologique et la probabilité d’erreur des opérations manuelles.
Système d’alerte parfait: La stratégie dispose d’alertes détaillées au format JSON, contenant des informations cruciales telles que la direction de la transaction, le montant de l’argent, le stop loss et le prix d’arrêt, pour faciliter l’intégration avec des systèmes externes ou informer les utilisateurs.
Bien que la stratégie ait été conçue en tenant compte de multiples facteurs, les risques potentiels sont les suivants:
Paramètre SensibilitéLa performance d’une stratégie dépend fortement de paramètres tels que le cycle ATR, le seuil RSI, le multiplicateur de volume des transactions, etc. Des paramètres inappropriés peuvent entraîner une survente des transactions ou la perte d’occasions importantes. La solution consiste à trouver la combinaison optimale de paramètres en testant dans différents environnements de marché.
Le retard du point de basculement: SuperTrend est un indicateur de suivi de la tendance, qui est généralement en retard au point de basculement de la tendance, ce qui peut entraîner une entrée tardive ou un arrêt plus important. Il est possible d’atténuer ce problème en raccourcissant le cycle ATR ou en ajustant le multiplicateur ATR.
Les risques extrêmes du marché: dans le cas d’un décalage ou d’une faillite du marché, un arrêt prédéfini peut ne pas être exécuté efficacement, entraînant des pertes supérieures aux attentes. Il est recommandé d’utiliser d’autres mesures de contrôle du vent, telles que le contrôle de la position globale ou la définition d’une limite de perte maximale.
Problème d’efficacité financière: La répartition des fonds fixes peut entraîner une inefficacité dans l’utilisation des fonds. Des ajustements de position dynamiques basés sur la volatilité ou la valeur nette du compte peuvent être envisagés.
Limite à une seule période de temps: La stratégie actuelle est basée sur des signaux sur une seule période, et le manque de confirmation sur plusieurs périodes peut générer de faux signaux dans certaines conditions de marché.
En fonction des risques et des contraintes susmentionnés, la stratégie peut être optimisée dans les directions suivantes:
Intégration de l’analyse à plusieurs périodesL’introduction de la confirmation de tendance à des périodes plus élevées, la négociation uniquement dans la direction de la tendance principale, peut considérablement améliorer la stabilité de la stratégie. Cela peut être réalisé par l’accès aux données à travers les périodes de la fonction de sécurité de TradingView.
Les paramètres dynamiques s’adaptentIl est possible d’ajuster automatiquement les ATR en fonction des fluctuations du marché, des valeurs RSI et d’autres paramètres, afin de mieux adapter la stratégie aux différents environnements de marché. Par exemple, augmenter les ATR en cas de forte volatilité du marché et réduire les fausses ruptures.
Optimisation des algorithmes de gestion des fondsIntroduction d’une gestion dynamique des fonds basée sur la formule de Kelly ou sur un modèle de risque à taux fixe, qui ajuste automatiquement la répartition des fonds pour chaque transaction en fonction du rapport de gain et de perte historique, améliorant la stabilité des gains à long terme.
Augmentation de l’identification de l’état du marché: ajouter une logique de jugement sur l’état du marché (tendance, équilibre, haute volatilité, basse volatilité), appliquer différentes règles ou paramètres de négociation dans différentes conditions de marché, améliorer l’adaptabilité.
Intégrer des modèles d’apprentissage automatiqueL’utilisation d’algorithmes d’apprentissage automatique peut être envisagée pour prédire le meilleur moment d’entrée ou la combinaison de paramètres, en particulier lorsque l’on détermine des paramètres clés tels que le nombre de fois ATR et la valeur de la marge de transaction. L’apprentissage automatique peut fournir une capacité d’adaptation plus précise.
La stratégie de gestion des risques dynamiques SuperTrend-ATR-RSI est un système de trading quantitatif qui combine le suivi des tendances avec la gestion des risques dynamiques. Il identifie les tendances du marché grâce à l’indicateur SuperTrend et améliore considérablement la qualité des signaux de trading en combinant des mécanismes de filtrage multiples tels que le RSI, le volume des transactions et l’intensité du corps. Le principal avantage de la stratégie réside dans son cadre de gestion des risques adaptatif, permettant aux contrôles des risques de s’adapter automatiquement aux fluctuations du marché grâce à des paramètres de stop loss et stop loss dynamiques basés sur l’ATR.
La stratégie est adaptée à un environnement de marché très volatil et tendance, en particulier pendant la phase de formation de tendances à moyen et long terme. Cependant, l’utilisateur doit prêter attention à l’optimisation des paramètres et à la correspondance des conditions de marché dans l’application pratique et prendre en compte les orientations d’optimisation proposées dans le présent article, telles que l’analyse des cadres temporels multiples, l’ajustement des paramètres dynamiques et les méthodes de gestion avancée des fonds, afin de renforcer encore la solidité et l’adaptabilité de la stratégie.
Avec une configuration de paramètres raisonnable et une vérification de retour suffisante, cette stratégie a le potentiel d’être un outil de trading automatisé fiable, offrant aux investisseurs une solution d’exécution de transactions et de contrôle des risques systématiques.
/*backtest
start: 2025-01-01 00:00:00
end: 2025-04-20 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"TRX_USD"}]
*/
//@version=5
strategy("Supertrend Hombrok Bot", overlay=true, default_qty_type=strategy.cash, default_qty_value=1000)
// INPUTS
atrPeriod = input.int(10, title="ATR Period")
atrMult = input.float(3.0, title="ATR Multiplier")
rsiPeriod = input.int(14, title="RSI Period")
rsiOverbought = input.int(70, title="RSI Overbought")
rsiOversold = input.int(30, title="RSI Oversold")
volumeMultiplier = input.float(1.2, title="Volume Multiplier")
bodyPctOfATR = input.float(0.3, title="Candle Body % of ATR (min strength)")
riskRewardRatio = input.float(2.0, title="R:R (Take Profit / Stop Loss)")
capitalPerTrade = input.float(10, title="Capital por operação ($)")
// ATR e Supertrend
atr = ta.atr(atrPeriod)
upperBand = hl2 - (atrMult * atr)
lowerBand = hl2 + (atrMult * atr)
prevUpper = nz(upperBand[1], upperBand)
prevLower = nz(lowerBand[1], lowerBand)
trendUp = close[1] > prevUpper ? math.max(upperBand, prevUpper) : upperBand
trendDown = close[1] < prevLower ? math.min(lowerBand, prevLower) : lowerBand
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > trendDown ? 1 : trend == 1 and close < trendUp ? -1 : trend
isUpTrend = trend == 1
isDownTrend = trend == -1
// Filtros
volAverage = ta.sma(volume, 20)
volOk = volume > volAverage * volumeMultiplier
bodySize = math.abs(close - open)
bodyOk = bodySize > (atr * bodyPctOfATR)
rsi = ta.rsi(close, rsiPeriod)
rsiBuyOk = rsi < rsiOverbought
rsiSellOk = rsi > rsiOversold
// Condições
buyCond = isUpTrend and volOk and bodyOk and rsiBuyOk
sellCond = isDownTrend and volOk and bodyOk and rsiSellOk
// TP e SL
longSL = close - atr
longTP = close + (atr * riskRewardRatio)
shortSL = close + atr
shortTP = close - (atr * riskRewardRatio)
// Estratégia de entrada e saída
if buyCond
strategy.entry("Compra", strategy.long, qty=capitalPerTrade / close)
strategy.exit("TP/SL Compra", from_entry="Compra", stop=longSL, limit=longTP)
if sellCond
strategy.entry("Venda", strategy.short, qty=capitalPerTrade / close)
strategy.exit("TP/SL Venda", from_entry="Venda", stop=shortSL, limit=shortTP)
// ALERTAS + LABELS
alertLong = '{"side":"buy", "capital":' + str.tostring(capitalPerTrade) + ', "sl":' + str.tostring(longSL) + ', "tp":' + str.tostring(longTP) + '}'
alertShort = '{"side":"sell", "capital":' + str.tostring(capitalPerTrade) + ', "sl":' + str.tostring(shortSL) + ', "tp":' + str.tostring(shortTP) + '}'
if buyCond
label.new(bar_index, low, "BUY", style=label.style_label_up, color=color.green, textcolor=color.white)
alert(alertLong, alert.freq_once_per_bar_close)
if sellCond
label.new(bar_index, high, "SELL", style=label.style_label_down, color=color.red, textcolor=color.white)
alert(alertShort, alert.freq_once_per_bar_close)
// VISUAL
plotshape(buyCond, title="Buy Signal", location=location.belowbar, color=color.green, style=shape.labelup, text="BUY")
plotshape(sellCond, title="Sell Signal", location=location.abovebar, color=color.red, style=shape.labeldown, text="SELL")
plot(trend == 1 ? trendUp : na, title="Trend Up", color=color.green, linewidth=1)
plot(trend == -1 ? trendDown : na, title="Trend Down", color=color.red, linewidth=1)