
Многопоказательная стратегия по отслеживанию прорыва тренда - это количественная торговая стратегия, основанная на классической торговой системе в море, которая захватывает сильные тенденции на рынке с помощью многоциклических прорывных сигналов. Основная часть стратегии заключается в использовании ценовых прорывов в разных временных периодах в качестве сигналов входа и выхода, а также в управлении риском и управлении позициями в сочетании с ATR (средняя реальная волновая amplitude).
Ключевым принципом стратегии является захват потенциальных трендовых движений с помощью идентификации исторических высоких или низких точек. Логика конкретной реализации выглядит следующим образом:
Механизм приема: Стратегия использует исторические максимумы и минимумы N1 цикла (по умолчанию 20 циклов) в качестве отсчета прорыва. При повышении цены выше максимума предыдущего N1 цикла генерируется многоголовый входный сигнал; при снижении цены выше минимума предыдущего N1 цикла генерируется пустой входный сигнал.
Механизм выхода“Стратегия использования двойных выступлений”:
Управление позицией: стратегия основана на волатильности (ATR) и риска соотношения, рассчитывает размер единицы сделки, гарантируя, что риск каждой сделки контролируется в пределах фиксированной пропорции средств счета (дифолт 1%).
交易单位 = 风险金额 / (ATR * 每点价值)
Сумма риска, умноженная на первоначальный капитал, умноженная на риск.
Способность отслеживать тенденцииСтратегический дизайн фокусируется на поимке основных тенденций, выявлении потенциальных точек начала тенденции с помощью прорывных сигналов и эффективном использовании тенденционных движений рынка.
Динамический контроль рискаС помощью ATR можно вычислить позицию стоп-лосса и динамически корректировать стоп-дистанцию в зависимости от реальных колебаний рынка. Это позволяет избежать частых стоп-лосса, вызванных слишком близким фиксированным стоп-лосса, а также предотвратить чрезмерные потери, вызванные слишком большим стоп-дистанцией.
Приспособность к позиции: Динамическая корректировка размеров позиций на основе рыночной волатильности и соотношения риска счета, автоматическое сокращение позиций на высоковолатильных рынках, адекватное увеличение позиций на низковолатильных рынках, чтобы обеспечить сбалансированный контроль над рисковыми отверстиями.
Настройка параметров: Стратегия предоставляет интерфейс для настройки нескольких ключевых параметров (N1, N2, ATR-циклы, коэффициент риска и т. д.), которые могут быть оптимизированы пользователем в зависимости от различных рыночных условий и личных предпочтений в отношении риска.
Систематизированные сделкиПолностью систематизированные правила торговли устраняют эмоциональные помехи, строго следуют заданным правилам входа, выхода и управления капиталом, повышают дисциплину торговли.
Неудачи на рынкеВ качестве стратегии отслеживания тенденций, в поперечных рыночных колебаниях может возникать частое ложное сигнальное нарушение, что приводит к последовательным остановкам. Решение может включать в себя фильтрационные условия для колебаний и рассматривать вход только в том случае, если колебания превышают определенный порог.
Влияние скольжения и комиссионных: В рынках с высокой частотой торговли или недостаточной ликвидностью, скольжения и комиссионные могут значительно повлиять на эффективность стратегии. Можно уменьшить эту проблему, снизив частоту торговли или добавив механизм подтверждения сигнала.
Параметр Чувствительность: Показатели эффективности стратегии более чувствительны к параметрам N1 и N2, оптимальные параметры могут сильно различаться в разных рынках и временных рамках. Рекомендуется искать устойчивые комбинации параметров с помощью исторической ретроспекции, чтобы избежать кривой соответствия, вызванной чрезмерной оптимизацией.
Огромный риск дефицитаВ случае скачка цены, вызванного внезапными крупными событиями, стоп-лосс может не быть исполнен по ожидаемой цене, что приводит к непредвиденным потерям. Можно рассмотреть возможность увеличения максимального ограничения потери или введения коэффициента корректировки волатильности.
Риски управления капиталом: Несмотря на то, что стратегия включает в себя механизм контроля риска, в экстремальных рыночных условиях последовательное остановка убытков может привести к значительному отводу кривой капитала. Рекомендуется установить ограничение на максимальное количество последовательных убытков или ввести общий контроль риска.
Подтверждение многократных временных рамок: может быть введен механизм подтверждения тенденции с более длительным циклом, вход в рынок будет рассматриваться только при совпадении тенденций в нескольких временных рамках, что повысит качество сигнала. Например, может быть добавлено условие, проверяющее, соответствует ли направление тренда дневной линии направлению тренда текущего торгового цикла.
Фильтр колебаний: введение условий фильтрации волатильности, выполнение торговых сигналов только в разумных пределах волатильности рынка, избегание входа на рынки, которые являются чрезмерно спокойными или чрезмерно волатильными. Можно использовать ATR-относительность (например, ATR/price ratio) в качестве фильтрационного показателя.
Механизм подтверждения сигналаУвеличение механизма подтверждения прорыва, например, требует, чтобы цена оставалась на определенное время или величину после прорыва, чтобы подтвердить, что сигнал действителен, и уменьшить убытки, вызванные ложными прорывами.
Изменение динамических параметров: Динамическая корректировка параметров N1 и N2 в зависимости от состояния рынка, использование различных комбинаций параметров в различных волатильных условиях, повышение адаптации стратегии к рыночной обстановке.
Присоединяйтесь к оценке интенсивности тренда: в сочетании с индикаторами силы тренда (например, ADX, линейный регрессионный уклон и т. Д.) оценивает силу текущего тренда, и только тогда, когда сила тренда достигает определенного рубежа, рассматривается вход, повышающий точность захвата тренда.
Оптимизация механизма хранения убытковМожно рассмотреть возможность внедрения методов сдерживания с помощью движущейся остановки или методов сдерживания на основе позиций поддержки/сопротивления, чтобы предоставить тренду больше возможностей для развития, сохраняя при этом функции управления риском.
Многопоказательная стратегия отслеживания прорыва тренда - это систематизированная торговая стратегия, которая сочетает в себе классическую концепцию трейдинга в море с современными технологиями управления рисками. Стратегия позволяет эффективно улавливать значительные трендовые возможности на рынке путем определения направления тренда с помощью многоциклических ценовых прорывов в сочетании с 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)