Это количественная стратегия торговли, которая сочетает в себе перекрестки экспоненциальной скользящей средней (EMA) с средним истинным диапазоном (ATR). Стратегия направлена на выявление сильных тенденций и выполнение сделок в условиях высокой волатильности рынка, эффективно улучшая коэффициент Шарпа и общую производительность.
Основная логика состоит из двух основных компонентов: определения тренда и фильтрации волатильности. Для определения тренда стратегия использует 50-периодную EMA в качестве быстрой линии и 200-периодную EMA в качестве медленной линии, генерируя длинные сигналы, когда быстрая линия пересекает выше медленной линии, и короткие сигналы, когда она пересекает ниже. Для фильтрации волатильности стратегия вычисляет 14-периодное значение ATR и конвертирует его в процент цены, разрешая позиции только тогда, когда процент ATR превышает предопределенный порог (по умолчанию 2%).
Эта стратегия сочетает в себе классические технические индикаторы с современными концепциями управления рисками. Используя кроссоверы EMA для улавливания тенденций при использовании фильтра ATR для контроля времени торговли, стратегия сохраняет простоту, достигая при этом сильной практичности.
/*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)