
Chiến lược này là chiến lược giao dịch định lượng dựa trên chỉ số Bollinger Bands và chỉ số tương đối mạnh (RSI). Chiến lược này sử dụng phương pháp học máy, thông qua ngôn ngữ Python để kiểm tra lại và tối ưu hóa dữ liệu lịch sử gần 1 năm để tìm ra các tham số tối ưu nhất.
Các tín hiệu giao dịch của chiến lược này xuất phát từ phán đoán tổng hợp của hai Bollinger Bands và chỉ số RSI. Trong đó, chỉ số Bollinger Bands là kênh biến động được tính dựa trên dải chênh lệch tiêu chuẩn của giá.
Cụ thể, một tín hiệu mua sẽ được tạo ra khi giá đóng cửa xuống dưới 1.0 độ lệch tiêu chuẩn và RSI lớn hơn 42. Ngoài ra, chiến lược này cũng đặt hai nhóm tham số BB và RSI để vào và dừng lỗ. Các tham số này là các giá trị tối ưu được thu được thông qua việc kiểm tra lại và học máy rất nhiều.
Lợi thế lớn nhất của chiến lược này là độ chính xác của các tham số. Bằng phương pháp học máy, các tham số được đo lại toàn diện để có tỷ lệ Sharpe tốt nhất. Điều này đảm bảo lợi nhuận của chiến lược và kiểm soát rủi ro. Ngoài ra, kết hợp hai chỉ số cũng làm tăng độ chính xác và tỷ lệ thắng của tín hiệu.
Rủi ro của chiến lược này chủ yếu đến từ thiết lập điểm dừng lỗ. Nếu thiết lập điểm dừng lỗ quá lớn, bạn không thể kiểm soát tổn thất một cách hiệu quả. Ngoài ra, nếu điểm dừng lỗ được tính toán không đúng với phí xử lý, điểm giao dịch và các chi phí giao dịch khác, rủi ro cũng sẽ tăng. Để giảm thiểu rủi ro, khuyến nghị điều chỉnh tham số Stop Loss Ratio, giảm tần suất giao dịch, đồng thời tính toán vị trí dừng lỗ hợp lý.
Chiến lược này còn có không gian để tối ưu hóa hơn nữa. Ví dụ, bạn có thể thử thay đổi tham số chiều dài của Bollinger Bands hoặc điều chỉnh ngưỡng bán tháo của RSI. Ngoài ra, bạn cũng có thể thử giới thiệu các chỉ số khác để xây dựng một danh mục đ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 các chỉ số BB kép và chỉ số RSI để có được các tham số tốt nhất 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ế về cả hai phương pháp phán đoán bảng chỉ số và tối ưu hóa tham số. Với sự cải tiến liên tục, chiến lược này có khả năng trở thành một chiến lược giao dịch định lượng xuất sắc.
/*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)