Stratégie de gestion adaptative des risques basée sur l'ATR dynamique et le croisement à double moyenne mobile

MA ATR SMA RRR UTC
Date de création: 2025-02-20 14:07:26 Dernière modification: 2025-02-20 14:07:26
Copier: 1 Nombre de clics: 359
2
Suivre
319
Abonnés

Stratégie de gestion adaptative des risques basée sur l’ATR dynamique et le croisement à double moyenne mobile Stratégie de gestion adaptative des risques basée sur l’ATR dynamique et le croisement à double moyenne mobile

Aperçu

La stratégie est un système de négociation qui combine un signal de croisement bi-homogène et une gestion dynamique du risque. Elle génère des signaux de négociation par la croisée des moyennes mobiles à court et à long terme, tout en utilisant l’indicateur ATR pour ajuster dynamiquement les arrêts et les gains, et en introduisant des filtres de temps et des périodes de refroidissement pour optimiser la qualité des transactions.

Principe de stratégie

La stratégie repose sur les éléments fondamentaux suivants :

  1. Le système de génération de signaux utilise la croisée des moyennes mobiles simples à court terme (en 10 cycles) et à long terme (en 100 cycles) pour déclencher la transaction. Un signal de plus est généré lorsque la moyenne à court terme traverse la moyenne à long terme vers le haut, et un signal de moins lorsque la moyenne à court terme traverse la moyenne à long terme vers le haut.
  2. Le système de gestion des risques utilise l’ATR à 14 cycles multiplié par un facteur de 1,5 pour définir une distance de stop-loss dynamique et un objectif de profit de 2 fois la distance de stop-loss (ratio de risque/bénéfice réglable).
  3. Le filtre temporel permet à l’utilisateur de définir une période de temps spécifique pour la transaction et d’effectuer la transaction uniquement dans la période spécifiée.
  4. Le mécanisme de refroidissement de la transaction a été mis en place avec une période d’attente de 10 cycles pour prévenir les transactions excessives.
  5. Le risque de chaque transaction est contrôlé à 1% du compte.

Avantages stratégiques

  1. Gestion dynamique des risques: l’indicateur ATR est utilisé pour s’adapter à la volatilité du marché et pour ajuster automatiquement les marges stop-loss et gain dans différents environnements.
  2. Gestion complète des risques: Gestion systématique des fonds en définissant le rapport entre le risque et le rendement et le ratio de risque par transaction.
  3. Gestion flexible des heures: les heures de négociation peuvent être ajustées en fonction des caractéristiques de la période de négociation des différents marchés.
  4. Prévention des transactions excessives: le mécanisme de la période de refroidissement est efficace pour éviter de générer des signaux de transactions excessifs en période de forte volatilité.
  5. Effets visuels: affichage clair des signaux de négociation et des moyennes mobiles sur un graphique pour faciliter l’analyse et l’optimisation.

Risque stratégique

  1. Risque de renversement de tendance: il peut y avoir de faux signaux de rupture dans un marché instable, entraînant des pertes continues.
  2. Sensitivité des paramètres: le choix de paramètres tels que la périodicité des moyennes mobiles, le multiplicateur ATR, etc. peut avoir un impact significatif sur la performance de la stratégie.
  3. Un mauvais réglage du filtre temporel peut vous faire rater des opportunités commerciales importantes.
  4. Le rapport risque/bénéfice fixe peut ne pas être suffisamment flexible dans différents environnements de marché.

Orientation de l’optimisation de la stratégie

  1. Introduction d’un filtre de force de tendance: ADX ou des indicateurs similaires peuvent être ajoutés pour juger de la force de la tendance, en négociant uniquement pendant une forte tendance.
  2. Le ratio risque/revenu ajusté dynamiquement: Le ratio risque/revenu ajusté automatiquement en fonction de la volatilité du marché ou de l’intensité de la tendance.
  3. Augmentation de l’analyse du volume des transactions: le volume des transactions est utilisé comme indicateur supplémentaire de la confirmation du signal.
  4. Optimisation du mécanisme de la période de refroidissement: la durée de la période de refroidissement est adaptée à la dynamique de la volatilité du marché.
  5. Ajouter une classification des environnements de marché: différentes combinaisons de paramètres sont utilisées dans différents environnements de marché.

Résumer

La stratégie construit un système de négociation complet en combinant des méthodes d’analyse technique classiques et des concepts modernes de gestion des risques. Ses principaux avantages résident dans la gestion dynamique des risques et les mécanismes de filtrage multiples, mais il reste nécessaire d’optimiser les paramètres en fonction des caractéristiques spécifiques du marché dans les applications pratiques. Le bon fonctionnement de la stratégie nécessite une compréhension approfondie du rôle de chaque composant par le trader et un ajustement en temps opportun des paramètres en fonction des changements du marché.

Code source de la stratégie
/*backtest
start: 2024-09-18 00:00:00
end: 2025-02-19 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Profitable Moving Average Crossover Strategy", shorttitle="Profitable MA Crossover", overlay=true)

// Input parameters for the moving averages
shortPeriod = input.int(10, title="Short Period", minval=1)
longPeriod = input.int(100, title="Long Period", minval=1)

// Input parameters for time filter
startHour = input.int(0, title="Start Hour (UTC)", minval=0, maxval=23)
startMinute = input.int(0, title="Start Minute (UTC)", minval=0, maxval=59)
endHour = input.int(23, title="End Hour (UTC)", minval=0, maxval=23)
endMinute = input.int(59, title="End Minute (UTC)", minval=0, maxval=59)

// Cooldown period input (bars)
cooldownBars = input.int(10, title="Cooldown Period (Bars)", minval=1)

// Risk management inputs
riskRewardRatio = input.float(2, title="Risk-Reward Ratio", minval=1)
riskPercent = input.float(1, title="Risk Per Trade (%)", minval=0.1)

// ATR settings
atrLength = input.int(14, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier for Stop-Loss and Take-Profit")

// Calculate the moving averages
shortMA = ta.sma(close, shortPeriod)
longMA = ta.sma(close, longPeriod)

// Plot the moving averages
plot(shortMA, color=color.blue, title="Short MA")
plot(longMA, color=color.red, title="Long MA")

// Calculate ATR for dynamic stop-loss and take-profit
atr = ta.atr(atrLength)
stopLossOffset = atr * atrMultiplier
takeProfitOffset = stopLossOffset * riskRewardRatio

// Identify the crossover points
bullishCross = ta.crossover(shortMA, longMA)
bearishCross = ta.crossunder(shortMA, longMA)

// Get the current bar's time in UTC
currentTime = na(time("1", "UTC")) ? na : timestamp("UTC", year, month, dayofmonth, hour, minute)

// Define the start and end time in seconds from the start of the day
startTime = timestamp("UTC", year, month, dayofmonth, startHour, startMinute)
endTime = timestamp("UTC", year, month, dayofmonth, endHour, endMinute)

// Check if the current time is within the valid time range
isTimeValid = (currentTime >= startTime) and (currentTime <= endTime)

// Functions to check cooldown
var int lastSignalBar = na
isCooldownActive = (na(lastSignalBar) ? false : (bar_index - lastSignalBar) < cooldownBars)

// Handle buy signals
if (bullishCross and isTimeValid and not isCooldownActive)
    entryPrice = close
    stopLossBuy = entryPrice - stopLossOffset
    takeProfitBuy = entryPrice + takeProfitOffset
    strategy.entry("Buy", strategy.long)
    strategy.exit("TakeProfit/StopLoss", "Buy", stop=stopLossBuy, limit=takeProfitBuy)
    lastSignalBar := bar_index

// Handle sell signals
if (bearishCross and isTimeValid and not isCooldownActive)
    entryPrice = close
    stopLossSell = entryPrice + stopLossOffset
    takeProfitSell = entryPrice - takeProfitOffset
    strategy.entry("Sell", strategy.short)
    strategy.exit("TakeProfit/StopLoss", "Sell", stop=stopLossSell, limit=takeProfitSell)
    lastSignalBar := bar_index

// Plot signals on the chart
plotshape(series=bullishCross and isTimeValid and not isCooldownActive, location=location.belowbar, color=color.green, style=shape.labelup, text="Buy", title="Buy Signal", textcolor=color.white)
plotshape(series=bearishCross and isTimeValid and not isCooldownActive, location=location.abovebar, color=color.red, style=shape.labeldown, text="Sell", title="Sell Signal", textcolor=color.white)

// Strategy performance tracking
strategy.close("Buy", when=not isTimeValid)
strategy.close("Sell", when=not isTimeValid)