В процессе загрузки ресурсов... загрузка...

Стратегия торговли с использованием полос Боллинджера на несколько временных рамок

Автор:Чао Чжан, Дата: 2023-09-20 15:47:46
Тэги:

Обзор

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

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

  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")




Больше