
Chiến lược phá vỡ RSI là một chiến lược giao dịch định lượng dựa trên chỉ số tương đối mạnh (RSI). Chiến lược này tạo ra tín hiệu giao dịch khi RSI phá vỡ các ngưỡng này bằng cách thiết lập các ngưỡng RSI vượt quá khu vực mua và bán.
Ý tưởng cốt lõi của chiến lược phá vỡ RSI là sử dụng chỉ số RSI để đánh giá hiện tượng mua bán quá mức của thị trường. RSI phản ánh tình trạng mạnh yếu gần đây của cổ phiếu bằng cách tính toán tỷ lệ tăng trung bình và giảm trung bình của cổ phiếu trong một khoảng thời gian. Nói chung, RSI dưới 30 được coi là quá bán và cao hơn 70 được coi là quá mua.
Chiến lược này trước tiên thiết lập đường bán quá và đường mua quá của RSI, mặc định 30 và 70. Sau đó theo dõi hoạt động của đường RSI trong thời gian thực. Khi RSI vượt ngưỡng 70 từ trên xuống, tín hiệu bán ra.
Bằng cách này, chiến lược này cố gắng nắm bắt các điểm biến đổi giá của cổ phiếu trong quá trình biến động và điều chỉnh vị trí kịp thời khi hiện tượng quá mua quá bán xảy ra, để đạt được mức mua thấp và bán cao.
Chiến lược phá vỡ RSI có những lợi thế sau:
Các tín hiệu hoạt động đơn giản và rõ ràng. Chỉ số RSI dễ tính toán và hiểu, chỉ cần quan sát ngưỡng trên và dưới của đường chỉ số bị phá vỡ. Bạn có thể hoạt động khi chỉ số bị phá vỡ, không có quy tắc giao dịch phức tạp.
Chiến lược này trích xuất tín hiệu giao dịch từ chỉ số RSI, không cần can thiệp và phán đoán của con người, có thể dễ dàng thực hiện giao dịch tự động. Đồng thời, tín hiệu mua quá bán của RSI có hiệu quả tốt hơn, chiến lược phản hồi cũng cho thấy lợi nhuận đáng kể.
Khả năng tùy chỉnh mạnh. Các nhà giao dịch có thể điều chỉnh các tham số RSI một cách linh hoạt, chẳng hạn như điều chỉnh ngưỡng giá bán tháo để phù hợp với các đặc điểm của các cổ phiếu và thị trường khác nhau.
Chiến lược phá vỡ RSI cũng có một số rủi ro, bao gồm:
dễ bị hình thành whipsaw. Khi chỉ số dao động lên xuống, sẽ thường xuyên kích hoạt tín hiệu giao dịch đột phá. Tại thời điểm này, chiến lược sẽ tạo ra quá nhiều giao dịch không hiệu quả, không thuận lợi cho thu nhập ổn định.
Không có khả năng đánh giá xu hướng thị trường. RSI chỉ tạo ra tín hiệu giao dịch từ trạng thái mua quá mức, khả năng đánh giá xu hướng lớn yếu hơn. Chiến lược dễ bị mắc kẹt trong tình huống xung đột.
RSI thường biểu hiện hành vi lệch hướng nhiều đầu, tức là giá tiếp tục tăng và chỉ số RSI đi xuống. Tại thời điểm này, chiến lược hoạt động không và lệch khỏi xu hướng lớn, sẽ phải đối mặt với tổn thất lớn.
Chiến lược phá vỡ RSI có thể được tối ưu hóa từ các chiều sau:
Xem xét nhiều chỉ số tổng hợp, tránh các hạn chế của chỉ số RSI đơn lẻ. Ví dụ, kết hợp chỉ số trung bình di chuyển để xác định xu hướng thị trường hoặc sử dụng chỉ số mạnh yếu, chỉ số giao dịch để lọc các tín hiệu giao dịch kết hợp.
Tối ưu hóa các tham số RSI để cải thiện sự ổn định của chiến lược. Bao gồm điều chỉnh ngưỡng mua bán quá mức, thiết lập thời gian tín hiệu giao dịch, v.v.. Bằng cách thử nghiệm để có được tham số tốt nhất, lọc ra một số tín hiệu không hiệu quả.
Thiết lập các điều kiện dừng lỗ để kiểm soát rủi ro, chẳng hạn như thiết lập tỷ lệ phần trăm hoặc điểm dừng. Tránh tổn thất đơn lẻ có ảnh hưởng quá lớn đến lợi nhuận tổng thể. Đồng thời kết hợp xu hướng và vị trí kỹ thuật quan trọng để kiếm lợi nhuận.
Chiến lược phá vỡ RSI là một chiến lược định lượng sử dụng hiện tượng mua bán quá mức để giao dịch đảo ngược. Các tín hiệu chiến lược đơn giản, rõ ràng, có thể định lượng hoàn toàn và có thể tùy chỉnh. Nhưng cũng có một số rủi ro và rủi ro rút lui. Bằng cách tối ưu hóa danh mục chỉ số và kiểm soát rủi ro, chiến lược phá vỡ RSI có thể được điều chỉnh thành một hệ thống định lượng ổn định và đáng tin cậy.
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-21 00:00:00
period: 2h
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 2021
strategy(title="My New Strategy", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)
//// Stoploss and Take Profit Parameters
// Enable Long Strategy
enable_long_strategy = input(true, title="Enable Long Strategy", group="SL/TP For Long Strategy",inline="1")
long_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_stoploss_percentage = (close * (long_stoploss_value / 100)) / syminfo.mintick
long_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Long Strategy",inline="2")
long_takeprofit_percentage = (close * (long_takeprofit_value / 100)) / syminfo.mintick
// Enable Short Strategy
enable_short_strategy = input(true, title="Enable Short Strategy", group="SL/TP For Short Strategy",inline="3")
short_stoploss_value = input(defval=50, title='Stoploss %', type=input.float, minval=0.1, group= "SL/TP For Short Strategy",inline="4")
short_stoploss_percentage = (close * (short_stoploss_value / 100)) / syminfo.mintick
short_takeprofit_value = input(defval=50, title='Take Profit %', type=input.float, minval=0.1, group="SL/TP For Short Strategy",inline="4")
short_takeprofit_percentage = (close * (short_takeprofit_value / 100)) / syminfo.mintick
// Plot Stoploss & Take Profit Levels
long_stoploss_price = strategy.position_avg_price * (1 - long_stoploss_value/100)
long_takeprofit_price = strategy.position_avg_price * (1 + long_takeprofit_value/100)
short_stoploss_price = strategy.position_avg_price * (1 + short_stoploss_value/100)
short_takeprofit_price = strategy.position_avg_price * (1 - short_takeprofit_value/100)
plot(enable_long_strategy and not enable_short_strategy ? long_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Long SL Level")
plot(enable_long_strategy and not enable_short_strategy ? long_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Long TP Level")
plot(enable_short_strategy and not enable_long_strategy ? short_stoploss_price: na, color=#ff0000, style=plot.style_linebr, linewidth=2, title="Short SL Level")
plot(enable_short_strategy and not enable_long_strategy ? short_takeprofit_price: na, color=#008000, style=plot.style_linebr, linewidth=2, title="Short TP Level")
// Date Range
start_date = input(title="Start Date", type=input.integer, defval=1, minval=1, maxval=31, group="Date Range")
start_month = input(title="Start Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
start_year = input(title="Start Year", type=input.integer, defval=1804, minval=1800, maxval=3000, group="Date Range")
end_date = input(title="End Date", type=input.integer, defval=1, minval=1, maxval=3, group="Date Range")
end_month = input(title="End Month", type=input.integer, defval=1, minval=1, maxval=12, group="Date Range")
end_year = input(title="End Year", type=input.integer, defval=2077, minval=1800, maxval=3000, group="Date Range")
in_date_range = (time >= timestamp(syminfo.timezone, start_year, start_month, start_date, 0, 0)) and (time < timestamp(syminfo.timezone, end_year, end_month, end_date, 0, 0))
//// Inputs **This is where you enter your indicators for your strategy. For example, I added the RSI indicator.**
//RSI
rsi = rsi(close, 14)
rsi_over_sold = rsi < 30
rsi_over_bought = rsi > 70
//// Strategy **This is where you create your strategy. For example, We have or buy and sell signals.**
// Creating Long and Short Strategy
buy_signal = rsi_over_sold
sell_signal = rsi_over_bought
// Long Strategy
if buy_signal and in_date_range and enable_long_strategy == true
strategy.entry("Long", true, when=buy_signal, alert_message="Open Long Position")
strategy.exit("Long SL/TP", from_entry="Long", loss=long_stoploss_percentage, profit=long_takeprofit_percentage, alert_message="Your Long SL/TP Limit As Been Triggered.")
strategy.close("Long", when=sell_signal, alert_message="Close Long Position")
// Short Strategy
if sell_signal and in_date_range and enable_short_strategy == true
strategy.entry("Short", false, when = sell_signal, alert_message="Open Short Position")
strategy.exit("Short SL/TP", from_entry="Short", loss=short_stoploss_percentage, profit=short_takeprofit_percentage, alert_message="Your Short SL/TP Limit As Been Triggered.")
strategy.close("Short", when=buy_signal, alert_message="Close Short Position")