Chiến lược này dựa trên chỉ số Bollinger Bands. Nó đi dài khi giá phá vỡ trên dải dưới và đóng vị trí khi giá chạm vào dải trên. Chiến lược sử dụng nguyên tắc kiềm chế của Bollinger Bands để theo dõi sự đột phá giá bất thường để mua thấp và bán cao.
Tính toán SMA dải giữa như trung bình di chuyển đơn giản của giá đóng gần đây.
Tính toán độ lệch chuẩn StdDev để phản ánh phạm vi biến động giá.
Thêm độ dịch chuyển trên của độ lệch chuẩn vào dải giữa SMA để có dải trên.
Trừ lệch chuẩn thấp hơn so với dải giữa SMA để có dải thấp hơn.
Đi dài khi giá đóng phá vỡ trên dải dưới từ dưới lên.
Đóng vị trí khi giá chạm vào dải trên, vì giá được coi là bất thường.
Lợi thế lớn nhất của chiến lược này là sử dụng các tính chất thống kê của Bollinger Bands để theo dõi hiệu quả biến động thị trường bất thường và nắm bắt xu hướng.
Bollinger Bands dải trên và dưới có thể tự động thích nghi với biến động thị trường.
Các tín hiệu đột nhập sẽ đáng tin cậy hơn.
Chuyển đổi theo nghĩa là hợp lý để kiếm lợi nhuận.
Không gian điều chỉnh tham số khổng lồ để điều chỉnh cho các thị trường khác nhau.
Có thể nắm bắt xu hướng trung và dài hạn và cũng được sử dụng trong ngắn hạn.
Những rủi ro tiềm ẩn của chiến lược này chủ yếu là:
Hiệu suất kém của Bollinger Bands trong thị trường giới hạn phạm vi, tránh nhập sai.
Các tín hiệu đột phá có thể là những đột phá sai, cần phải có sự phán đoán thận trọng.
Lợi nhuận lấy vị trí là quá lý tưởng, có thể được tối ưu hóa để hành động giá thực tế.
Cài đặt tham số không chính xác có thể dẫn đến giao dịch quá mức hoặc quá bảo thủ.
Thời gian kiểm tra ngược cần phải đủ dài để tránh phù hợp đường cong.
Các biện pháp quản lý rủi ro tương ứng:
Thêm các chỉ số khối lượng giao dịch vào các tín hiệu lọc.
Tối ưu hóa các thông số và dữ liệu thử nghiệm từ các thị trường khác nhau.
Thêm mức dừng lỗ, mức lợi nhuận.
Đánh giá sự khác biệt tín hiệu, tránh theo đuổi mức cao và bán mức thấp.
Chiến lược có thể được tối ưu hóa trong các khía cạnh sau:
Hãy thử các kết hợp khác nhau của các thông số Bollinger Bands để tìm ra tối ưu.
Thêm MA, MACD vv để lọc tín hiệu đột phá.
Áp dụng các thuật toán học máy để tối ưu hóa các thông số Bollinger.
Đánh giá sức mạnh của sự đột phá và điều chỉnh kích thước vị trí.
Kiểm tra lại thời gian dài hơn để kiểm tra sự ổn định.
Thêm các cơ chế dừng lỗ để kiểm soát rủi ro.
Tóm lại, chiến lược Bollinger Bands là một chiến lược theo xu hướng chung đáng tin cậy. Nó có thể nắm bắt hiệu quả các biến động giá bất thường. Nhưng chúng ta cũng nên lưu ý sự lệch của nó so với giá thực tế và liên tục tối ưu hóa các thông số. Nếu được sử dụng cho giao dịch trực tiếp, quản lý rủi ro nghiêm ngặt là điều bắt buộc để kiểm soát lỗ trên mỗi giao dịch.
/*backtest start: 2023-09-11 00:00:00 end: 2023-09-12 04:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="BB training No Repainting (OTS Mode)", overlay=true) // Strategy Rules: // 1. Enter trade when price crosses above the lower band // 2. Exit trade when price touches the upper band // // Chart Properties testStartYear = input(2010, "Backtest Start Year") testStartMonth = input(01, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear, testStartMonth, testStartDay, 0, 0) testStopYear = input(2030, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(30, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear, testStopMonth, testStopDay, 0, 0) // A switch to control background coloring of the test period testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true) testPeriodBackgroundColor = testPeriodBackground and time >= testPeriodStart and time <= testPeriodStop ? #6c6f6c : na bgcolor(testPeriodBackgroundColor, transp=97) // User provided values smaLength = input(title="SMA Length", type=input.integer, defval=20) // Middle band period length (moving average) stdLength = input(title="StdDev Length", type=input.integer, defval=20) // Range to apply bands to ubOffset = input(title="Upper Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviations above MA lbOffset = input(title="Lower Band Offset", type=input.float, defval=2.0, step=0.5) // Number of standard deviation below MA testPeriod() => time >= testPeriodStart and time <= testPeriodStop ? true : false smaValue = sma(close, smaLength) // Middle band stdDev = stdev(close, stdLength) upperBand = smaValue + stdDev * ubOffset // Top band lowerBand = smaValue - stdDev * lbOffset // Bottom band // Plot bands to chart plot(series=smaValue, title="SMA", color=color.green) plot(series=upperBand, title="UB", color=color.blue, linewidth=2) plot(series=lowerBand, title="LB", color=color.blue, linewidth=2) longCondition = (crossover(close, lowerBand)) closeLongCondition = (close >= upperBand) if (longCondition and testPeriod()) strategy.entry(id="CALL", long=true) strategy.close(id="CALL", when=closeLongCondition)