
Adaptive Channel Breakout Strategy (Стратегия адаптивного прорыва канала) - это стратегия тренда, которая отслеживает рыночные ценовые каналы. Она определяет ценовые каналы, рассчитывая максимальные и минимальные цены за определенный период, и посылает торговые сигналы, когда цены прорывают каналы.
Преимущество этой стратегии заключается в том, что она может автоматически адаптироваться к изменениям рынка, фильтровать шум, расширяя каналы, и генерировать торговые сигналы, когда тенденция ясна. Но также существует риск преследования взлетов и падений.
Эта стратегия основана на теории прорыва каналов. Она одновременно рассчитывает максимальные и минимальные цены двух различных циклов (длина входа и длина выхода), образуя каналы.
В частности, стратегия сначала рассчитывает максимальные цены (upper) и минимальные цены (lower) за 20 циклов (длина входа в рынок) для формирования ценового канала. Затем она рассчитывает максимальные цены (sup) и минимальные цены (sdown) за 10 циклов (длина выхода из рынка).
Когда цена пробивает канал, указывающий на то, что тенденция формируется, тогда стратегия посылает торговый сигнал. В то же время, стоп-стоп-лосс также корректируется с изменением цены, таким образом, блокируя прибыль, чтобы избежать потерь.
Основные риски этой стратегии:
В этой стратегии также есть место для оптимизации:
Общая концепция адаптивной стратегии прорыва каналов ясна и обладает высокой жизнеспособностью. Она способна автоматически отслеживать изменения рынка и генерировать торговые сигналы при формировании тренда. При этом устанавливаются два набора циклов каналов и механизм контроля риска сдерживания убытков.
/*backtest
start: 2024-01-29 00:00:00
end: 2024-02-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy("Turtle Trade Channels Strategy", shorttitle="TTCS", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)
length = input(20,"Entry Length", minval=1)
len2=input(10, "Exit Length", minval=1)
lower = lowest(length)
upper = highest(length)
up=highest(high,length)
down=lowest(low,length)
sup=highest(high,len2)
sdown=lowest(low,len2)
K1=barssince(high>=up[1])<=barssince(low<=down[1]) ? down : up
K2=iff(barssince(high>=up[1])<=barssince(low<=down[1]),sdown,sup)
K3=iff(close>K1,down,na)
K4=iff(close<K1,up,na)
buySignal=high==upper[1] or crossover(high,upper[1])
sellSignal = low==lower[1] or crossover(lower[1],low)
buyExit=low==sdown[1] or crossover(sdown[1],low)
sellExit = high==sup[1] or crossover(high,sup[1])
strategy.entry("Buy", strategy.long, when = buySignal and barssince(buySignal) < barssince(sellSignal[1]))
strategy.entry("Sell", strategy.short, when = sellSignal and barssince(sellSignal) < barssince(buySignal[1]))
strategy.exit("Buy Exit", from_entry = "Buy", when = buyExit and barssince(buyExit) < barssince(sellExit[1]))
strategy.exit("Sell Exit", from_entry = "Sell", when = sellExit and barssince(sellExit) < barssince(buyExit[1]))
plot(K1, title="Trend Line", color=color.red, linewidth=2)
e=plot(K2, title="Exit Line", color=color.blue, linewidth=1, style=6)