Стратегия отслеживания трендов на Дончианском канале

Автор:Чао Чжан, Дата: 2023-11-06 15:52:56
Тэги:

img

Обзор

Стратегия отслеживания трендов на Дончианском канале - это стратегия отслеживания трендов, основанная на индикаторе Дончианского канала.

Логика стратегии

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

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

Для коротких позиций открывать короткие позиции, когда цена проходит ниже нижней полосы Дончианского канала; закрывать короткие позиции, когда цена проходит выше верхней полосы.

Стратегия также включает в себя индикатор ATR для установки механизма выхода стоп-лосса.

В частности, длинный стоп-лосс - это цена входа минус значение стоп-лосса ATR; короткий стоп-лосс - это цена входа плюс значение стоп-лосса ATR.

В стратегии также отображаются верхние и нижние полосы Дончианского канала и линия остановки ATR, чтобы сформировать полную торговую систему.

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

  • Используйте канал Дончиана для определения направления тренда, с некоторыми возможностями отслеживания тренда.

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

  • Механизм стоп-лосса с ATR может эффективно контролировать риски.

  • Длинные и короткие правила торговли просты и понятны, подходят для начинающих.

  • Структура кода ясна и легко понять и изменить.

Риски

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

  • Неправильное установление диапазона остановочных потерь ATR может привести к слишком широкому или слишком чувствительному остановочным потерям.

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

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

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

Возможности для расширения

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

  • Попробуйте различные коэффициенты ATR, чтобы найти оптимальный диапазон стоп-потери.

  • Попробуйте ввести отслеживание стоп-лосса на вершине ATR стоп-лосса, чтобы зафиксировать прибыль.

  • Корректировка коэффициента длинной/короткой позиции на основе рыночных условий.

  • Испытать прочность параметров на различных продуктах для поиска общих параметров.

  • Исследование, включающее MACD и другие фильтры для улучшения стабильности.

  • Испытать адаптивность параметров в различных условиях стоимости торговли.

Резюме

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


/*backtest
start: 2022-10-30 00:00:00
end: 2023-11-05 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/
// © kriswaters

//@version=4
strategy("Donchian Channels Strategy by KrisWaters", overlay=true ) 

// Date filter
FromDay   = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromYear  = input(defval = 2017, title = "From Year", minval = 1900)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToMonth   = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToYear    = input(defval = 9999, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// Strategy Settings
canEnterLong = input(true, title="Can Enter Long Position")
canEnterShort = input(false, title="Can Enter Short Position")

showLongChannel = input(true, title="Show Donchian Long Channels")
showShortChannel = input(false , title="Show Donchian Short Channels")

useAtrAsStopRule = input(false, title="Enable ATR Stop Rule") 

// DonCcian Channel Lengths
longUpperLength = input(20, minval=1)
longLowerLength = input(10, minval=1)

shortUpperLength = input(10, minval=1)
shortLowerLength = input(20, minval=1)

// Donchian indicator calculations
longUpperValue = highest(high,longUpperLength)
longLowerValue = lowest(low,longLowerLength)

shortUpperValue = highest(high,shortUpperLength)
shortLowerValue = lowest(low,shortLowerLength)

// Plot Donchian Channels
uLong = plot(showLongChannel ? longUpperValue : na, color=color.green, offset=1)
lLong = plot(showLongChannel ? longLowerValue : na, color=color.green, offset=1)

uShort = plot(showShortChannel ? shortUpperValue : na, color=color.red, offset=1)
lShort = plot(showShortChannel ? shortLowerValue : na, color=color.red, offset=1)

// Styling
fill(uLong,lLong, color=color.green, transp=95, title="Long Arkaplan")
fill(uShort,lShort, color=color.red, transp=95, title="Short Arkaplan")

// Stop-loss value calculations
atrMultiplier = 2.0
atrValue = atr(20)
longStopValue = open - (atrMultiplier*atrValue)
shortStopValue = open + (atrMultiplier*atrValue)

// Plot stop-loss line
plot(useAtrAsStopRule ? longStopValue : na, color=color.red, linewidth=2, offset=1)
plot(useAtrAsStopRule ? shortStopValue : na, color=color.red, linewidth=2, offset=1)

// Long and Short Position Rules
if canEnterLong and na(longUpperValue) != true and na(longLowerValue) != true and window()
    strategy.entry("Long", true, stop=longUpperValue)
    strategy.exit("Long Exit", "Long", stop=useAtrAsStopRule ? max(longLowerValue,longStopValue) : longLowerValue)
    
if canEnterShort and na(shortUpperValue) != true and na(shortLowerValue) != true and window()
    strategy.entry("Short", false, stop=shortLowerValue)
    strategy.exit("Short Exit", "Short", stop=useAtrAsStopRule ? min(shortUpperValue,shortStopValue) : shortUpperValue)
    


Больше