Chiến lược phá vỡ RSI là một chiến lược giao dịch định lượng

Tác giả:ChaoZhang, Ngày: 2023-12-22 14:06:45
Tags:

img

Tổng quan

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ố chỉ số sức mạnh tương đối (RSI). Chiến lược tạo ra tín hiệu giao dịch khi RSI vượt qua các ngưỡng mua quá mức và bán quá mức đã đặt trước, tức là mua dài khi RSI dưới 30 và mua ngắn khi RSI trên 70.

Chiến lược logic

Ý tưởng cốt lõi của chiến lược phá vỡ RSI là sử dụng chỉ số RSI để xác định điều kiện mua quá mức và bán quá mức trên thị trường. RSI tính tỷ lệ lợi nhuận và tổn thất giá trung bình trong một khoảng thời gian để phản ánh sức mạnh hoặc điểm yếu gần đây của một cổ phiếu. Nói chung, RSI dưới 30 được coi là bán quá mức và RSI trên 70 là mua quá mức.

Chiến lược đầu tiên thiết lập các giá trị ngưỡng bán quá mức và mua quá mức cho chỉ số RSI, với các giá trị mặc định là 30 và 70. Sau đó nó theo dõi đường RSI trong thời gian thực. Khi chỉ số RSI vượt qua dưới ngưỡng 70 từ trên xuống dưới, một tín hiệu bán được tạo ra. Điều này cho thấy thị trường đã bước vào vùng mua quá mức và có thể đảo ngược xuống, vì vậy một vị trí ngắn được thực hiện. Ngược lại, khi chỉ số RSI vượt qua ngưỡng 30, một tín hiệu mua được tạo ra, cho thấy thị trường bán quá mức có thể sẽ hồi phục trở lại, vì vậy một vị trí dài được thực hiện.

Bằng cách này, chiến lược cố gắng nắm bắt các điểm đảo ngược giá trong thời gian biến động cổ phiếu và điều chỉnh các vị trí tương ứng để mua thấp và bán cao.

Ưu điểm

Chiến lược phá vỡ RSI có những lợi thế sau:

  1. Các tín hiệu giao dịch đơn giản và rõ ràng. Chỉ số RSI dễ tính toán và giải thích bằng cách chỉ quan sát xem đường chỉ số có vượt qua các giá trị ngưỡng không. Các giao dịch có thể được thực hiện nhanh chóng khi các tín hiệu xảy ra mà không có các quy tắc phức tạp.

  2. Các giao dịch được tạo ra bởi chỉ số RSI mà không có sự can thiệp của con người. Đồng thời, các tín hiệu RSI mua quá nhiều và bán quá nhiều có xu hướng hiệu quả, dẫn đến lợi nhuận chiến lược tốt trong các bài kiểm tra ngược.

  3. Các nhà giao dịch có thể điều chỉnh linh hoạt các thông số RSI như ngưỡng mua quá mức / bán quá mức để phù hợp với động lực chứng khoán và thị trường khác nhau.

Rủi ro

Chiến lược phá vỡ RSI cũng mang lại một số rủi ro:

  1. Có xu hướng bị chém. Sự giao thoa thường xuyên của các giá trị ngưỡng chỉ số có thể dẫn đến giao dịch không hiệu quả quá mức, cản trở lợi nhuận ổn định. Các thông số có thể được điều chỉnh để lọc một số tín hiệu chém.

  2. Không có đánh giá xu hướng. RSI chỉ tạo ra các tín hiệu dựa trên mức mua quá mức / bán quá mức mà không đánh giá xu hướng tổng thể tốt. Chiến lược có xu hướng bị mắc kẹt trong các thị trường hỗn loạn. Các bộ lọc xu hướng có thể được thêm để tránh các giao dịch ngược xu hướng.

  3. Rủi ro rút vốn cao. RSI thường biểu hiện sự chênh lệch tăng khi giá tiếp tục tăng trong khi RSI có xu hướng giảm. Các giao dịch ngắn sẽ phải đối mặt với tổn thất lớn trong những trường hợp như vậy.

Các lĩnh vực cải tiến

Chiến lược phá vỡ RSI có thể được tăng cường theo các cách sau:

  1. Kết hợp nhiều chỉ số để vượt qua những hạn chế của RSI, ví dụ như đường trung bình động để xác định xu hướng thị trường, chỉ số sức mạnh và bộ lọc khối lượng để xác nhận tín hiệu.

  2. Tối ưu hóa các thông số RSI để có sự ổn định cao hơn, bao gồm điều chỉnh ngưỡng mua quá mức / bán quá mức, đặt bộ lọc thời gian tín hiệu vv thông qua thử nghiệm nghiêm ngặt.

  3. Thực hiện dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro. Ví dụ, đặt tỷ lệ phần trăm hoặc điểm dừng. Tránh thua lỗ giao dịch đơn quá lớn trên lợi nhuận tổng thể. Cũng xem xét xu hướng và các điểm kỹ thuật để lấy lợi nhuận.

Kết luận

Chiến lược đột phá RSI là một chiến lược định lượng đảo ngược trung bình dựa trên các tín hiệu mua quá mức và bán quá mức. Nó có các tín hiệu đơn giản và rõ ràng, khả năng tự động hóa đầy đủ và khả năng tùy biến cao nhưng phải chịu rủi ro thắt lưng và rút tiền. Bằng cách tối ưu hóa với các kết hợp chỉ số và kiểm soát rủi ro, nó có thể được điều chỉnh thành một chiến lược ổn định.


/*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")


Thêm nữa