
Il s’agit d’une stratégie de stop-mover en plusieurs étapes, basée sur le double indicateur de Supertrend. Cette stratégie utilise deux paramètres différents de l’indicateur de Supertrend pour juger de la tendance du marché et pour effectuer des transactions en plusieurs espaces en fonction de la direction de la tendance. Le cœur de la stratégie est d’utiliser un mécanisme de stop-mover en plusieurs étapes, en fixant plusieurs objectifs de stop-mover pour verrouiller progressivement les bénéfices, tout en conservant une partie de la position pour saisir une situation plus large.
La stratégie utilise deux paramètres pour définir des indicateurs de Supertrend différents pour juger de la tendance. Lorsque les deux indicateurs affichent simultanément une tendance à la hausse, un signal de multiplication est déclenché; lorsque les deux indicateurs affichent simultanément une tendance à la baisse, un signal de blanchiment est déclenché. Ce mécanisme de double confirmation peut réduire efficacement les faux signaux.
Stop-loss à plusieurs étapes: la stratégie définit 4 objectifs de stop-loss réglables. Chaque objectif a un pourcentage de stop-loss correspondant à la proportion de positions pacifiques. Par exemple, le premier objectif de stop-loss peut être défini comme une perte de 12% de la position pour un profit de 6%, le second objectif peut être une perte de 8% de la position pour un profit de 12%, et ainsi de suite. Ce mécanisme permet à la fois de verrouiller progressivement les bénéfices et de permettre à certaines positions de continuer à profiter de la situation.
Flexible orientation des transactions: les stratégies permettent aux utilisateurs de choisir entre des transactions en plus, en moins ou dans les deux sens pour s’adapter à différents environnements de marché et préférences de négociation.
Stop-loss dynamique: bien qu’il n’y ait pas de paramètre de stop-loss explicite dans le code, la stratégie se calme automatiquement lorsque l’indicateur Supertrend est inversé, ce qui joue en fait le rôle de stop-loss dynamique.
Optimisation de la gestion des risques: le mécanisme de stop-loss mobile en plusieurs étapes améliore considérablement le rapport risque/bénéfice de la stratégie. En bloquant progressivement les bénéfices, la stratégie peut réduire le risque de retrait tout en conservant une marge de profit.
Réduction des faux signaux: l’utilisation d’indicateurs doubles de Supertrend réduit considérablement l’impact des faux signaux et améliore la précision et la fiabilité des transactions.
Adaptabilité: la stratégie peut adapter la direction des transactions et les paramètres de stop-loss en fonction des préférences des utilisateurs et des conditions du marché, et peut être utilisée pour une variété de types de transactions et de périodes de temps.
Le niveau d’automatisation est élevé: les stratégies sont entièrement automatisées, et il n’y a pas besoin d’intervention humaine depuis l’entrée, la fin et la sortie, ce qui réduit considérablement l’impact émotionnel et la possibilité d’erreurs opérationnelles.
Gestion de fonds flexible: en définissant différents taux de stop-loss, la stratégie permet une gestion de fonds flexible, garantissant à la fois un verrouillage rapide de la partie des bénéfices et la poursuite des bénéfices sur les positions restantes.
Sensitivité des paramètres: la performance de la stratégie dépend en grande partie de la configuration des paramètres de l’indicateur Supertrend et des paramètres de blocage. Des paramètres inappropriés peuvent entraîner une survente ou une perte d’occasions importantes.
Dépendance à la tendance: comme stratégie de suivi des tendances, il est possible d’entrer et de sortir fréquemment dans un marché en crise, ce qui entraîne des coûts de transaction inutiles.
Risque de dérapage: dans des conditions de vitesse, l’exécution d’un arrêt en plusieurs étapes peut être affectée par le dérapage et le prix d’exécution réel peut être différent de celui prévu.
Risque d’optimisation excessive: la stratégie a plusieurs paramètres réglables, ce qui est susceptible de tomber dans le piège de l’optimisation excessive, ce qui entraîne une différence importante entre les résultats des tests de retour et les performances du disque réel.
Introduction de filtres sur la volatilité: prendre en compte la combinaison de l’ATR ou d’autres indicateurs de volatilité, réduire la fréquence des transactions pendant les périodes de faible volatilité et améliorer l’adaptabilité de la stratégie dans différents environnements de marché.
Ajustement des paramètres dynamiques: il est possible d’explorer l’utilisation d’algorithmes d’adaptation pour ajuster dynamiquement les paramètres de Supertrend et les objectifs d’arrêt afin de mieux s’adapter aux changements du marché.
Augmentation des mécanismes de stop loss: Bien que les Supertrends offrent une certaine fonction de stop loss inversée, il est possible d’envisager d’ajouter des mécanismes de stop loss plus flexibles, tels que le suivi des stops, pour mieux contrôler les risques.
Combinaison avec d’autres indicateurs techniques: l’introduction d’autres indicateurs techniques tels que le RSI, le MACD, etc. peut être envisagée pour améliorer la précision des entrées et des sorties grâce à une résonance multi-indicateurs.
Optimisation de la gestion des fonds: Des stratégies de gestion des fonds plus sophistiquées peuvent être explorées, telles que l’ajustement dynamique de la taille de la position en fonction de la rentabilité du compte, afin de mieux équilibrer les risques et les gains.
Optimisation de la rétroaction: effectuer une rétroaction plus complète, y compris une analyse de la performance à différentes périodes et dans différentes conditions de marché, afin de déterminer les meilleurs scénarios d’application et paramètres de la stratégie.
La stratégie de stop mobile en plusieurs étapes est basée sur le double indicateur Supertrend et équilibre les risques et les bénéfices grâce à un mécanisme de stop flexible en plusieurs étapes. Les principaux avantages de la stratégie résident dans son excellente capacité de gestion des risques et sa sensibilité aux tendances. Cependant, l’utilisateur doit être attentif aux paramètres de configuration et à l’impact de l’environnement du marché lors de l’application.
/*backtest
start: 2024-05-21 00:00:00
end: 2024-06-20 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("Strategic Multi-Step Supertrend Trader - Strategy [presentTrading]", overlay=true )
// this strategy utilizes a double Supertrend indicator to determine entry and exit conditions for both long and short trades, with user-configurable take profit levels and trade direction settings.
// The strategy dynamically updates highest and lowest prices during trades and exits positions based on multi-step profit targets or opposing Supertrend signals.
// User inputs for take profit settings
// Grouping Take Profit settings
useTakeProfit = input.bool(true, title="Use Take Profit", group="Take Profit Settings")
takeProfitPercent1 = input.float(6.0, title="Take Profit % Step 1", group="Take Profit Settings")
takeProfitPercent2 = input.float(12.0, title="Take Profit % Step 2", group="Take Profit Settings")
takeProfitPercent3 = input.float(18.0, title="Take Profit % Step 3", group="Take Profit Settings")
takeProfitPercent4 = input.float(50.0, title="Take Profit % Step 4", group="Take Profit Settings")
takeProfitAmount1 = input.float(12, title="Take Profit Amount % Step 1", group="Take Profit Settings")
takeProfitAmount2 = input.float(8, title="Take Profit Amount % Step 2", group="Take Profit Settings")
takeProfitAmount3 = input.float(4, title="Take Profit Amount % Step 3", group="Take Profit Settings")
takeProfitAmount4 = input.float(0, title="Take Profit Amount % Step 4", group="Take Profit Settings")
numberOfSteps = input.int(3, title="Number of Take Profit Steps", minval=1, maxval=4, group="Take Profit Settings")
// Grouping Trade Direction
tradeDirection = input.string("Both", title="Trade Direction", options=["Long", "Short", "Both"], group="Trade Direction")
// Grouping Supertrend settings
atrPeriod1 = input(10, title="ATR Length for Supertrend 1", group="Supertrend Settings")
factor1 = input.float(3.0, title="Factor for Supertrend 1", step=0.01, group="Supertrend Settings")
atrPeriod2 = input(5, title="ATR Length for Supertrend 2", group="Supertrend Settings")
factor2 = input.float(4.0, title="Factor for Supertrend 2", step=0.01, group="Supertrend Settings")
// Function to calculate Supertrend
supertrend(factor, atrPeriod) =>
[a, direction] = ta.supertrend(factor, atrPeriod)
direction
// Calculate Double Supertrend
supertrend1 = supertrend(factor1, atrPeriod1)
supertrend2 = supertrend(factor2, atrPeriod2)
// Entry conditions
longCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Short" or tradeDirection == "Both")
// Exit conditions
longExitCondition = (supertrend1 > 0 and supertrend2 > 0) and (tradeDirection == "Long" or tradeDirection == "Both")
shortExitCondition = (supertrend1 < 0 and supertrend2 < 0) and (tradeDirection == "Short" or tradeDirection == "Both")
// Variables to store the highest and lowest prices during the trade
var float highestPrice = na
var float lowestPrice = na
// Get the entry price from open trades
entryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
// Reset highestPrice or lowestPrice when entering new trades
if (longCondition and strategy.position_size <= 0)
highestPrice := na // Reset the highest price
strategy.entry("My Long Entry Id", strategy.long) // Enter long position
strategy.close("My Short Entry Id", "Short Exit") // Close short position if any
if (shortCondition and strategy.position_size >= 0)
lowestPrice := na // Reset the lowest price
strategy.entry("My Short Entry Id", strategy.short) // Enter short position
strategy.close("My Long Entry Id", "Long Exit") // Close long position if any
// Exit trades based on conditions
if (longExitCondition and strategy.position_size > 0)
strategy.close("My Long Entry Id", "Long Exit") // Exit long position
if (shortExitCondition and strategy.position_size < 0)
strategy.close("My Short Entry Id", "Short Exit") // Exit short position
if (strategy.position_size > 0)
// Update the highest price for long positions
highestPrice := na(highestPrice) ? high : math.max(highestPrice, high)
// Step 1
if (useTakeProfit and numberOfSteps >= 1)
strategy.exit("Take Profit 1", from_entry="My Long Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 + takeProfitPercent1 / 100))
// Step 2
if (useTakeProfit and numberOfSteps >= 2)
strategy.exit("Take Profit 2", from_entry="My Long Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 + takeProfitPercent2 / 100))
// Step 3
if (useTakeProfit and numberOfSteps >= 3)
strategy.exit("Take Profit 3", from_entry="My Long Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 + takeProfitPercent3 / 100))
// Step 4
if (useTakeProfit and numberOfSteps == 4)
strategy.exit("Take Profit 4", from_entry="My Long Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 + takeProfitPercent4 / 100))
if (strategy.position_size < 0)
// Update the lowest price for short positions
lowestPrice := na(lowestPrice) ? low : math.min(lowestPrice, low)
// Step 1
if (useTakeProfit and numberOfSteps >= 1)
strategy.exit("Take Profit 1", from_entry="My Short Entry Id", qty_percent=takeProfitAmount1, limit=entryPrice * (1 - takeProfitPercent1 / 100))
// Step 2
if (useTakeProfit and numberOfSteps >= 2)
strategy.exit("Take Profit 2", from_entry="My Short Entry Id", qty_percent=takeProfitAmount2, limit=entryPrice * (1 - takeProfitPercent2 / 100))
// Step 3
if (useTakeProfit and numberOfSteps >= 3)
strategy.exit("Take Profit 3", from_entry="My Short Entry Id", qty_percent=takeProfitAmount3, limit=entryPrice * (1 - takeProfitPercent3 / 100))
// Step 4
if (useTakeProfit and numberOfSteps == 4)
strategy.exit("Take Profit 4", from_entry="My Short Entry Id", qty_percent=takeProfitAmount4, limit=entryPrice * (1 - takeProfitPercent4 / 100))