Chiến lược này kết hợp các chỉ số Bollinger Bands và Fibonacci để tạo ra một phương pháp đa chỉ số. Nó thuộc loại chiến lược chỉ số kết hợp điển hình. Các Bollinger Bands xác định hướng xu hướng và các mức Fibonacci xác định các vùng hỗ trợ và kháng cự chính để tạo ra tín hiệu giao dịch.
Chiến lược dựa trên hai chỉ số chính:
Bollinger Bands
Tính toán các dải trên, giữa và dưới. Giá phá vỡ trên dải dưới là tín hiệu dài, và phá vỡ dưới dải trên là tín hiệu ngắn.
Fibonacci Retracements
Tính toán mức khôi phục 0% và 100% dựa trên mức cao và thấp trong lịch sử.
Logic giao dịch cụ thể là:
Tín hiệu dài: Giá phá vỡ trên dải trên và trên hỗ trợ Fibonacci 0%.
Tín hiệu ngắn: Giá phá vỡ dưới dải dưới, và dưới 100% kháng cự Fibonacci.
Các lối ra là xung quanh dải giữa để lấy lợi nhuận hoặc dừng lỗ.
Các rủi ro có thể được giảm bằng cách:
Chiến lược có thể được cải thiện bằng cách:
Tối ưu hóa các thông số Bollinger Bands
Tìm tỷ lệ tối ưu cho các dải trên/dưới
Tối ưu hóa thời gian khôi phục Fibonacci
Kiểm tra các khoảng thời gian xem lại khác nhau cho các lần truy cập lại
Điều kiện nhập cảnh nới lỏng
Quan sát các mô hình nến trên các đoạn phá vỡ
Cải thiện lối ra
Xem xét các cơ chế ngăn chặn kéo dài
Kiểm tra tham số cụ thể sản phẩm
Các thông số cần điều chỉnh cho các sản phẩm khác nhau
Chiến lược này kết hợp các điểm mạnh của Bollinger Bands và Fibonacci Retracements cho tín hiệu chất lượng cao hơn. Nhưng những thách thức như tối ưu hóa tham số khó có tồn tại. Những cải tiến có thể được thực hiện thông qua điều chỉnh tham số, thư giãn các tiêu chí nhập cảnh, tăng cường lối ra vv để tinh chỉnh chiến lược trong khi vẫn giữ được lợi thế của nó. Sự điều chỉnh liên tục dựa trên kết quả backtest cũng là chìa khóa cho độ bền.
/*backtest start: 2023-09-13 00:00:00 end: 2023-09-20 00:00:00 period: 45m basePeriod: 5m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("Bollinger Bands & Fibonacci Strategy", shorttitle="BB & Fib Strategy", overlay=true) // Initialize position variables var bool long_position = false var bool short_position = false // Bollinger Bands settings length = input.int(20, title="Bollinger Bands Length") src = input(close, title="Source") mult = input.float(2.0, title="Standard Deviation Multiplier") basis = ta.sma(src, length) dev = mult * ta.stdev(src, length) upper_band = basis + dev lower_band = basis - dev // Fibonacci retracement levels fib_0 = input.float(0.0, title="Fibonacci 0% Level", minval=-100, maxval=100) / 100 fib_100 = input.float(1.0, title="Fibonacci 100% Level", minval=-100, maxval=100) / 100 // Plotting Bollinger Bands plot(upper_band, color=color.red, title="Upper Bollinger Band") plot(lower_band, color=color.green, title="Lower Bollinger Band") // Calculate Fibonacci levels fib_range = ta.highest(high, 50) - ta.lowest(low, 50) fib_high = ta.highest(high, 50) - fib_range * fib_0 fib_low = ta.lowest(low, 50) + fib_range * fib_100 // Plot Fibonacci retracement levels plot(fib_high, color=color.blue, title="Fibonacci High") plot(fib_low, color=color.orange, title="Fibonacci Low") // Entry conditions long_condition = ta.crossover(close, upper_band) and low > fib_low short_condition = ta.crossunder(close, lower_band) and high < fib_high // Plot arrows on the chart plotshape(series=long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small) plotshape(series=short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small) // Entry and exit logic if long_condition and not short_position strategy.entry("Long", strategy.long) long_position := true short_position := false if short_condition and not long_position strategy.entry("Short", strategy.short) short_position := true long_position := false // Exit conditions (you can customize these) long_exit_condition = ta.crossunder(close, basis) short_exit_condition = ta.crossover(close, basis) if long_exit_condition strategy.close("Long") long_position := false if short_exit_condition strategy.close("Short") short_position := false