Динамическое отслеживание стоп-лосса на одну треть K-line количественная торговая стратегия

TRINITY ATR
Дата создания: 2025-02-18 13:57:33 Последнее изменение: 2025-02-18 13:57:33
Копировать: 0 Количество просмотров: 345
1
Подписаться
1617
Подписчики

Динамическое отслеживание стоп-лосса на одну треть K-line количественная торговая стратегия

Обзор

Это количественная торговая стратегия, которая сочетает в себе третий K-линейный метод анализа Билла Уильямса и динамическую функцию стоп-слежения. Эта стратегия создает четкий плюсовый сигнал, анализируя структурные характеристики текущей и предыдущей K-линий, и использует конфигурируемые механизмы стоп-слежения для защиты позиций, обеспечивая точный вход/выход и управление рисками.

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

Основная логика стратегии основана на следующих ключевых элементах:

  1. Вычисление треугольника K-линии: распределить диапазон каждой K-линии (высокая цена - низкая цена) на три части, чтобы получить граничные значения верхней и нижней зоны.
  2. Классификация K-линейных форм: K-линии делятся на несколько типов в зависимости от того, где цены на открытие и закрытие находятся в третьем подрайоне. Например, когда цены на открытие находятся в нижнем регионе, а цены на закрытие находятся в верхнем регионе, это считается сильным повышением.
  3. Правила генерирования сигнала: определение эффективного торгового сигнала путем комбинированного анализа формы текущей и предыдущей K-линий. Например, когда две последовательные K-линии показывают сильные характеристики, вызывается многосигнал.
  4. Динамические стоп-стопы: в течение заданного периода времени, используйте минимальную цену предыдущей N-корневой K-линии (многоголовый) или максимальную цену (пустой) в качестве мобильных стоп-стопов.

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

  1. Логическая ясность: стратегия использует интуитивный метод анализа K-линейной структуры, правила торговли ясны и легко понятны.
  2. Управление рисками: с помощью механизма динамического отслеживания стоп-лосс можно эффективно контролировать риск вывода при сохранении достаточного пространства для прибыли.
  3. Адаптируемость: стратегия может быть адаптирована к различным рыночным условиям, чтобы отслеживать параметры стоп-лосса, обладая хорошей адаптивностью.
  4. Высокий уровень автоматизации: полная автоматизация от генерации сигналов до управления позициями, сокращение человеческого вмешательства.

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

  1. Риск шокирующего рынка: в условиях поперечного колебания может возникать частота ложных сигналов прорыва, что приводит к чрезмерной торговле.
  2. Риск взлёта: при крупном взлёте может произойти несвоевременное задействование стоп-травмы, что приводит к неожиданным потерям.
  3. Чувствительность параметров: выбор параметров, которые отслеживают остановку убытков, имеет большое влияние на эффективность стратегии, неправильная настройка параметров может привести к преждевременному выходу или недостаточной защите.

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

  1. Добавление фильтрации на рыночные условия: можно ввести индикатор тренда или индикатор волатильности, динамически корректируя параметры стратегии в различных рыночных условиях.
  2. Оптимизация механизма остановки: можно рассмотреть возможность установки более гибкого расстояния остановки в сочетании с показателями ATR, повышая адаптивность остановки.
  3. Внедрение управления позициями: можно скорректировать размер позиции в зависимости от силы сигнала и динамики волатильности рынка, чтобы обеспечить более тонкий контроль риска.
  4. Добавить оптимизацию выхода: можно добавить целевые показатели прибыли или технические показатели, чтобы оптимизировать время выхода.

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

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

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

//@version=5
strategy("TrinityBar with Trailing Stop", overlay=true, initial_capital=100000, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=250)

//─────────────────────────────────────────────────────────────
// 1. BAR THIRDS CALCULATIONS
//─────────────────────────────────────────────────────────────
cur_range      = high - low
cur_lowerThird = low + cur_range / 3
cur_upperThird = high - cur_range / 3

prev_range      = high[1] - low[1]
prev_lowerThird = low[1] + prev_range / 3
prev_upperThird = high[1] - prev_range / 3

//─────────────────────────────────────────────────────────────
// 2. DEFINE BULLISH & BEARISH BAR TYPES (CURRENT & PREVIOUS)
//─────────────────────────────────────────────────────────────
// Current bar types
is_1_3 = (open <= cur_lowerThird) and (close >= cur_upperThird)
is_3_3 = (open >= cur_upperThird) and (close >= cur_upperThird)
is_2_3 = (open > cur_lowerThird) and (open < cur_upperThird) and (close >= cur_upperThird)

is_3_1 = (open >= cur_upperThird) and (close <= cur_lowerThird)
is_1_1 = (open <= cur_lowerThird) and (close <= cur_lowerThird)
is_2_1 = (open > cur_lowerThird) and (open < cur_upperThird) and (close <= cur_lowerThird)

// Previous bar types
prev_is_1_3 = (open[1] <= prev_lowerThird) and (close[1] >= prev_upperThird)
prev_is_3_3 = (open[1] >= prev_upperThird) and (close[1] >= prev_upperThird)
prev_is_2_3 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] >= prev_upperThird)

prev_is_3_1 = (open[1] >= prev_upperThird) and (close[1] <= prev_lowerThird)
prev_is_1_1 = (open[1] <= prev_lowerThird) and (close[1] <= prev_lowerThird)
prev_is_2_1 = (open[1] > prev_lowerThird) and (open[1] < prev_upperThird) and (close[1] <= prev_lowerThird)

//─────────────────────────────────────────────────────────────
// 3. VALID SIGNAL CONDITIONS
//─────────────────────────────────────────────────────────────
validBuy  = (prev_is_2_3 or prev_is_3_3 or prev_is_1_3) and (is_1_3 or is_3_3)
validSell = (prev_is_2_1 or prev_is_1_1 or prev_is_3_1) and (is_1_1 or is_3_1)

//─────────────────────────────────────────────────────────────
// 4. PLOT SIGNAL TRIANGLES
//─────────────────────────────────────────────────────────────
plotshape(validBuy, title="Valid Buy", style=shape.triangleup, location=location.belowbar, 
     color=color.green, size=size.small, text="B")
plotshape(validSell, title="Valid Sell", style=shape.triangledown, location=location.abovebar, 
     color=color.red, size=size.small, text="S")

//─────────────────────────────────────────────────────────────
// 5. MARKET ORDER EXECUTION BASED ON SIGNALS
//─────────────────────────────────────────────────────────────
if validBuy
    // Close any short positions.
    strategy.close("Short", comment="")
    // If not already long, enter a market long.
    if strategy.position_size <= 0
        strategy.entry("Long", strategy.long, comment="")
        
if validSell
    // Close any long positions.
    strategy.close("Long", comment="")
    // If not already short, enter a market short.
    if strategy.position_size >= 0
        strategy.entry("Short", strategy.short, comment="")

//─────────────────────────────────────────────────────────────
// 6. TRAILING STOP LOSS FUNCTION
//─────────────────────────────────────────────────────────────
// Inputs for trailing stop settings:
trailBars = input.int(title="Trailing Stop Bars Back", defval=1, minval=1)
trailTF   = input.timeframe(title="Trailing Stop Timeframe", defval="")  // "" = current timeframe

// For long positions, use the low from 'trailBars' bars back on the specified timeframe.
// For short positions, use the high from 'trailBars' bars back.
trailStopLong  = request.security(syminfo.tickerid, trailTF, low[trailBars])
trailStopShort = request.security(syminfo.tickerid, trailTF, high[trailBars])

// Apply trailing stops if a position is open.
if strategy.position_size > 0
    strategy.exit("Trailing Stop Long", from_entry="Long", stop=trailStopLong)
if strategy.position_size < 0
    strategy.exit("Trailing Stop Short", from_entry="Short", stop=trailStopShort)