Количественная торговая стратегия Дончиана, основанная на прорыве ценового канала


Дата создания: 2023-12-08 11:00:05 Последнее изменение: 2023-12-08 11:00:05
Копировать: 0 Количество просмотров: 655
1
Подписаться
1621
Подписчики

Количественная торговая стратегия Дончиана, основанная на прорыве ценового канала

Обзор

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

Принципы

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

Верхняя линия = наивысшая цена за последние n циклов Нижняя траектория = минимальная цена за последние n циклов

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

Конкретная логика сделки заключается в следующем:

  1. Нарисуйте на трассе туннель Донцзянь с максимальной ценой за n циклов
  2. Когда цена закрытия выходит из строя, нужно делать дополнительный вход.
  3. Стоп-стоп для закрытия цены, чтобы вернуться к нижней полосе или установить остановку убытка

Преимущества

Эта стратегия имеет следующие преимущества:

  1. Стратегическая концепция ясна, легко понятна и реализуема
  2. Индикаторы Дончжана достаточно зрелые и надежные, чтобы легко определить направление тренда
  3. Автоматическое распознавание маршрута, без необходимости оценивать движение
  4. Настраиваемые параметры, адаптивность
  5. Включает в себя механизм стоп-лосса, который ограничивает потери.

Риск

Однако эта стратегия также несет в себе некоторые риски:

  1. В результате прорыва в канале Тоньцзян могут возникнуть ненужные убытки
  2. Неправильная стоп-позиция может увеличить потери
  3. Приближаясь к проходу, следует обратить внимание на риск поворота.
  4. Неправильные параметры (например, длина цикла) могут повлиять на эффективность стратегии.

Решение проблемы:

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

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

Эта стратегия также может быть оптимизирована в следующих областях:

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

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

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

Исходный код стратегии
/*backtest
start: 2022-12-07 00:00:00
end: 2023-12-07 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Giovanni_Trombetta

// Strategy to capture price channel breakouts

//@version=4
strategy("ChannelsBreakout", max_bars_back=50, overlay=true)

instrument = input(1, title = "Select 1: Stock/Forex, 2: Future")
money = input(10000, title = "Money for each trade")
backtest_start = input(2000, "Insert first year to backtest")
period = input(50, title = "Period in bars of Donchian Channel")
monetary_stoploss = input(1000, title = "Monetary Stop Loss")

quantity = if instrument != 1 
    1
else
    int(money / close)
    
upBarrier = highest(high,period)
downBarrier = lowest(low,period)
up = highest(high,period / 4)
down = lowest(low,period / 4)

plot(upBarrier, color=color.green, linewidth=2)
plot(downBarrier, color=color.red, linewidth=2)
plot(up, color=color.lime, linewidth=1)
plot(down, color=color.orange, linewidth=2)

longCondition = crossover(close, upBarrier[1]) and year >= backtest_start

if (longCondition)
    strategy.entry("Long", strategy.long, quantity, when = strategy.position_size == 0)

closeCondition = crossunder(close, down[1]) or down < down[1]

if (closeCondition)
    strategy.close("Long", comment = "Trailing")
    
stop_level = strategy.position_avg_price - monetary_stoploss / strategy.position_size
strategy.exit("StopLoss", from_entry = "Long", stop = stop_level)
plot(stop_level, color=color.yellow, linewidth=2)

// l = label.new(bar_index, na,
//   text="PineScript Code", color= color.lime, textcolor = color.white,
//   style=label.style_labelup, yloc=yloc.belowbar, size=size.normal)
// label.delete(l[1])