Эта стратегия использует адаптивные полосы Боллинджера для разработки двух типов стратегий отслеживания остановки и обратного тестирования их систематически в течение временных рамок.
Расчет верхней и нижней полос адаптивных полос Боллинджера с регулируемой шириной канала.
Стратегия отслеживания прорыва для открытия позиций на прорывах диапазона и остановки, когда цена возвращается внутри диапазонов.
Реверсионная стратегия для открытия позиций, когда цена достигает диапазонов, и остановки, когда цена возвращается обратно в диапазоны.
Использовать индикатор CCI для определения длинной/короткой стороны.
Проверка в течение нескольких временных рамок для проверки жизнеспособности обеих стратегий.
Болинджерские полосы интуитивно поддаются определению ценовых тенденций.
Эти две стратегии соответствуют различным рыночным условиям устойчивости.
CCI помогает определить длинный/короткий курс.
Многочасовое обратное тестирование делает результаты более убедительными.
Простые и понятные правила стратегии, которые легко реализовать.
Болинджерские полосы могут потерпеть неудачу в определенных ситуациях.
Риски преждевременного или задержанного прекращения в обеих стратегиях.
CCI может генерировать неправильные сигналы.
Осторожно обращайтесь с предрассудками.
Оптимизация рискует переустановить.
Испытать параметры для поиска оптимальных комбинаций.
Оценить добавление фильтров с другими показателями.
Оптимизируйте остановки для снижения рисков.
Исследование адаптивных методов для ширины канала.
Проверьте с помощью большего количества символов и временных рамок.
Используйте машинное обучение для динамической оптимизации параметров.
Эта стратегия разрабатывает две стратегии последующей остановки на основе полос Боллинджера и проверяет их в нескольких временных рамках.
/*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")