Стратегия торговли с несколькими таймфреймами, основанная на каналах полос


Дата создания: 2023-09-20 15:47:46 Последнее изменение: 2023-09-20 15:47:46
Копировать: 0 Количество просмотров: 772
1
Подписаться
1617
Подписчики

Обзор

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

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

  1. Вычислить самостоятельно адаптированные верхние и нижние трассы полосы пропускания, ширина пропускания скорректирована с помощью параметров.

  2. Стратегия отслеживания прорыва, открытие позиции после прорыва цены в канале и остановка убытков в канале.

  3. Возвращение к обратной стратегии, открытие позиции, когда цена достигает канала, и остановка, когда цена возвращается внутри канала.

  4. Показатели CCI помогают определить, сколько воздушных линий.

  5. Многоразовые тесты подтверждают, что обе стратегии являются эффективными.

Анализ преимуществ

  1. Например, если вы используете какую-либо из этих функций, вы можете увидеть, что она работает, но она не работает.

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

  3. Показатели CCI помогают определить, что в доме слишком много свободных мест.

  4. Многократные временные рамки позволяют сделать результаты более убедительными.

  5. Правила стратегии простые, понятные и легко применяемые.

Анализ рисков

  1. Причины, по которым может произойти сбой в работе канатных дорожек

  2. В обоих случаях существует риск преждевременного или позднего прекращения деятельности.

  3. Показатели CCI могут подавать ошибочные сигналы.

  4. Некоторые из них не имеют аналогов.

  5. Возможно, параметры оптимизированы сверх соответствия.

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

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

  2. Оценка дополнительных показателей для фильтрации сигналов.

  3. Оптимизация стратегий по устранению убытков, снижение риска.

  4. Исследование методов расчета ширины каналов.

  5. Проверка на большем количестве сортов и циклов.

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

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

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

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

//@version=4
strategy(title = "Underworld Hunter", overlay=true)

len = input(75, minval=1, title="Length")
src = input(close, title="Source")
basis = 0.0
basis := na(basis[1]) ? sma(src, len) : ema(ema(ema(src,len),len),len)

mult = input(1.9, minval=0.001, maxval=50, title="Deviation")
dev = mult * stdev(src, len)
upper = basis + dev
lower = basis - dev

//CCI calculation and inputs

lengthcci = input(20, minval=1, title="Period for CCI")
ma = sma(close, lengthcci)
ccivalue = (src - ma) / (0.015 * dev(src, lengthcci))

//CCI plotting

cciover0 = ccivalue >= 100 and ccivalue <= 120
cciover1 = ccivalue > 120 and ccivalue <= 140
cciover2 = ccivalue > 140 and ccivalue <= 160
cciover3 = ccivalue > 160 and ccivalue <= 180
cciover4 = ccivalue > 180

cciunder0 = ccivalue <= -100 and ccivalue >= -120
cciunder1 = ccivalue <= -120 and ccivalue > -140
cciunder2 = ccivalue <= -140 and ccivalue > -160
cciunder3 = ccivalue <= -160 and ccivalue > -180
cciunder4 = ccivalue <= -180

plotshape(cciover0, title="CCIO0", location=location.abovebar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder0, title="CCIU0", location=location.belowbar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover1, title="CCIO1", location=location.abovebar, color=#ffff00, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder1, title="CCIU1", location=location.belowbar, color=#ffff00, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover2, title="CCIO2", location=location.abovebar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder2, title="CCIU2", location=location.belowbar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover3, title="CCIO3", location=location.abovebar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder3, title="CCIU3", location=location.belowbar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover4, title="CCIO4", location=location.abovebar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder4, title="CCIU4", location=location.belowbar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)

//plotting

plot(upper, title="Upper shadow", color=color.black, transp = 30, linewidth = 4)
plot(upper, title="Upper line", color=#FF2E00, transp = 0, linewidth = 2)
plot(lower, title="Lower shadow", color=color.black, transp = 30, linewidth = 4)
plot(lower, title="Lower line", color=#FF2E00, transp = 0, linewidth = 2)
plot(basis, title="Basic line", color=color.red, transp = 50, linewidth = 2)

mean = input(title="Test Reverse to the Mean instead", type=input.bool, defval=false)
test = input(title="Enable testing", type=input.bool, defval=true)

ordersize=floor(50000/close)

if(close>upper and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Up", strategy.long, ordersize)
if (close<upper and close[1]<upper and close[2]<upper)
    strategy.close("Hunt Up", qty_percent = 100, comment = "Hunt End")

if(close<lower and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Down", strategy.short, ordersize)
if (close>lower and close[1]>lower and close[2]>lower)
    strategy.close("Hunt Down", qty_percent = 100, comment = "Hunt End")

//bounce of bands

if(close>upper and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Down", strategy.short, ordersize)
if (close<upper and close[1]<upper and close[2]<upper and close>high[1])
    strategy.close("Sneak Down", qty_percent = 100, comment = "SneakEnd")

if(close<lower and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Up", strategy.long, ordersize)
if (close>lower and close[1]>lower and close[2]>lower and close<low[1])
    strategy.close("Sneak Up", qty_percent = 100, comment = "Sneak End")