Chiến lược này là một chiến lược giao dịch định lượng dựa trên chỉ số Bollinger Bands và chỉ số chỉ số sức mạnh tương đối (RSI). Chiến lược này sử dụng các phương pháp học máy để kiểm tra lại và tối ưu hóa các tham số trong gần 1 năm dữ liệu lịch sử bằng ngôn ngữ Python, tìm ra sự kết hợp tham số tối ưu.
Các tín hiệu giao dịch của chiến lược này đến từ sự đánh giá kết hợp của hai Bollinger Bands và chỉ số RSI. Trong số đó, chỉ số Bollinger Bands là kênh biến động được tính dựa trên độ lệch chuẩn giá. Nó tạo ra các tín hiệu giao dịch khi giá tiếp cận hoặc chạm vào kênh. Chỉ số RSI đánh giá tình huống mua quá mức và bán quá mức của giá.
Cụ thể, tín hiệu mua được tạo ra khi giá đóng dưới đường ray dưới 1.0 độ lệch chuẩn và RSI lớn hơn 42 cùng một lúc. Một tín hiệu bán được tạo ra khi giá đóng trên đường ray trên 1.0 độ lệch chuẩn và RSI lớn hơn 70 cùng một lúc. Ngoài ra, chiến lược này cũng đặt ra hai bộ tham số BB và RSI, được sử dụng cho các vị trí đóng vào và dừng lỗ tương ứng. Các tham số này là các giá trị tối ưu thu được thông qua kiểm tra ngược và học máy rộng rãi.
Lợi thế lớn nhất của chiến lược này là độ chính xác của các thông số. Thông qua các phương pháp học máy, mỗi thông số được thu được thông qua kiểm tra sau toàn diện để đạt được tỷ lệ Sharpe tốt nhất. Điều này đảm bảo cả tỷ lệ lợi nhuận của chiến lược và kiểm soát rủi ro. Ngoài ra, sự kết hợp của các chỉ số kép cũng cải thiện độ chính xác và tỷ lệ thắng của tín hiệu.
Rủi ro chính của chiến lược này đến từ việc thiết lập điểm dừng lỗ. Nếu điểm dừng lỗ được đặt quá lớn, nó sẽ không kiểm soát hiệu quả lỗ. Ngoài ra, nếu điểm dừng lỗ không tính toán đúng các chi phí giao dịch khác như hoa hồng và trượt, nó cũng sẽ làm tăng rủi ro. Để giảm rủi ro, nên điều chỉnh tham số kích thước dừng lỗ để giảm tần suất giao dịch, trong khi tính toán vị trí dừng lỗ hợp lý.
Bạn có thể thử thay đổi các thông số chiều dài của Bollinger Bands, hoặc điều chỉnh ngưỡng mua quá mức và bán quá mức của RSI. Bạn cũng có thể thử giới thiệu các chỉ số khác để xây dựng một sự kết hợp đa chỉ số. Điều này có thể làm tăng không gian lợi nhuận và sự ổn định của chiến lược.
Chiến lược này kết hợp hai chỉ số BB và chỉ số RSI, và có được các thông số tối ưu thông qua các phương pháp học máy để đạt được lợi nhuận cao và mức độ rủi ro có thể kiểm soát được. Nó có lợi thế của việc kết hợp đánh giá chỉ số và tối ưu hóa tham số. Với sự cải thiện liên tục, chiến lược này có tiềm năng trở thành một chiến lược giao dịch định lượng tuyệt vời.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // @version=4 // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © Bunghole 2020 strategy(overlay=true, shorttitle="Flawless Victory Strategy" ) // Stoploss and Profits Inputs v1 = input(true, title="Version 1 - Doesn't Use SL/TP") v2 = input(false, title="Version 2 - Uses SL/TP") stoploss_input = input(6.604, title='Stop Loss %', type=input.float, minval=0.01)/100 takeprofit_input = input(2.328, title='Take Profit %', type=input.float, minval=0.01)/100 stoploss_level = strategy.position_avg_price * (1 - stoploss_input) takeprofit_level = strategy.position_avg_price * (1 + takeprofit_input) //SL & TP Chart Plots plot(v2 and stoploss_input and stoploss_level ? stoploss_level: na, color=color.red, style=plot.style_linebr, linewidth=2, title="Stoploss") plot(v2 and takeprofit_input ? takeprofit_level: na, color=color.green, style=plot.style_linebr, linewidth=2, title="Profit") // Bollinger Bands 1 length = 20 src1 = close mult = 1.0 basis = sma(src1, length) dev = mult * stdev(src1, length) upper = basis + dev lower = basis - dev // Bollinger Bands 2 length2 = 17 src2 = close mult2 = 1.0 basis2 = sma(src1, length2) dev2 = mult2 * stdev(src2, length2) upper2 = basis2 + dev2 lower2 = basis2 - dev2 // RSI len = 14 src = close up = rma(max(change(src), 0), len) down = rma(-min(change(src), 0), len) rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - 100 / (1 + up / down) // Strategy Parameters RSILL= 42 RSIUL= 70 RSILL2= 42 RSIUL2= 76 rsiBuySignal = rsi > RSILL rsiSellSignal = rsi > RSIUL rsiBuySignal2 = rsi > RSILL2 rsiSellSignal2 = rsi > RSIUL2 BBBuySignal = src < lower BBSellSignal = src > upper BBBuySignal2 = src2 < lower2 BBSellSignal2 = src2 > upper2 // Strategy Long Signals Buy = rsiBuySignal and BBBuySignal Sell = rsiSellSignal and BBSellSignal Buy2 = rsiBuySignal2 and BBBuySignal2 Sell2 = rsiSellSignal2 and BBSellSignal2 if v1 == true strategy.entry("Long", strategy.long, when = Buy, alert_message = "v1 - Buy Signal!") strategy.close("Long", when = Sell, alert_message = "v1 - Sell Signal!") if v2 == true strategy.entry("Long", strategy.long, when = Buy2, alert_message = "v2 - Buy Signal!") strategy.close("Long", when = Sell2, alert_message = "v2 - Sell Signal!") strategy.exit("Stoploss/TP", "Long", stop = stoploss_level, limit = takeprofit_level)