Chiến lược này dựa trên khái niệm Bollinger Bands, thiết lập các đường ray phía trên và phía dưới cho kênh giá và sử dụng chúng để đánh giá xu hướng và tạo tín hiệu giao dịch. Cụ thể, nó tính toán độ lệch tuyệt đối trung bình của giá như băng thông kênh. Đường ray giữa của kênh là trung bình di chuyển đơn giản của giá, và các đường ray phía trên và phía dưới là đường ray phía giữa cộng hoặc trừ 1 hoặc 2 lần băng thông kênh. Khi giá vượt qua đường ray phía trên, đi dài. Khi nó vượt qua đường ray phía dưới, đi ngắn.
Các điểm chính của chiến lược này bao gồm:
Tính toán đường ray giữa của giá, đó là mức trung bình di chuyển đơn giản của giá.
Tính toán trung bình di chuyển đơn giản của độ lệch tuyệt đối của giá dưới dạng băng thông kênh.
Xác định đường ray trên và dưới theo đường ray giữa và băng thông. Đường ray trên là đường ray giữa cộng với 1 hoặc 2 lần băng thông. Đường ray dưới là đường ray giữa trừ 1 hoặc 2 lần băng thông.
Tính toán chỉ số đánh giá xu hướng cho dài và ngắn. Khi giá trên đường ray trên 2, nó dài. Khi giá dưới đường ray dưới 2, nó ngắn.
Tạo tín hiệu giao dịch. Khi giá vượt qua trên đường ray trên 2, đi dài. Khi nó vượt qua dưới đường ray dưới 2, đi ngắn.
Đặt đường dừng lỗ. Đường dừng lỗ cho các lệnh dài là đường ray dưới 1, và cho các lệnh ngắn là đường ray trên 1.
Tính toán kích thước vị trí theo các yêu cầu quản lý vốn.
Chiến lược này tích hợp các ý tưởng sử dụng đường trung bình động để đánh giá xu hướng, Bollinger Bands để đánh giá quá mua và quá bán, và breakout để đảo ngược.
Những lợi thế chính của chiến lược này là:
Hệ thống hai đường ray có thể đánh giá tốt hơn sức mạnh của xu hướng.
Bollinger Bands có chức năng hồi quy mạnh mẽ để tránh hiệu quả các sự đột phá sai.
Sự khác biệt giữa hai đường ray kết hợp với sự hồi quy của Bollinger Bands tạo thành các tín hiệu giao dịch tương đối ổn định.
Có một logic stop loss/exit rõ ràng để kiểm soát rủi ro.
Quy mô vị trí tuân theo các yêu cầu quản lý vốn, tránh đòn bẩy siêu.
Ý tưởng chiến lược là rõ ràng và dễ hiểu và tối ưu hóa.
Cài đặt tham số linh hoạt làm cho nó thích nghi với các thị trường khác nhau.
Chiến lược này cũng có một số rủi ro:
Các thông số Bollinger Bands không chính xác có thể gây ra hiệu ứng bỏ rơi, không theo dõi hiệu quả giá.
Sự khác biệt giữa hai đường ray không thể tránh hoàn toàn các phán đoán xu hướng sai lầm.
Nó có thể tạo ra nhiều tín hiệu không hợp lệ hơn trong các thị trường giới hạn phạm vi.
Có thể xảy ra tổn thất trong các tình huống thoát sai.
Có một số thời gian trễ, có thể thiếu điểm xoay vòng.
Tỷ lệ rủi ro / phần thưởng bị giới hạn bởi điểm dừng lỗ, không thể theo đuổi xu hướng vô hạn.
Các biện pháp quản lý rủi ro tương ứng:
Tối ưu hóa các tham số để làm cho Bollinger Bands thích nghi với các chu kỳ khác nhau.
Kết hợp các chỉ số khác để xác nhận để tránh đánh giá sai.
Giảm kích thước vị trí để kiểm soát lỗ đơn.
Tối ưu hóa điểm dừng lỗ để đảm bảo tỷ lệ rủi ro / phần thưởng.
Giảm chu kỳ một cách thích hợp để giảm sự chậm trễ.
Kiểm soát rủi ro nên mạnh mẽ, không theo đuổi không giới hạn.
Chiến lược có thể được tối ưu hóa theo các hướng sau:
Tối ưu hóa các thông số Bollinger Bands để theo dõi giá tốt hơn.
Hãy thử các đường trung bình động khác nhau như EMA, DWMA, vv.
Thêm lọc xu hướng để tránh giao dịch trên các thị trường giới hạn trong phạm vi.
Thêm các phương pháp thoát mạnh mẽ để nắm bắt nhiều lợi nhuận xu hướng hơn.
Thiết lập nhiều khung thời gian cho sự kết hợp, phù hợp với các điều kiện thị trường khác nhau.
Thêm các điều kiện bổ sung như tăng âm lượng để tránh sự đột phá sai.
Hãy xem xét các Bollinger Band ngược, bán dải trên, mua dải dưới.
Thực hiện tối ưu hóa tham số cho kết hợp tham số tốt nhất.
Ý tưởng tổng thể của chiến lược này là rõ ràng và ổn định. Ngoài ra còn có chỗ để cải thiện thông qua tối ưu hóa tham số, tăng cường logic, quản lý rủi ro vv để tinh chỉnh thêm nó thành một chiến lược giao dịch định lượng rất thực tế. Chiến lược cung cấp một tài liệu tham khảo tốt cho người mới bắt đầu giao dịch định lượng.
/*backtest start: 2022-11-09 00:00:00 end: 2023-11-15 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © noro //@version=4 strategy(title = "Noro's Bands Strategy", shorttitle = "Bands", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1) //Sattings needlong = input(true, defval = true, title = "Long") needshort = input(true, defval = true, title = "Short") lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") len = input(20, defval = 20, minval = 1, maxval = 1000, title = "Length") src = input(ohlc4, title = "Source") showbb = input(true, title = "Show Bands") showof = input(true, title = "Show Offset") showbg = input(false, title = "Show Background") 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") //PriceChannel lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 //Distance dist = abs(src - center) distsma = sma(dist, len) hd = center + distsma ld = center - distsma hd2 = center + distsma * 2 ld2 = center - distsma * 2 //Trend trend = 0 trend := high > hd2 ? 1 : low < ld2 ? -1 : trend[1] bgcol = showbg == false ? na : trend == 1 ? color.lime : color.red bgcolor(bgcol, transp = 70) //Lines colo = showbb == false ? na : color.black offset = showof ? 1 : 0 plot(hd2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 2") plot(hd, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 1") plot(center, color = colo, linewidth = 1, transp = 0, offset = offset, title = "center") plot(ld, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 1") plot(ld2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 2") //Trading size = strategy.position_size needstop = needlong == false or needshort == false truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59) lot = 0.0 lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1] if distsma > 0 strategy.entry("Long", strategy.long, lot, stop = hd2, when = truetime and needlong) strategy.entry("Short", strategy.short, lot, stop = ld2, when = truetime and needshort) sl = size > 0 ? ld2 : size < 0 ? hd2 : na if size > 0 and needstop strategy.exit("Stop Long", "Long", stop = sl) if size < 0 and needstop strategy.exit("Stop Short", "Short", stop = sl) if time > timestamp(toyear, tomonth, today, 23, 59) strategy.close_all() strategy.cancel("Long") strategy.cancel("Short")