Стратегия следования за трендом на основе нескольких индикаторов

ATR SL N1 N2 波动率过滤 风险管理 多周期 趋势跟踪 海龟交易
Дата создания: 2025-07-03 10:14:35 Последнее изменение: 2025-07-03 10:14:35
Копировать: 6 Количество просмотров: 265
2
Подписаться
319
Подписчики

Стратегия следования за трендом на основе нескольких индикаторов Стратегия следования за трендом на основе нескольких индикаторов

Обзор

Многопоказательная стратегия по отслеживанию прорыва тренда - это количественная торговая стратегия, основанная на классической торговой системе в море, которая захватывает сильные тенденции на рынке с помощью многоциклических прорывных сигналов. Основная часть стратегии заключается в использовании ценовых прорывов в разных временных периодах в качестве сигналов входа и выхода, а также в управлении риском и управлении позициями в сочетании с ATR (средняя реальная волновая amplitude).

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

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

  1. Механизм приема: Стратегия использует исторические максимумы и минимумы N1 цикла (по умолчанию 20 циклов) в качестве отсчета прорыва. При повышении цены выше максимума предыдущего N1 цикла генерируется многоголовый входный сигнал; при снижении цены выше минимума предыдущего N1 цикла генерируется пустой входный сигнал.

  2. Механизм выхода“Стратегия использования двойных выступлений”:

    • Стоп-убыток: динамический стоп-убыток, основанный на настройке ATR, с по умолчанию ценой входа за вычетом ((больше голов) или добавлением ((пустые голов) в 2 раза выше значения ATR.
    • Перевернутый тренд: когда цена опускается ниже минимальной цены в цикле N2 (дифолтные 10 циклов) - открытая позиция; когда цена превышает максимальную цену в цикле N2, - открытая позиция.
  3. Управление позицией: стратегия основана на волатильности (ATR) и риска соотношения, рассчитывает размер единицы сделки, гарантируя, что риск каждой сделки контролируется в пределах фиксированной пропорции средств счета (дифолт 1%).

   交易单位 = 风险金额 / (ATR * 每点价值)

Сумма риска, умноженная на первоначальный капитал, умноженная на риск.

  1. Исполнение сделкиСтратегия: выполнение нового сигнала входа только при отсутствии позиции, избежание повторного входа, при этом запись цены входа используется для расчета стоп-лосса.

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

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

  2. Динамический контроль рискаС помощью ATR можно вычислить позицию стоп-лосса и динамически корректировать стоп-дистанцию в зависимости от реальных колебаний рынка. Это позволяет избежать частых стоп-лосса, вызванных слишком близким фиксированным стоп-лосса, а также предотвратить чрезмерные потери, вызванные слишком большим стоп-дистанцией.

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

  4. Настройка параметров: Стратегия предоставляет интерфейс для настройки нескольких ключевых параметров (N1, N2, ATR-циклы, коэффициент риска и т. д.), которые могут быть оптимизированы пользователем в зависимости от различных рыночных условий и личных предпочтений в отношении риска.

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

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

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

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

  3. Параметр Чувствительность: Показатели эффективности стратегии более чувствительны к параметрам N1 и N2, оптимальные параметры могут сильно различаться в разных рынках и временных рамках. Рекомендуется искать устойчивые комбинации параметров с помощью исторической ретроспекции, чтобы избежать кривой соответствия, вызванной чрезмерной оптимизацией.

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

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

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

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

  2. Фильтр колебаний: введение условий фильтрации волатильности, выполнение торговых сигналов только в разумных пределах волатильности рынка, избегание входа на рынки, которые являются чрезмерно спокойными или чрезмерно волатильными. Можно использовать ATR-относительность (например, ATR/price ratio) в качестве фильтрационного показателя.

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

  4. Изменение динамических параметров: Динамическая корректировка параметров N1 и N2 в зависимости от состояния рынка, использование различных комбинаций параметров в различных волатильных условиях, повышение адаптации стратегии к рыночной обстановке.

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

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

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

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

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

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

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

//@version=5
strategy("Turtle Trading Strategy (Simplified)", overlay=true, initial_capital=10000, default_qty_type=strategy.cash, default_qty_value=1000, commission_type=strategy.commission.cash_per_order, commission_value=1)

// --- Strategy Inputs ---
n1_entry_period = input.int(20, title="Entry Lookback Period (N1)", minval=1)
n2_exit_period = input.int(10, title="Exit Lookback Period (N2)", minval=1)
atr_period = input.int(20, title="ATR Period", minval=1)
atr_multiplier = input.float(2.0, title="ATR Stop Multiplier", minval=0.1)
risk_per_trade_percent = input.float(1.0, title="Risk Per Trade (%)", minval=0.1, maxval=10.0)

// --- Calculate Channels ---
highest_high_n1 = ta.highest(high, n1_entry_period)
lowest_low_n1 = ta.lowest(low, n1_entry_period)

highest_high_n2 = ta.highest(high, n2_exit_period)
lowest_low_n2 = ta.lowest(low, n2_exit_period)

// --- Calculate ATR (Average True Range) ---
atr_value = ta.atr(atr_period)

// --- Position Sizing (Simplified) ---
// This aims to calculate units based on a fixed percentage risk per trade.
// 1 Unit = 1 ATR worth of movement. Risk 1% of equity per trade.
risk_amount = strategy.initial_capital * (risk_per_trade_percent / 100)
dollar_per_point = syminfo.mintick // Or your instrument's specific dollar per point value
unit_size = atr_value * dollar_per_point > 0 ? math.round(risk_amount / (atr_value * dollar_per_point)) : 0

// Ensure unit_size is at least 1 if risk allows, and cap it for realism
if unit_size == 0 and risk_amount > 0
    unit_size := 1 // Minimum 1 unit if risk allows any trade
if unit_size > 10000 // Cap unit size to prevent excessively large positions in backtesting
    unit_size := 10000

// --- Entry Logic ---
long_condition = ta.crossover(close, highest_high_n1[1]) // Break above previous N1 high
short_condition = ta.crossunder(close, lowest_low_n1[1]) // Break below previous N1 low

// Variables to store entry information only for the *current* bar
var float current_entry_price = na
var int current_entry_type = 0 // 1 for long, -1 for short, 0 for no entry

if long_condition and strategy.opentrades == 0 // Only enter if no open positions
    strategy.entry("Long", strategy.long, qty=unit_size, comment="Turtle Long Entry")
    // Store entry details for the current bar
    current_entry_price := close // Or strategy.opentrades[0].entry_price if you prefer but close on entry bar is often same
    current_entry_type := 1

if short_condition and strategy.opentrades == 0 // Only enter if no open positions
    strategy.entry("Short", strategy.short, qty=unit_size, comment="Turtle Short Entry")
    // Store entry details for the current bar
    current_entry_price := close // Or strategy.opentrades[0].entry_price
    current_entry_type := -1

// --- Exit Logic ---

// Declare persistent variables to store stop prices
var float long_stop_price = na
var float short_stop_price = na

// Calculate and store stop price on the bar *after* an entry
if current_entry_type[1] == 1 // If a long entry occurred on the previous bar
    long_stop_price := current_entry_price[1] - (atr_value[1] * atr_multiplier) // Use values from previous bar
    short_stop_price := na // Reset short stop

if current_entry_type[1] == -1 // If a short entry occurred on the previous bar
    short_stop_price := current_entry_price[1] + (atr_value[1] * atr_multiplier) // Use values from previous bar
    long_stop_price := na // Reset long stop

// Stop Loss for Long Positions
if strategy.position_size > 0 // We have a long position
    strategy.exit("Long Exit SL", from_entry="Long", stop=long_stop_price, comment="Long Stop Loss")

// Stop Loss for Short Positions
if strategy.position_size < 0 // We have a short position
    strategy.exit("Short Exit SL", from_entry="Short", stop=short_stop_price, comment="Short Stop Loss")

// N2 Exit for Long Positions
if strategy.position_size > 0 and ta.crossunder(close, lowest_low_n2[1])
    strategy.close("Long", comment="Turtle Long N2 Exit")

// N2 Exit for Short Positions
if strategy.position_size < 0 and ta.crossover(close, highest_high_n2[1])
    strategy.close("Short", comment="Turtle Short N2 Exit")

// --- Plotting for Visualization ---
plot(highest_high_n1, "N1 High", color=color.green, linewidth=2, style=plot.style_linebr)
plot(lowest_low_n1, "N1 Low", color=color.red, linewidth=2, style=plot.style_linebr)
plot(highest_high_n2, "N2 High (Exit)", color=color.blue, linewidth=1, style=plot.style_linebr)
plot(lowest_low_n2, "N2 Low (Exit)", color=color.orange, linewidth=1, style=plot.style_linebr)