
Il s’agit d’une stratégie de trading quantifiée combinant une moyenne mobile indicielle (EMA) croisée et un filtre d’amplitude réelle moyenne (ATR). La stratégie améliore efficacement le ratio Sharpe et la performance globale de la stratégie en identifiant les tendances fortes et en négociant dans un environnement de marché très volatil. La stratégie utilise des EMA de 50 cycles et 200 cycles pour capturer les tendances à moyen et long terme, tout en utilisant l’indicateur ATR pour évaluer la volatilité du marché et ne négocier que lorsque la volatilité dépasse un seuil spécifique.
La logique centrale de la stratégie comprend deux parties principales: le jugement de la tendance et le filtrage de la volatilité. Dans le jugement de la tendance, la stratégie utilise l’EMA de 50 cycles comme ligne rapide, l’EMA de 200 cycles comme ligne lente, produisant un signal de plus lorsque la ligne rapide traverse la ligne lente et un signal de moins lorsque la ligne est traversée. Dans le filtrage de la volatilité, la stratégie calcule l’ATR de 14 cycles et le convertit en un pourcentage du prix, ne permettant l’ouverture d’une position que lorsque le pourcentage d’ATR dépasse la barre de la valeur prédéfinie (considérant silencieusement 2%).
C’est une stratégie qui combine des indicateurs techniques classiques avec des idées modernes de gestion du risque. La stratégie est simple tout en ayant une grande utilité. Bien qu’il existe des risques inhérents, la stratégie a toujours une bonne valeur d’application grâce à des mesures d’optimisation et de gestion des risques raisonnables.
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA Crossover with ATR Filter", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)
// Inputs for Moving Averages
fastLength = input.int(50, title="Fast EMA Length")
slowLength = input.int(200, title="Slow EMA Length")
// Inputs for ATR Filter
atrLength = input.int(14, title="ATR Length")
atrMultiplier = input.float(1.5, title="ATR Multiplier")
atrThreshold = input.float(0.02, title="ATR Threshold (%)")
// Calculate EMAs
fastEMA = ta.ema(close, fastLength)
slowEMA = ta.ema(close, slowLength)
// Calculate ATR
atr = ta.atr(atrLength)
// Convert ATR to a percentage of price
atrPct = atr / close
// Define Long Condition (Cross and ATR filter)
longCondition = ta.crossover(fastEMA, slowEMA) and atrPct > atrThreshold / 100
// Define Short Condition
shortCondition = ta.crossunder(fastEMA, slowEMA) and atrPct > atrThreshold / 100
// Define Exit Conditions
exitConditionLong = ta.crossunder(fastEMA, slowEMA)
exitConditionShort = ta.crossover(fastEMA, slowEMA)
// Long Entry
if (longCondition)
strategy.entry("Long", strategy.long)
// Short Entry
if (shortCondition)
strategy.entry("Short", strategy.short)
// Long Exit
if (exitConditionLong)
strategy.close("Long")
// Short Exit
if (exitConditionShort)
strategy.close("Short")
// Plot EMAs for visual reference
plot(fastEMA, title="50 EMA", color=color.blue)
plot(slowEMA, title="200 EMA", color=color.red)
// Plot ATR for reference
plot(atrPct, title="ATR Percentage", color=color.orange, style=plot.style_line)
hline(atrThreshold / 100, "ATR Threshold", color=color.green)