Chiến lược đảo ngược xu hướng RSI

RSI ATR
Ngày tạo: 2024-04-28 13:33:19 sửa đổi lần cuối: 2024-04-28 13:33:19
sao chép: 1 Số nhấp chuột: 285
1
tập trung vào
1166
Người theo dõi

Chiến lược đảo ngược xu hướng RSI

Tổng quan

Chiến lược đảo ngược xu hướng RSI là một chiến lược giao dịch định lượng dựa trên chỉ số tương đối yếu ((RSI) và sóng thực trung bình ((ATR)). Chiến lược này thích ứng với biến động thị trường nhanh chóng bằng cách điều chỉnh động dừng lỗ ((TP / SL) để nắm bắt cơ hội đảo ngược xu hướng. Chiến lược lấy RSI làm trung tâm, kết hợp với ATR để đo lường biến động, xây dựng hai dải động tự thích ứng dưới đây để sử dụng làm cơ sở cho việc mở vị thế.

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

Cốt lõi của chiến lược đảo ngược xu hướng RSI là xây dựng các vùng dừng dừng động. Đầu tiên, hãy sử dụng hàm highest_custom và lowest_custom tùy chỉnh để tìm thấy giá cao nhất và giá thấp nhất kể từ lần giao dịch trước, tạo thành cơ sở của dải sóng. Sau đó, tính RSI và ATR theo chiều dài, sau đó tính toán như sau:

  1. Đường dưới = giá cao nhất ×[1 - (ATR/giá + 1/(RSI xuống đường x nhân))
  2. Đường lên = giá thấp nhất ×[1 + (ATR/giá + 1/(RSI lên đường x nhân))

Trong đó, multiplier mở rộng nhân tố cho dải sóng tùy chỉnh của người dùng. Nếu giá lên phá vỡ đường lên thì làm nhiều, nếu giảm xuống phá vỡ đường xuống thì làm trống. Ngoài ra, màu sắc của hai dải này cũng thay đổi tùy theo vị trí của dải sóng so với giá, dễ dàng quan sát.

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

  1. Đường đệm tự điều chỉnh theo biến động của giá, đáp ứng kịp thời với sự thay đổi của thị trường.
  2. Các tham số có thể điều chỉnh, có thể điều chỉnh độ nhạy của chiến lược bằng cách điều chỉnh các tham số như length, multiplier.
  3. Nó có logic rõ ràng, cấu trúc mã hợp lý, dễ hiểu và phát triển thứ hai.
  4. Nó có thể được sử dụng độc lập với các chiến lược khác, hoặc có thể được thêm vào các chiến lược khác.
  5. Hiệu quả tính toán cao, bằng cách tùy chỉnh hàm như highest_custom, tránh tính toán lặp lại lớn do sử dụng loại series.

Rủi ro chiến lược

  1. Chọn không đúng các tham số có thể gây ra rủi ro bổ sung, ví dụ như length quá nhỏ có thể dẫn đến giao dịch thường xuyên, multiplier quá lớn có thể dẫn đến dừng lỗ quá nhẹ.
  2. Điều này có thể không hiệu quả trong một số trường hợp thị trường nhất định, chẳng hạn như việc tháo gỡ và phá vỡ giả mạo thường xuyên trong thị trường xung đột có thể tạo ra nhiều giao dịch thua lỗ hơn.
  3. Các chiến lược không có chức năng đánh giá xu hướng, cần các tín hiệu khác để sử dụng.

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

  1. Bạn có thể xem xét thêm các chỉ số định hướng, chẳng hạn như đường trung bình di chuyển, và chỉ giao dịch tại các điểm đảo ngược theo hướng của xu hướng lớn.
  2. Các tham số có thể được tối ưu hóa để tìm ra sự kết hợp tốt nhất của các tham số như length, multiplier.
  3. Nó có thể được kết hợp với các chỉ số kỹ thuật khác hoặc chỉ số cảm xúc thị trường để tăng độ chính xác của vị trí mở lệnh.
  4. Bạn có thể kiểm soát chặt chẽ lỗ hổng rủi ro của mỗi giao dịch bằng cách thêm quản lý vị trí.

Tóm tắt

Chiến lược đảo ngược xu hướng RSI sử dụng RSI và ATR để xây dựng dải tự thích ứng, có thể điều chỉnh động điểm dừng lỗ để phản ứng kịp thời với sự thay đổi của thị trường. Lập luận của chiến lược rõ ràng, có phạm vi rộng, có thể là một công cụ mạnh mẽ cho thương nhân định lượng.

Mã nguồn chiến lược
/*backtest
start: 2023-04-22 00:00:00
end: 2024-04-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("RSI Trend Reversal", overlay=true, max_bars_back = 4999, calc_on_every_tick = false)


//INPUTS 
rsi_length = input.int(title = "Lenght", defval = 8)
rsi_mult = input.float(title = "Multiplier", defval = 1.5, step = .05)
lookback = input.int(title = "Delay to prevent idealization", defval = 1)
sltp = input.float(title = "Minimum Difference", defval = 10)
src = input.source(title = "Source Input", defval = close)

//PARAMETERS INITILIZATION
hclose = request.security(ticker.heikinashi(syminfo.tickerid), timeframe.period, src)
//FUNCTION INITILIZATION
highest_custom(src, length) =>
    x = src
    for i = 0 to length
        if src[i] > x
            x := src[i]
    x
lowest_custom(src, length) => 
    x = src
    for i = 0 to length
        if src[i] < x
            x := src[i]
    x
rsilev(src, length, mult, sltp) =>
    sl = (100 - sltp) / 100
    tp = (100 + sltp) / 100
    var bool crossup = na
    var bool crossdown = na
    var float dir = na
    dir_change = ta.change(dir)
    var float BearGuy = 0
    BullGuy = ta.barssince(crossup or crossdown)
    if na(BullGuy)
        BearGuy += 1
    else
        BearGuy := BullGuy
    var float upper = na
    var float lower = na
    rsilower = ta.rsi(src, length)
    rsiupper = math.abs(ta.rsi(src, length) - 100)
    atr = ta.atr(length) / src
    lower := highest_custom(math.max(highest_custom(highest_custom(src, BearGuy) * (1 - (atr + ((1 / (rsilower) * mult)))), BearGuy), src * sl), BearGuy)
    upper := lowest_custom(math.min(lowest_custom(lowest_custom(src, BearGuy) * (1 + (atr + ((1 / (rsiupper) * mult)))), BearGuy), src * tp), BearGuy)
    var float thresh = na
    if na(thresh)
        thresh := lower
    if na(dir)
        dir := 1
    if crossdown
        dir := -1
    if crossup
        dir := 1
    if dir == 1
        thresh := lower
    if dir == -1
        thresh := upper
    crossup := ta.crossover(src, thresh)
    crossdown := ta.crossunder(src, thresh)
    thresh

rsiclose = rsilev(hclose, rsi_length, rsi_mult, sltp)

//PLOTTING
var color col = color.lime
if hclose > rsiclose
    col := color.lime
if hclose < rsiclose
    col := color.red
plot(rsiclose, linewidth = 2, color = col)

//STRATEGY
buy = ta.crossover(hclose, rsiclose)
sell = ta.crossunder(hclose, rsiclose)

if buy[lookback]
    strategy.entry("long", strategy.long)
if sell[lookback]
    strategy.entry("Short", strategy.short)