Chiến lược đột phá theo dõi kép dựa trên chỉ báo RSI


Ngày tạo: 2024-01-08 10:28:26 sửa đổi lần cuối: 2024-01-08 10:28:26
sao chép: 1 Số nhấp chuột: 634
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá theo dõi kép dựa trên chỉ báo RSI

Tổng quan

Chiến lược này được gọi là chiến lược phá vỡ hai đường ray dựa trên chỉ số RSI. Chiến lược này sử dụng sự phối hợp hai đường ray của chỉ số RSI để phán đoán, nhằm mục đích mua bán thấp. Khi chỉ số RSI thấp hơn đường thấp được thiết lập (bằng mặc định 40), nó được coi là tín hiệu mua, khi đó nếu RSI10 thấp hơn RSI14 thì mua được xác nhận thêm; Khi chỉ số RSI cao hơn đường cao được thiết lập (bằng mặc định 70), nó được coi là tín hiệu bán, khi đó nếu RSI10 cao hơn RSI14 thì bán được xác nhận thêm.

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

Lý luận cốt lõi của chiến lược này là sử dụng hai đường ray của chỉ số RSI để phán đoán. Chỉ số RSI thường được thiết lập trong 14 chu kỳ, đại diện cho tình trạng mạnh hoặc yếu của cổ phiếu trong gần 14 ngày. Chiến lược này đã thêm RSI10 làm chỉ số phán đoán phụ trợ.

Khi RSI 14 phá vỡ đường 40 , cho rằng giá cổ phiếu đã giảm xuống mức yếu, có thể tạo cơ hội để hỗ trợ. Tại thời điểm này, nếu RSI 10 nhỏ hơn RSI 14, cho thấy xu hướng ngắn hạn vẫn đi xuống, tín hiệu giảm giá có thể được xác nhận thêm. Vì vậy, khi đáp ứng RSI 14 <= 40 và RSI 10 < RSI 14, tín hiệu mua sẽ được tạo ra.

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

Vì vậy, sự kết hợp giữa RSI14 và RSI10 là logic cốt lõi của chiến lược hai đường ray.

Lợi thế chiến lược

  1. Sử dụng kết hợp các chỉ số RSI đôi để đánh giá chính xác hơn các điểm mua và bán
  2. Sử dụng cơ chế dừng lỗ di động, có thể dừng lỗ kịp thời, kiểm soát tổn thất tối đa
  3. Thiết lập cơ chế rút lui, có thể rút lui khi đạt mục tiêu lợi nhuận, tránh lợi nhuận bị trả lại

Rủi ro chiến lược

  1. Chỉ số RSI dễ tạo ra tín hiệu sai, không thể hoàn toàn tránh được sự mất mát
  2. Cài đặt điểm dừng quá gần có thể sẽ bị thả ra, đặt quá lớn và khó kiểm soát rủi ro
  3. Nếu hành động bất thường, như nhảy nhanh, cũng sẽ gây thiệt hại tương ứng.

Để tận dụng tối đa chiến lược này, bạn có thể điều chỉnh các tham số RSI một cách thích hợp, kiểm soát chặt chẽ vị trí dừng lỗ, tránh hoạt động quá dày đặc và theo đuổi khả năng lợi nhuận ổn định và lâu dài.

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

  1. Có thể xem xét kết hợp với các chỉ số khác, như KDJ, MACD, v.v., để thực hiện xác thực đa chỉ số
  2. Có thể đặt các tham số RSI riêng cho các giống khác nhau để các tham số gần gũi hơn với đặc điểm của giống
  3. Có thể thiết lập dừng động, điều chỉnh điểm dừng theo thời gian thực dựa trên các chỉ số như ATR
  4. Các tham số RSI có thể được tự động tối ưu hóa thông qua kỹ thuật học máy

Tóm tắt

Chiến lược này dựa trên tư duy hai đường của RSI để đánh giá, và lọc một số tín hiệu tiếng ồn. Tuy nhiên, không có chiến lược chỉ số đơn lẻ nào hoàn hảo, chỉ số RSI dễ gây hiểu lầm và nên thận trọng. Chiến lược này bao gồm các cơ chế dừng và dừng di động để kiểm soát rủi ro, điều này rất cần thiết.

Mã nguồn chiến lược
/*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