Il s'agit d'une stratégie de trading quantitative qui combine les croisements de la moyenne mobile exponentielle (EMA) avec un filtre de plage réelle moyenne (ATR). La stratégie vise à identifier les fortes tendances et à exécuter des transactions dans des conditions de marché à forte volatilité, améliorant ainsi efficacement le ratio Sharpe et la performance globale.
La logique de base se compose de deux composants principaux: la détermination de la tendance et le filtrage de la volatilité. Pour la détermination de la tendance, la stratégie utilise une EMA de 50 périodes comme ligne rapide et une EMA de 200 périodes comme ligne lente, générant des signaux longs lorsque la ligne rapide traverse au-dessus de la ligne lente et des signaux courts lorsqu'elle traverse en dessous. Pour le filtrage de la volatilité, la stratégie calcule la valeur ATR de 14 périodes et la convertit en pourcentage du prix, n'autorisant des positions que lorsque le pourcentage ATR dépasse un seuil prédéfini (défaut 2%).
Cette stratégie combine des indicateurs techniques classiques avec des concepts de gestion des risques modernes. En utilisant des croisements EMA pour capturer les tendances tout en utilisant un filtre ATR pour contrôler le timing des transactions, la stratégie maintient sa simplicité tout en atteignant une grande praticité.
/*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)