
Обзор
Эта стратегия является системой торговли с низким количеством отступлений, которая сочетает в себе фильтр диапазона (Range Filter) и среднюю реальную волну (ATR). Она идентифицирует направление тренда через фильтр диапазона, а также использует ATR для динамического регулирования размеров позиций и установки стоп-лосса, чтобы эффективно контролировать риск. Эта стратегия требует, чтобы цена дважды в течение двух последовательных циклов пробивалась через фильтр диапазона, чтобы подтвердить тренд. Этот двойной механизм подтверждения эффективно уменьшает ложный прорыв.
Стратегический принцип
В основе этой стратегии лежит объединение диапазона фильтров для идентификации тенденций с системой управления рисками ATR:
Расчет фильтра диапазона:
- Сначала вычислите простое скользящее среднее (SMA) цены как центральную линию.
- Затем вычисляется скользящее среднее отклонения цены от абсолютных значений от центральной линии в качестве диапазона колебаний.
- Верхняя линия = центральная линия + диапазон колебаний
- Нижняя линия = центральная линия - диапазон колебаний
Условия подтверждения тренда:
- Повышение: цены заканчивают два цикла подряд
- Снижение: цены заканчивают два цикла подряд
- Этот механизм двойного подтверждения уменьшает количество ложных сигналов.
Динамическая позиция ATR:
- Использование ATR для измерения текущей волатильности рынка
- Формула расчета позиции: (счетный капитал * процент риска) / (ATR * значение балла)
- Чем больше волатильность на рынке, тем меньше позиция; чем меньше волатильность, тем больше позиция
ATR задерживается:
- Многоглавный стоп-лост установлен как: текущая цена - (ATR * кратность)
- Стоп-лома на пустой конец: текущая цена + (ATR * кратность)
- По мере того, как цена движется в сторону выгоды, линия стоп-лосса также движется, блокируя прибыль.
Стратегические преимущества
Умение адаптироваться:
- Диапазон фильтра автоматически адаптируется к колебательным характеристикам различных рыночных циклов
- Механизм корректировки позиций ATR позволяет стратегии автоматически адаптироваться к различным волатильным условиям
Отличный контроль риска:
- Процент фиксированного риска на одну сделку (по умолчанию 1%)
- Размер позиции в зависимости от динамики рыночных колебаний
- Механизм хранения прибыли эффективно блокирует прибыль и ограничивает потери
Сигнал высокого качества:
- Механизм двойного подтверждения ((две последовательные прорывы цикла) уменьшает ложные сигналы
- Сфера фильтров эффективно отфильтровывает рыночный шум и определяет реальные тенденции
Низкие характеристики:
- Ограничение максимального убытка от одной сделки с помощью стоп-мотора
- Консервативная настройка параметров риска (риск < 1%) снижает общий отказ
- Динамические позиции автоматически уменьшаются во время высокой волатильности, снижая риск
Прозрачность и настройка:
- Ясные и логичные параметры стратегии
- Параметры могут быть скорректированы в зависимости от рынка и личных предпочтений
Стратегический риск
Нехорошие показатели на горизонтальном рынке:
- В отсутствие тренда на рынке может возникать частота ложных сигналов прорыва
- Решение: можно добавить дополнительные фильтры трендов или увеличить количество подтверждающих циклов
Риск быстрого разворота:
- При резком реверсии сильного тренда, отслеживание может быть не вовремя.
- Решение: увеличение показателя волатильности в сочетании с уменьшением остановочного расстояния
Параметр Чувствительность:
- Выбор циклов фильтра диапазона и ATR-множества оказывает большое влияние на эффективность стратегии
- Решение: Проведите полное историческое обследование и найдите надежную комбинацию параметров
Продолжающийся риск убытков:
- Несмотря на то, что риски на каждой сделке хорошо контролируются, последовательные убыточные сделки могут привести к более крупным отступлениям.
- Решение: установить ограничение на максимальное количество последовательных потерь или добавить фильтр рыночной среды
Влияние скольжения и комиссионных:
- В реальной торговле скольжение и комиссионные могут существенно повлиять на эффективность стратегии
- Решение: включить разумные комиссионные и оценочные пункты в обратную оценку, чтобы сохранить достаточную прибыль
Направление оптимизации стратегии
Добавить фильтр рыночной среды:
- Для идентификации состояния рынка можно ввести индикаторы волатильности (например, полосы пропускания Bollinger Bandwidth).
- Приостановка торговли или корректировка параметров в условиях низкой волатильности или рыночной консолидации
- Это позволит уменьшить количество ложных сигналов на горизонтальных рынках и повысить общую выигрышную вероятность
Оптимизация цикла диапазона фильтрации:
- Подумайте об использовании адаптивных циклов вместо фиксированных
- Фильтрационный цикл диапазона, который может автоматически корректироваться на основе рыночных колебаний
- Это позволит стратегии лучше адаптироваться к различным этапам рынка.
Введение многократного подтверждения временных рамок:
- Условия подтверждения тренда на более высоких временных рамках
- Торгуйте только в направлении основного тренда, избегайте обратной торговли
- Это значительно улучшит качество сигнала и коэффициент выигрыша.
Динамическая коррекция ATR:
- Количество ATR, скорректированное на основе динамики рыночных колебаний
- Использование меньших множителей в низко-волатильных рынках и больших множителей в высоко-волатильных рынках
- Это повысит эффективность и гибкость сдерживания потерь.
Добавление механизма выхода на основе времени:
- Настройка максимального срока хранения
- Если цена не будет развиваться в ожидаемом направлении в течение определенного периода времени, то обязательная ликвидация
- Это позволяет избежать долгого задержки в недействительных сделках.
Подвести итог
Двойная подтверждение диапазона фильтра стратегии в сочетании с ATR динамических позиций и система стоп-следующих потерь является количественной торговой стратегии, ориентированной на контроль риска. Он использует диапазон фильтра для идентификации направления тенденции, требует, чтобы два последовательных цикла прорывов, чтобы подтвердить сигнал, используйте ATR для динамического регулирования размеров позиций и установки стоп-следующих потерь, эффективно контролировать риск каждой сделки в пределах заранее установленного процента. Основные преимущества этой стратегии заключаются в сильной адаптивности и отличных возможностей контроля риска, особенно подходит для рынков с большой волатильностью, но с заметной тенденцией.
Исходный код стратегии
/*backtest
start: 2025-02-01 00:00:00
end: 2025-05-25 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("Range Filter + ATR Strategy (Low Drawdown)", overlay=true,
pyramiding=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, commission_type=strategy.commission.percent,
commission_value=0.1, initial_capital=10000)
// Input parameters
rangePeriod = input.int(14, title="Range Filter Period")
atrPeriod = input.int(14, title="ATR Period")
riskPercent = input.float(1.0, title="Risk % per Trade", minval=0.1, maxval=5)
useATRSizing = input(true, title="Use ATR Position Sizing")
trailATR = input(1.5, title="Trailing Stop ATR Multiple")
// Calculate Range Filter
src = close
smooth = ta.sma(src, rangePeriod)
filter = ta.sma(math.abs(src - smooth), rangePeriod)
upper = smooth + filter
lower = smooth - filter
// Calculate ATR
atr = ta.atr(atrPeriod)
// Trend direction
upTrend = src > upper and src[1] > upper[1]
downTrend = src < lower and src[1] < lower[1]
// Position sizing based on ATR
atrPositionSize = (strategy.equity * riskPercent/100) / (atr * syminfo.pointvalue)
// Strategy logic
if (upTrend)
strategy.entry("Long", strategy.long, qty=useATRSizing ? atrPositionSize : na)
if (downTrend)
strategy.entry("Short", strategy.short, qty=useATRSizing ? atrPositionSize : na)
// Corrected trailing stop using trail_offset instead of trail_points
if (strategy.position_size > 0)
strategy.exit("Long Exit", "Long", trail_price=na, trail_offset=trailATR * atr)
if (strategy.position_size < 0)
strategy.exit("Short Exit", "Short", trail_price=na, trail_offset=trailATR * atr)
// Plotting
plot(upper, color=color.green, title="Upper Range")
plot(lower, color=color.red, title="Lower Range")
plot(smooth, color=color.blue, title="Smooth Line")