Chiến lược này được thiết kế dựa trên chỉ số Bollinger Bands để tạo ra một chiến lược giao dịch đột phá năng động. Nó kết hợp các điều kiện của bộ lọc thân nến và bộ lọc màu để tìm kiếm các cơ hội đột phá xung quanh dải dưới Bollinger. Các lối ra dựa trên bộ lọc thân. Chiến lược tự động quản lý kích thước vị trí và rủi ro.
Đầu tiên, tính toán đường cơ sở và dải dưới của Bollinger Bands dựa trên giá thấp:
src = low
basis = sma(src, length)
dev = mult * stdev(src, length)
lower = basis - dev
Trong đó src là giá thấp, chiều dài là thời gian tính toán, cơ sở là đường trung bình động, dev là độ lệch chuẩn và thấp hơn là dải dưới.
mult thường được thiết lập là 2, có nghĩa là dải dưới là một độ lệch chuẩn.
Chiến lược bao gồm hai điều kiện lọc:
Bộ lọc thân nếnSử dụng kích thước cơ thể nbody và trung bình của nó để xác định, chỉ tạo tín hiệu giao dịch khi nbody lớn hơn một nửa của abody.
Bộ lọc màu
Không kéo dài khi nến đóng tích cực (kết thúc > mở).
Tạo tín hiệu dài khi đáp ứng các điều kiện dưới đây:
low < lower // price breaks lower band
close < open or usecol == false // color filter
nbody > abody / 2 or usebod == false // body filter
Khi kích thước cơ thể vượt quá một nửa số trung bình một lần nữa, vị trí gần:
close > open and nbody > abody / 2
Chiến lược tính toán kích thước giao dịch tự động cho sự tăng trưởng theo cấp số nhân của vị trí:
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
Thêm các hạn chế về năm, tháng và ngày để giới hạn giao dịch chỉ trong phạm vi ngày cụ thể:
when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))
Dải dưới Bollinger cung cấp một khu vực hỗ trợ năng động để nắm bắt sự khôi phục sau xu hướng.
Sự kết hợp của thân nến và bộ lọc màu sắc ngăn ngừa các sự đột phá giả hiệu quả.
Kích thước vị trí tăng theo cấp số nhân đến 100% quản lý rủi ro tự động.
Đặt khoảng thời gian giảm rủi ro liên quan đến biến động thị trường trong các giai đoạn cụ thể.
Khi xu hướng tăng mạnh, các dải trung và trên BB có thể di chuyển lên nhanh chóng, gây ra giảm kéo dài.
Kết hợp với các chỉ số xu hướng, dừng chiến lược khi được đánh giá là thị trường tăng để tránh giảm kéo dài.
Sự đột phá có thể thất bại khi rút lại và thử lại băng tần dưới.
Thêm stop loss dưới mức hỗ trợ hoặc thêm logic để phát hiện thử nghiệm lại thất bại để dừng nhanh.
Tối ưu hóa stop loss dưới mức hỗ trợ dựa trên kết quả backtest.
Fine tune bộ lọc cơ thể thời gian lưu trú, bộ lọc màu sắc vv để tìm tối ưu.
Ngưng chiến lược khi được đánh giá là thị trường tăng.
Chiến lược này kết hợp hỗ trợ BB, bộ lọc cơ thể, bộ lọc màu sắc và logic đột phá để nắm bắt các lần khôi phục có xác suất cao.
/*backtest start: 2022-11-14 00:00:00 end: 2023-11-20 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=2 strategy(title = "Noro's Wizard Strategy v1.0", shorttitle = "Wizard str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10) //Settings capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %") length = input(25, defval = 25, minval = 1, maxval = 200, title = "BB Period") usebod = input(false, defval = false, title = "Use Body-Filter") usecol = input(false, defval = false, title = "Use Color-Filter") showar = input(false, defval = false, title = "Show Arrows") fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Bollinger src = low mult = 2 basis = sma(src, length) dev = mult * stdev(src, length) lower = basis - dev plot(lower, color = lime, linewidth = 3, title="Bottom Line") //Body Filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 2 or usebod == false //Signals up1 = low < lower and (close < open or usecol == false) and body exit = close > open and nbody > abody / 2 //Arrows needar = up1 and showar plotarrow(needar ? 1 : na) //Trading lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1] if up1 if strategy.position_size < 0 strategy.close_all() strategy.entry("Long", strategy.long, lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if time > timestamp(toyear, tomonth, today, 23, 59) or exit strategy.close_all()