Chiến lược này sử dụng Bollinger Bands thích nghi để thiết kế hai loại chiến lược trailing stop và kiểm tra lại chúng một cách có hệ thống trên các khung thời gian.
Tính toán các dải trên và dưới của Dải Bollinger thích nghi, với chiều rộng kênh điều chỉnh.
Chiến lược theo dõi đột phá để mở các vị trí trên các đột phá dải và dừng lại khi giá quay trở lại bên trong dải.
Chiến lược đảo ngược đảo ngược để mở các vị trí khi giá đạt đến các dải và dừng lại khi giá quay trở lại bên trong dải.
Sử dụng chỉ số CCI để hỗ trợ xác định mặt dài / ngắn.
Kiểm tra ngược qua nhiều khung thời gian để xác minh tính khả thi của cả hai chiến lược.
Bollinger Bands trực quan trong việc nắm bắt xu hướng giá.
Hai chiến lược phù hợp với các điều kiện thị trường khác nhau cho sự vững chắc.
CCI giúp xác định hướng dài / ngắn.
Kiểm tra ngược nhiều khung thời gian làm cho kết quả thuyết phục hơn.
Quy tắc chiến lược đơn giản và rõ ràng dễ thực hiện.
Bollinger Bands có thể thất bại trong một số tình huống.
Nguy cơ ngừng sớm hoặc muộn trong cả hai chiến lược.
CCI có thể tạo ra tín hiệu không chính xác.
Hãy cẩn thận xử lý những sai lệch trong backtest.
Tối ưu hóa có nguy cơ quá phù hợp.
Kiểm tra các thông số để tìm kết hợp tối ưu.
Đánh giá việc thêm các bộ lọc với các chỉ số khác.
Tối ưu hóa dừng để giảm rủi ro.
Nghiên cứu các phương pháp thích nghi cho chiều rộng kênh.
Kiểm tra với nhiều biểu tượng và khung thời gian hơn.
Sử dụng máy học để tối ưu hóa các tham số một cách năng động.
Chiến lược này thiết kế hai chiến lược dừng lại dựa trên Bollinger Bands và kiểm tra lại chúng trên nhiều khung thời gian.
/*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")