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