Высокоточная стратегия прорыва стоп-лосса ATR и система фильтрации направления ADX

ATR ADX RMA 突破交易 趋势跟踪 动态止损 回撤止盈 方向过滤 自适应风险管理
Дата создания: 2025-07-08 13:53:49 Последнее изменение: 2025-07-08 13:53:49
Копировать: 1 Количество просмотров: 284
2
Подписаться
319
Подписчики

Высокоточная стратегия прорыва стоп-лосса ATR и система фильтрации направления ADX Высокоточная стратегия прорыва стоп-лосса ATR и система фильтрации направления ADX

Обзор

Стратегия является тщательно продуманной системой прорывного трейдинга, которая сочетает в себе адаптивное управление стоп-убытками ATR (средняя реальная волновая ширина) и ADX (средний индекс направления). Стратегия вступает в торговлю после подтверждения высоких/низких точек прорыва в течение N циклов, а также ссылаясь на долгосрочные RMA (движущиеся средние линии). Трендовый фильтр обеспечивает согласованность с основной тенденцией.

Стратегический принцип

Ключевые принципы стратегии основаны на комплексной системе суждений, в которой цены прорывают историческую поддержку и сопротивление в сочетании с подтверждением тенденции и фильтрацией силы направления:

  1. Прорывный сигналИспользуя N циклов (по умолчанию 96) высоты/низкие точки в качестве прорывных ориентиров, запускается многоголовый сигнал, когда цена закрывается, прорывая предыдущие высоты и находясь в восходящей тенденции; запускается пустой сигнал, когда цена закрывается, прорывая предыдущие низкие точки и находясь в нисходящей тенденции.

  2. Фильтр трендовПрименение средней линии RMA с более длительным периодом (по умолчанию 960) в качестве основы для определения тенденции, цена выше RMA рассматривается как тенденция к росту, а цена ниже RMA рассматривается как тенденция к снижению, чтобы обеспечить соответствие направления торговли с основной тенденцией.

  3. Фильтрация силы в направлении ADXФильтрация неопределенной направленности рыночной среды путем расчета направленности текущего рынка (показатель ADX) и требования, чтобы ADX был больше установленного порога (по умолчанию 12) и находился в восходящей фазе.

  4. Двухэтапный механизм остановки убытков

    • Первый этап: после входа в игру с использованием ATR ((по умолчанию 1.0) устанавливается начальная стоп-позиция
    • Второй этап: когда прибыль достигнет ATR (по умолчанию 3.0) в два раза, активировать отслеживание стоп-убытков и установить динамическую позицию стоп-убытков с использованием большего ATR (по умолчанию 9.0)
  5. Отмена механизма сдерживания: после отслеживания активирования стоп-лосса, записывается многоголовый максимум/полноголовый минимум, когда цена отступает от предельной точки и превышает установленный ATR-множественный ((многоголовый по умолчанию в 13 раз, по умолчанию в 4 раза)), запускается стоп-понижение.

Стратегические преимущества

  1. Приспособность к управлению рискамиATR - показатель волатильности, который позволяет автоматически регулировать расстояние между остановками в зависимости от реальных колебаний рынка, избегая проблемы слишком широкого или слишком узкого остановки в зависимости от различных рыночных условий.

  2. Многоуровневый контроль рискаСтратегия использует двухуровневую логику остановки, которая сочетает в себе первоначальный стоп и отслеживание стоп-убытков, что гарантирует контроль над начальным риском, а также блокирует прибыль после увеличения прибыли и дает возможность полноценному развитию тренда. Такая структура остановки особенно подходит для захвата больших тенденций.

  3. Фильтр подтверждения направленностиФильтрация по показателям ADX требует, чтобы рынок имел достаточно направленности, и направленность усиливается.[1]), эффективно предотвращает частые сделки на консолидированных рынках без очевидной тенденции и уменьшает убытки, связанные с ложными прорывами.

  4. Обеспечение согласованности тенденцийИспользование долгосрочных RMA средних линий в качестве фильтра тренда, гарантируя торговлю только в направлении основного тренда, избегая контртртропераций, повышает уровень успешности торговли и эффективность капитала.

  5. Интеллектуальные тормозные механизмыС помощью функции снятия блокировки, чтобы заблокировать прибыль во время реверса после значительных колебаний цен, чтобы избежать избыточного отклонения прибыли, особенно подходит для захвата резкого расширения колебаний.

  6. Визуальный контроль: Стратегия на графике четко идентифицирует входную цену, различные линии остановки, уровни прорыва и цвета фонового тренда, что позволяет трейдерам визуально отслеживать состояние работы стратегии и ключевые цены.

Стратегический риск

  1. Риск ложного проникновения: Несмотря на использование фильтрации ADX и подтверждения тренда, рынок может по-прежнему подвергаться ложным прорывам, особенно в случае важных пресс-релизов или резких изменений в ликвидности. Решение заключается в соответствующем повышении порога ADX или увеличении требований подтверждения прорыва, например, требование сохранения нескольких K-линий выше / ниже уровня прорыва после прорыва.

  2. Параметр Чувствительность: Стратегическая производительность более чувствительна к параметрам, особенно к ATR-циклам, умножению и выбору прорыва. Оптимальные параметры могут сильно различаться в разных рыночных условиях. Рекомендуется проверять стабильность параметров в разных рыночных условиях с помощью исторической обратной связи и рассмотреть возможность внедрения механизма адаптивной коррекции параметров.

  3. Отслеживание задержки по убыткамВ случае резкого рыночного поворота, отслеживание стоп-лосса может не вовремя отслеживать изменения цены, что приводит к частичному возврату полученной прибыли. Можно рассмотреть возможность динамической корректировки ATR в условиях высокой волатильности или в сочетании с краткосрочными динамическими показателями, которые могут предупредить о возможном обратном тренде.

  4. Долгоциклическая тенденция отстает от фильтраИспользование долгосрочных RMA средних линий в качестве фильтра на тренды может привести к пропущенным или ошибочным сигналам вблизи точек перехода. Решение заключается в введении многоциклического подтверждения тренда или в сочетании с более чувствительными среднесрочными и краткосрочными индикаторами тренда в качестве вспомогательного суждения.

  5. “Свобода слова”: в сильных тенденциях механизм сдерживания отмены может привести к преждевременному выходу из продолжающейся тенденции. Можно рассмотреть возможность динамической корректировки отмены отмены в зависимости от интенсивности тенденции или адаптации коэффициента отмены в сочетании с изменениями волатильности.

Направление оптимизации

  1. Система параметров адаптации: создание механизма самостоятельной корректировки параметров адаптации, основанной на волатильности рынка и силе тренда, что позволяет автоматически оптимизировать ATR-множественность, ADX-нижние значения и множественность отклонений в соответствии с текущей рыночной обстановкой. Например, уменьшить ATR-множественность в условиях низкой волатильности и увеличить ATR-множественность в условиях высокой волатильности; увеличить множественность отклонений в сильных тенденциях и уменьшить множественность отклонений в слабых тенденциях.

  2. Подтверждение многократных временных рамокВнедрение многоразового анализа, требующего, чтобы направление тренда в более высоких временных рамках соответствовало направлению торговли, а также включение поддерживающего сопротивления в более высокие временные рамки в рефераты для принятия решений, повышение надежности прорывных сигналов.

  3. Оптимизация интеллектуального входа: реализация механизма серийного входа, частичный вход после запуска первоначального сигнала прорыва, увеличение запаса после дальнейшего подтверждения прорыва, снижение риска, связанного с ложным прорывом, и одновременно гарантирование не пропустить реальный прорыв.

  4. Ощущение остановки колебанийРазработка интеллектуальной системы сдерживания, основанной на изменениях волатильности, установка более строгих условий для снятия сдерживания после внезапного расширения волатильности, предоставление большего пространства для корректировки цены при стабильности волатильности, чтобы решение о сдерживании соответствовало реальному состоянию рынка.

  5. Машинное обучениеВнедрение алгоритмов машинного обучения для анализа исторических моделей прорывов, выявления комбинаций характеристик, которые обеспечивают высокий уровень успешного прорыва, и в соответствии с этим динамически корректировать параметры стратегии или настроить систему оценки качества прорывов, отдавая приоритет высококачественным сделкам с прорывными сигналами.

  6. Оптимизация стоимости сделкиОптимизация времени входа и типа ордера для различных типов сделок с учетом характеристик ликвидности и структуры затрат на сделки, например, использование лимитных ордеров вместо рыночных в условиях низкой ликвидности или использование отслеживаемых лимитных ордеров для входа в условиях высокой волатильности.

  7. Интеграция эмоциональных показателей: в сочетании с рыночными настроениями (например, индексы волатильности, широты рынка и т. д.) в качестве вспомогательных решений, чтобы скорректировать параметры стратегии или приостановить торговлю в экстремальных эмоциональных условиях, чтобы избежать ненужных потерь в нерациональных рыночных условиях.

Подвести итог

Высокоточное ATR отслеживает стратегию прорыва стоп-стоп и направленную фильтрующую систему ADX. Это комплексная торговая система, которая объединяет в себе несколько основных идей технического анализа. Она захватывает начало тренда путем прорыва торгов, использует фильтрацию тренда и подтверждение силы направления для улучшения качества сигнала, а также обеспечивает полноценное управление средствами путем адаптивного управления рисками и многоуровневого механизма стоп-стоп.

Наибольшим преимуществом стратегии является ее адаптация к различным рыночным условиям и совершенная структура управления рисками. Динамическая корректировка риска, реализованная с помощью показателя ATR, позволяет стратегии поддерживать относительно согласованный уровень риска в различных волатильных условиях, в то время как двухуровневый механизм остановки убытков и снятия остановок обеспечивает сбалансированное решение, учитывающее защиту капитала и максимизацию прибыли.

Несмотря на то, что существуют определенные риски для стратегий, связанные с чувствительностью к параметрам и задержкой остановок, эти риски могут быть эффективно контролированы с помощью рекомендуемого направления оптимизации, особенно с помощью системы адаптивных параметров и подтверждения многократных временных рамок. Дальнейшее внедрение машинного обучения и анализа эмоциональных индикаторов может значительно повысить устойчивость стратегий и потенциал долгосрочной прибыли.

Для квантовых трейдеров эта стратегия предоставляет прочную основу, которую можно гибко корректировать и расширять в зависимости от личных предпочтений в отношении риска и рыночной точки зрения, являясь торговой системой, обладающей как теоретической глубиной, так и практической ценностью.

Исходный код стратегии
/*backtest
start: 2024-07-08 00:00:00
end: 2025-07-04 08:00:00
period: 1h
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/

//@version=6
strategy('YTPBTC1HATRSSADX', 
         overlay=true, 
         initial_capital=10000, 
         commission_value=0.1, 
         default_qty_value=100, 
         default_qty_type=strategy.percent_of_equity, 
         margin_long=10, 
         margin_short=10, 
         pyramiding=1)

// ==================== 输入参数 ====================
atr_length = input.int(48, 'ATR周期', minval=1, step=12)
atr_mult_1 = input.float(1.0, 'ATR初始止损乘数', minval=0.1, step=0.1)
atr_mult_2 = input.float(9.0, 'ATR追踪止损乘数', minval=0.1)

// 追踪激活倍数
profit_atr_mult = input.float(3.0, 'ATR追踪激活倍数', minval=0.5, step=0.5)

// 固定回撤止盈设置
long_pullback_atr = input.float(13, '多头回撤止盈倍数', minval=0, step=1)
short_pullback_atr = input.float(4, '空头回撤止盈倍数', minval=0, step=1)

breakout_period = input.int(96, title='突破周期', minval=1, step=24)
rma_length = input.int(500, 'RMA趋势过滤周期', minval=1, step=96)

// ADX设置
enable_adx_filter = input.bool(true, '启用ADX过滤')
adx_length = atr_length//input.int(48, 'ADX周期', minval=1, step=12)
adx_threshold = input.float(12, "ADX阈值", minval=1)

use_breakeven = true  // 启动追踪时是否先保本止损

// ==================== ATR计算 ====================
atr_value = ta.atr(atr_length)

// ==================== ADX指标计算 ====================
// 真实波幅计算
tr = math.max(math.max(high - low, math.abs(high - nz(close[1]))),
              math.abs(low - nz(close[1])))

// 方向性移动计算
dm_plus = high - nz(high[1]) > nz(low[1]) - low ? math.max(high - nz(high[1]), 0) : 0
dm_minus = nz(low[1]) - low > high - nz(high[1]) ? math.max(nz(low[1]) - low, 0) : 0

// ADX计算
var float sm_tr = na
var float sm_dm_plus = na
var float sm_dm_minus = na

sm_tr := nz(sm_tr[1]) - nz(sm_tr[1]) / adx_length + tr
sm_dm_plus := nz(sm_dm_plus[1]) - nz(sm_dm_plus[1]) / adx_length + dm_plus
sm_dm_minus := nz(sm_dm_minus[1]) - nz(sm_dm_minus[1]) / adx_length + dm_minus

di_plus = sm_dm_plus / sm_tr * 100
di_minus = sm_dm_minus / sm_tr * 100
dx = math.abs(di_plus - di_minus) / (di_plus + di_minus) * 100
adx = ta.sma(dx, adx_length)

// ==================== 趋势过滤 ====================
rma_trend = ta.rma(close, rma_length)
plot(rma_trend, title='RMA趋势线', color=color.black, linewidth=2)

trend_long = close > rma_trend
trend_short = close < rma_trend

// ==================== 突破信号 ====================
// 获取过去N根K线的最高高点和最低低点(避免未来数据)
highest_high = ta.highest(high, breakout_period)[1]
lowest_low = ta.lowest(low, breakout_period)[1]

// 入场条件 - 修改ADX条件,要求ADX上升
adx_condition = not enable_adx_filter or (adx >= adx_threshold and adx > adx[1])
long_condition = close > highest_high and trend_long and strategy.position_size == 0 and adx_condition
short_condition = close < lowest_low and trend_short and strategy.position_size == 0 and adx_condition

// ==================== 入场执行 ====================
if long_condition
    strategy.entry('Long', strategy.long)

if short_condition
    strategy.entry('Short', strategy.short)

// ==================== ATR止损系统 ====================
// 止损状态变量
var float long_stop_initial = na  // 第一段初始止损
var float long_stop_trail = na    // 第二段追踪止损
var bool long_trail_active = false
var float short_stop_initial = na  // 第一段初始止损
var float short_stop_trail = na    // 第二段追踪止损
var bool short_trail_active = false

// 回撤止盈变量
var float long_highest = na      // 多头最高价记录
var float short_lowest = na      // 空头最低价记录

// ==================== 多头止损计算 ====================
if strategy.position_size > 0
    // 新开多头仓位
    if strategy.position_size[1] <= 0
        long_stop_initial := strategy.position_avg_price - atr_value * atr_mult_1
        long_stop_trail := na
        long_trail_active := false
        long_highest := na  // 重置最高价记录
    else
        // 计算当前浮动盈亏
        float current_profit = close - strategy.position_avg_price
        
        // 检查是否激活追踪止损
        if not long_trail_active and current_profit >= atr_value * profit_atr_mult
            long_trail_active := true
            long_highest := high  // 开始记录最高价
            
            // 保本处理
            if use_breakeven
                long_stop_trail := strategy.position_avg_price
            else
                long_stop_trail := close - atr_value * atr_mult_2
        
        // 更新追踪止损和最高价记录
        if long_trail_active
            // 更新最高价记录
            long_highest := math.max(long_highest, high)
            
            // 传统追踪止损更新
            float new_stop = close - atr_value * atr_mult_2
            long_stop_trail := math.max(long_stop_trail, new_stop)

// ==================== 空头止损计算 ====================
if strategy.position_size < 0
    // 新开空头仓位
    if strategy.position_size[1] >= 0
        short_stop_initial := strategy.position_avg_price + atr_value * atr_mult_1
        short_stop_trail := na
        short_trail_active := false
        short_lowest := na  // 重置最低价记录
    else
        // 计算当前浮动盈亏
        float current_profit = strategy.position_avg_price - close
        
        // 检查是否激活追踪止损
        if not short_trail_active and current_profit >= atr_value * profit_atr_mult
            short_trail_active := true
            short_lowest := low  // 开始记录最低价
            
            // 保本处理
            if use_breakeven
                short_stop_trail := strategy.position_avg_price
            else
                short_stop_trail := close + atr_value * atr_mult_2
        
        // 更新追踪止损和最低价记录
        if short_trail_active
            // 更新最低价记录
            short_lowest := math.min(short_lowest, low)
            
            // 传统追踪止损更新
            float new_stop = close + atr_value * atr_mult_2
            short_stop_trail := math.min(short_stop_trail, new_stop)

// ==================== 止损执行 ====================
// 第一段止损:收盘价止损(未激活追踪时)
if strategy.position_size > 0 and not long_trail_active
    // 检查收盘价是否触及初始止损线
    if close <= long_stop_initial
        strategy.close('Long', comment='初始止损')

if strategy.position_size < 0 and not short_trail_active
    // 检查收盘价是否触及初始止损线
    if close >= short_stop_initial
        strategy.close('Short', comment='初始止损')

// 第二段止损:实时止损(激活追踪后)
if strategy.position_size > 0 and long_trail_active
    strategy.exit('Long Trail Stop', from_entry='Long', stop=long_stop_trail)

if strategy.position_size < 0 and short_trail_active  
    strategy.exit('Short Trail Stop', from_entry='Short', stop=short_stop_trail)

// 动态回撤止盈检查
if strategy.position_size > 0 and long_trail_active and not na(long_highest)
    // 计算从最高点回撤幅度
    pullback_amount = long_highest - close
    pullback_threshold = atr_value * long_pullback_atr
    if pullback_amount >= pullback_threshold
        strategy.close('Long', comment='回撤止盈')

if strategy.position_size < 0 and short_trail_active and not na(short_lowest)
    // 计算从最低点反弹幅度  
    pullback_amount = close - short_lowest
    pullback_threshold = atr_value * short_pullback_atr
    if pullback_amount >= pullback_threshold
        strategy.close('Short', comment='回撤止盈')

// ==================== 变量重置 ====================
if strategy.position_size[1] != 0 and strategy.position_size == 0
    long_stop_initial := na
    long_stop_trail := na
    long_trail_active := false
    short_stop_initial := na
    short_stop_trail := na
    short_trail_active := false
    // 重置回撤止盈变量
    long_highest := na
    short_lowest := na

// ==================== 图表绘制 ====================
plot(strategy.position_avg_price, color=color.new(color.yellow, 44), title="入场均价", linewidth=1)
plot(long_stop_initial, color=color.new(color.blue, 44), title='多头初始止损线', linewidth=1)
plot(short_stop_initial, color=color.new(color.blue, 44), title='空头初始止损线', linewidth=1)
plot(long_stop_trail, color=color.new(color.fuchsia, 44), title='多头追踪止损线', linewidth=1)
plot(short_stop_trail, color=color.new(color.fuchsia, 44), title='空头追踪止损线', linewidth=1)

// 最高/最低价记录线
plot(long_highest, color=color.new(color.green, 70), title='多头最高价', linewidth=1, style=plot.style_stepline)
plot(short_lowest, color=color.new(color.red, 70), title='空头最低价', linewidth=1, style=plot.style_stepline)

// 绘制突破线
plot(highest_high, color=color.new(color.green, 70), title='突破上线')
plot(lowest_low, color=color.new(color.red, 70), title='突破下线')

// 背景颜色显示趋势
bgcolor(trend_long ? color.new(color.green, 95) : trend_short ? color.new(color.red, 95) : na, title="趋势背景")

// ==================== 信息显示 ====================
// 在图表上显示当前策略信息
base_rows = enable_adx_filter ? 3 : 2
var table info_table = table.new(position.top_right, 2, base_rows, bgcolor=color.white, border_width=1)

var int row_index = 0
row_index := 0  // 重置行索引

table.cell(info_table, 0, row_index, "ATR周期", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, row_index, str.tostring(atr_length), text_color=color.black, text_size=size.small)
row_index := row_index + 1

// 只在启用ADX时显示
if enable_adx_filter
    table.cell(info_table, 0, row_index, "ADX", text_color=color.black, text_size=size.small)
    table.cell(info_table, 1, row_index, str.tostring(math.round(adx, 1)), text_color=color.black, text_size=size.small)
    row_index := row_index + 1

table.cell(info_table, 0, row_index, "追踪倍数", text_color=color.black, text_size=size.small)
table.cell(info_table, 1, row_index, str.tostring(profit_atr_mult), text_color=color.black, text_size=size.small)