Chiến lược đột phá hai đường dẫn RSI

Tác giả:ChaoZhang, Ngày: 2024-01-08 10:28:26
Tags:

img

Tổng quan

Chiến lược này được đặt tên là RSI Dual-track Breakthrough Strategy. Nó sử dụng hai đường dẫn của chỉ số RSI để đánh giá để đạt được mục tiêu mua thấp và bán cao. Khi chỉ số RSI giảm xuống dưới đường dẫn thấp hơn đã thiết lập (bên định 40), nó được coi là tín hiệu mua. Tại thời điểm này, nếu RSI10 thấp hơn RSI14, nó xác nhận thêm mua; Khi chỉ số RSI tăng trên đường dẫn trên đã thiết lập (bên định 70), nó được coi là tín hiệu bán. Tại thời điểm này, nếu RSI10 lớn hơn RSI14, nó xác nhận thêm bán. Chiến lược cũng thiết lập các cơ chế di chuyển dừng lỗ và lấy lợi nhuận.

Nguyên tắc chiến lược

Khái niệm cốt lõi của chiến lược này là sử dụng hai đường dẫn của chỉ số RSI để đánh giá. Chỉ số RSI thường được đặt thành 14 giai đoạn, đại diện cho sức mạnh và điểm yếu của cổ phiếu trong 14 ngày gần đây. Chiến lược này thêm RSI10 làm chỉ số đánh giá phụ trợ.

Khi chỉ số RSI14 phá vỡ dưới đường đi 40, người ta tin rằng giá cổ phiếu đã phá vỡ phía yếu và có thể có cơ hội phục hồi hỗ trợ. Tại thời điểm này, nếu RSI10 thấp hơn RSI14, điều đó có nghĩa là xu hướng ngắn hạn vẫn đang giảm, có thể xác nhận thêm tín hiệu bán. Vì vậy, khi RSI14 <= 40 và RSI10 được đáp ứng, một tín hiệu mua được tạo ra.

Khi chỉ số RSI14 vượt qua đường 70, người ta tin rằng giá cổ phiếu đã bước vào một khu vực mạnh trong ngắn hạn và có thể có cơ hội điều chỉnh rút lui. Tại thời điểm này, nếu chỉ số RSI10 lớn hơn chỉ số RSI14, điều đó có nghĩa là xu hướng ngắn hạn tiếp tục tăng lên, có thể xác nhận tín hiệu mua. Vì vậy, khi RSI14 >= 70 và RSI10> RSI14 được đáp ứng, một tín hiệu bán được tạo ra.

Do đó, đánh giá kết hợp của RSI14 và RSI10 tạo thành logic cốt lõi của chiến lược hai đường dẫn.

Ưu điểm của Chiến lược

  1. Sự đánh giá kết hợp của các chỉ số RSI kép có thể nắm bắt các tín hiệu giao dịch chính xác hơn
  2. Việc áp dụng cơ chế dừng lỗ di chuyển có thể cắt giảm lỗ kịp thời và kiểm soát lượng rút tối đa
  3. Việc thiết lập cơ chế thoát lợi nhuận cho phép thoát khi đạt được lợi nhuận mục tiêu, tránh việc khôi phục lợi nhuận

Rủi ro của chiến lược

  1. Chỉ số RSI có xu hướng tạo ra tín hiệu sai và thua lỗ không thể tránh hoàn toàn
  2. Nếu điểm dừng lỗ được đặt quá gần nó có thể được đưa ra sớm, nếu đặt quá lớn nó khó kiểm soát rủi ro
  3. Trong điều kiện thị trường bất thường như khoảng cách, nó cũng có thể dẫn đến tổn thất

Để tận dụng đầy đủ chiến lược này, các thông số RSI có thể được điều chỉnh đúng cách, vị trí dừng lỗ nên được kiểm soát chặt chẽ, tránh giao dịch quá thường xuyên và theo đuổi lợi nhuận ổn định.

Các hướng tối ưu hóa chiến lược

  1. Xem xét kết hợp các chỉ số khác để xác nhận kết hợp, chẳng hạn như KDJ, MACD vv.
  2. Đặt các thông số RSI tương ứng dựa trên các đặc điểm của các sản phẩm khác nhau
  3. Thiết lập mất mát dừng động dựa trên các chỉ số như ATR để điều chỉnh vị trí dừng kịp thời
  4. Tối ưu hóa các thông số RSI tự động thông qua các kỹ thuật học máy

Tóm lại

Chiến lược này đưa ra phán đoán dựa trên ý tưởng hai đường dẫn của RSI và lọc ra một số tín hiệu ồn ào đến một mức độ nào đó. Nhưng không có chiến lược chỉ số duy nhất nào có thể hoàn hảo, chỉ số RSI có xu hướng gây hiểu lầm và nên được xem xét cẩn thận. Chiến lược này kết hợp các cơ chế dừng lỗ và lấy lợi nhuận để kiểm soát rủi ro, điều này là điều cần thiết. Tối ưu hóa trong tương lai có thể được tiếp tục để làm cho các tham số chiến lược và phương pháp dừng lỗ thông minh và năng động hơn.


/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © DojiEmoji

//@version=4
strategy("[KL] RSI 14 + 10 Strategy",overlay=true)

backtest_timeframe_start = input(defval = timestamp("01 Jan 2015 13:30 +0000"), title = "Backtest Start Time", type = input.time)
//backtest_timeframe_end = input(defval = timestamp("19 Mar 2021 19:30 +0000"), title = "Backtest End Time", type = input.time)
TARGET_PROFIT_MODE = input(false,title="Exit when Risk:Reward met")
REWARD_RATIO = input(3,title="Risk:[Reward] (i.e. 3) for exit")
// Trailing stop loss {
TSL_ON = input(true,title="Use trailing stop loss")
var entry_price = float(0)
ATR_multi_len = 26
ATR_multi = input(2, "ATR multiplier for stop loss")
ATR_buffer = atr(ATR_multi_len) * ATR_multi
plotchar(ATR_buffer, "ATR Buffer", "", location = location.top)
risk_reward_buffer = (atr(ATR_multi_len) * ATR_multi) * REWARD_RATIO
take_profit_long = low > entry_price + risk_reward_buffer
take_profit_short = low < entry_price - risk_reward_buffer
var bar_count = 0 //number of bars since entry 
var trailing_SL_buffer = float(0)
var stop_loss_price = float(0)
stop_loss_price := max(stop_loss_price, close - trailing_SL_buffer)
// plot TSL line
trail_profit_line_color = color.green
showLine = strategy.position_size == 0
if showLine
    trail_profit_line_color := color.black
    stop_loss_price := close - trailing_SL_buffer
plot(stop_loss_price,color=trail_profit_line_color)
// }
// RSI
RSI_LOW = input(40,title="RSI entry")
RSI_HIGH = input(70,title="RSI exit")
rsi14 = rsi(close, 14)
rsi10 = rsi(close, 10)

if true// and time <= backtest_timeframe_end
    buy_condition = rsi14 <= RSI_LOW and rsi10 < rsi14
    exit_condition = rsi14 >= RSI_HIGH and rsi10 > rsi14
    //ENTRY:
    if strategy.position_size == 0 and buy_condition
        entry_price := close
        trailing_SL_buffer := ATR_buffer
        stop_loss_price := close - ATR_buffer
        strategy.entry("Long",strategy.long, comment="buy")
        bar_count := 0
    else if strategy.position_size > 0
        bar_count := bar_count + 1

    //EXIT: 
    // Case (A) hits trailing stop
    if TSL_ON and strategy.position_size > 0 and close <= stop_loss_price
        if close > entry_price
            strategy.close("Long", comment="take profit [trailing]")
            stop_loss_price := 0
        else if close <= entry_price and bar_count
            strategy.close("Long", comment="stop loss")
            stop_loss_price := 0
        bar_count := 0
    // Case (B) take targeted profit relative to risk 
    if strategy.position_size > 0 and TARGET_PROFIT_MODE
        if take_profit_long
            strategy.close("Long", comment="take profits [risk:reward]")
            stop_loss_price := 0
        bar_count := 0
    // Case (C)
    if strategy.position_size > 0 and exit_condition
        if take_profit_long
            strategy.close("Long", comment="exit[rsi]")
            stop_loss_price := 0
        bar_count := 0


Thêm nữa