Стратегия торговли по волновому каналу Дончиана


Дата создания: 2023-11-08 12:31:56 Последнее изменение: 2023-11-08 12:31:56
Копировать: 0 Количество просмотров: 693
1
Подписаться
1617
Подписчики

Стратегия торговли по волновому каналу Дончиана

Обзор

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

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

Стратегия строит каналы, рассчитывая максимальную цену pcmax и минимальную цену pcmin в течение последних () исторических циклов.

Верхняя полоса y = pcmax - (pcmax - pcmin) * (100 - percentDev)/100

Нижняя трасса y = pcmin + (pcmax - pcmin) * percentDev/100

В результате, 13% опрошенных считают, что это неправда.

Когда цена прорывается вверх, создается сигнал long; когда цена прорывается вниз, создается сигнал short.

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

  1. boundup = high > yh определить, пробился ли на рельсы

  2. bounddn = low < yl Определить, был ли взрыв

  3. upsign = sma(bounddn, 2) == 1 Судя по средней линии bounddn, продолжается прорыв вниз

  4. dnsign = sma(boundup, 2) == 1 Продолжается прорыв вверх по трассе, судя по средней линииboundup

  5. exitup = dnsign Прорыв вверх по рельсу дает сигнал равновесия

  6. exitdn = upsign Прорыв по нисходящей трассе дает сигнал о равновесии

  7. if upsign Прорыв нижней полосы производит многосигнал

  8. if dnsign Прорыв вверх по рельсу дает сигнал пуска

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

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

  1. Используйте канал Донцзяна, чтобы определить тенденции, чтобы лучше отследить результаты

  2. При этом устанавливаются сигналы о прибыли и убытка, что позволяет вести торговлю в обоих направлениях

  3. Профилактика ошибочных сделок с помощью фильтрации поровну

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

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

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

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

  2. Сигналы могут быть ошибочными при землетрясении

  3. Прибыль может быть затронута в реальном секторе без учета факторов управления заказами.

  4. Риск чрезмерного размещения позиций на фиксированном рынке без учета факторов управления позициями

  5. Требуется разумное размещение торгового капитала в фиксированном состоянии без учета факторов управления капиталом

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

  1. Оптимизация параметров history и percentDev, чтобы лучше адаптироваться к различным видам

  2. Добавлены фильтры, чтобы предотвратить ошибочные сигналы при колебаниях

  3. Добавление модуля управления позициями, чтобы контролировать долю капитала, занимаемого отдельными позициями

  4. Добавление модуля управления капиталом, ограничивающего долю капитала в общем положении

  5. Добавление функции управления заказами, оптимизация порядка заказов

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

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

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

////////////////////////////////////////////////////////////
//  Copyright by AlexInc v1.0 02/07/2018  @aav_1980
// PriceChannel strategy
// If you find this script helpful, you can also help me by sending donation to 
// BTC 16d9vgFvCmXpLf8FiKY6zsy6pauaCyFnzS
// LTC LQ5emyqNRjdRMqHPHEqREgryUJqmvYhffM
////////////////////////////////////////////////////////////
//@version=3
strategy("AlexInc PriceChannel Str", overlay=false)
history = input(20)
percentDev = input(13)
capital = input(100)

needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usestoploss = input(true, defval = true, title = "Stop Loss")
stoplossmult = input(3.8, defval = 3.8, minval = 1, maxval = 10, title = "Stop loss multiplicator")


fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

bodymin = min( open, close)
bodymax = max(open, close)

pcmax = highest(bodymax, history)
pcmin = lowest(bodymin, history)

yh = ((pcmax - pcmin) / 100 * (100 - percentDev)) + pcmin
yl = ((pcmax - pcmin) / 100 * percentDev) + pcmin

plot(pcmax)
plot(pcmin)
plot(yh)
plot(yl)

//1
bounddn = low < yl ? 1 : 0
boundup = high > yh ? 1 : 0
upsign = sma(bounddn, 2) == 1
dnsign = sma(boundup, 2) == 1
//2
//upsign = crossover(bodymin, yl)
//dnsign = crossunder(bodymax , yh)


exitup = dnsign
exitdn = upsign

lot = strategy.equity / close * capital / 100


xATR = atr(history)
nLoss = usestoploss ? stoplossmult * xATR : na

stop_level_long = 0.0
stop_level_long := nz(stop_level_long[1])

stop_level_short = 0.0
stop_level_short := nz(stop_level_short[1])

pos = strategy.position_size
if pos >0 and pos[1] <= 0 //crossover(pos, 0.5)
    stop_level_long = strategy.position_avg_price - nLoss
if pos < 0 and pos[1] >= 0 //crossunder(pos, -0.5)
    stop_level_short = strategy.position_avg_price + nLoss
if pos == 0    
    stop_level_long = bodymin - nLoss
    stop_level_short = bodymax + nLoss

//plot(bodymax + nLoss, color=red)
//plot(bodymin - nLoss, color=red)
plot(stop_level_long, color=red)
plot(stop_level_short, color=red)

if upsign
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dnsign
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)

if true
    strategy.close_all()


//if strategy.position_size != 0
//    strategy.exit("Exit Long", from_entry = "Long", stop = stop_level_long)
//    strategy.exit("Exit Short", from_entry = "Short", stop = stop_level_short)