
Тренд-следящая стратегия “Доньчжэнь каналы” - это стратегия отслеживания трендов, основанная на индикаторе “Доньчжэнь каналы”. Эта стратегия используется для определения направления тренда и осуществления торговли, основанной на отслеживании тренда, путем расчета максимумов и минимумов в разные периоды, формируя верхние, нижние и средние трейлы.
В этой стратегии сначала устанавливается диапазон времени отсчета, а затем определяются правила открытия позиций с большим количеством голов и пустыми головами.
Для многоголовых позиций, когда цены находятся на верхнем полюсе торгового коридора, проводится многоголовое открытие позиции; когда цены находятся на нижнем полюсе торгового коридора, проводится многоголовое выравнивание позиции.
В случае с пустыми позициями, открытие позиции с пустыми позициями происходит, когда цена пересекает нижнюю траекторию Доньцзяна; открытие позиции с пустыми позициями происходит, когда цена пересекает верхнюю траекторию.
Также в стратегии введены показатели ATR для установления механизма выхода из убытков.
В частности, многоголовый стоп - это цена открытия позиции за вычетом ATR-стоп; пустой стоп - это цена открытия позиции плюс ATR-стоп.
Эта стратегия одновременно отображает как верхнюю, так и нижнюю полосы в коридоре Донцзяна, а также линию остановки ATR, формируя полную торговую систему.
Используя канал Тунь Чжань для определения направления тенденции, имеет определенную способность отслеживать тенденции.
Параметры Smoother в канале Донцзяна регулируются, и их можно оптимизировать для поиска оптимальных комбинаций.
В сочетании с ATR-индикаторами установлены механизмы остановки убытков, которые позволяют эффективно контролировать риск.
Правила многооборотного трейдинга понятны и подходят для начинающих.
Код имеет четкую структуру, его легко понять и использовать для вторичной разработки.
В случае с ценовыми колебаниями в пределах свертываемого диапазона существует определенный риск ошибочной сделки.
Неправильно настроенный диапазон ATR может привести к слишком широкому или слишком чувствительному ATR.
Позиции с большим количеством свободных позиций могут быть слишком концентрированы, поэтому необходимо установить правила управления позициями.
Требуется проверка применимости к торговым сортам, параметры для разных сортов требуют независимой оптимизации.
Также необходимо учитывать транзакционные издержки, которые требуют корректировки в условиях высокой стоимости.
Оптимизация параметров цикла каналов в канале Донцзянь, поиск оптимального сочетания параметров.
Попробуйте различные настройки ATR, чтобы найти оптимальный предел убытков.
Попытка закрепить прибыль с помощью мобильных стоп, основанных на ATR.
Пропорции позиций с многочисленными пустыми головами должны быть скорректированы в соответствии с рыночными условиями.
Тестирование жизнестойкости параметров различных сортов, поиск общего сочетания параметров.
Исследование внедрения фильтров, таких как индикатор громкоговорителя, для повышения стабильности стратегии.
Приспособленность к различным параметрам тестирования в условиях затрат на транзакции.
В целом, стратегия является относительно простой стратегией отслеживания тенденций, основанной на применении каналов Доньчжана. Преимущество стратегии заключается в том, что она проста и понятна, подходит для обучения, но все же требует оптимизации в зависимости от параметров и риска.
/*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)