Chiến lược đảo ngược động lực RSI

Tác giả:ChaoZhang, Ngày: 2023-11-07 15:45:15
Tags:

img

Tổng quan

Chiến lược đảo ngược đà RSI xác định các điều kiện mua quá mức và bán quá mức bằng cách kết hợp các chỉ số RSI và hướng cơ thể nến để giao dịch đảo ngược. Chiến lược này sử dụng cả RSI thông thường và RSI nhanh, cùng với bộ lọc cơ thể nến, để xác định hiệu quả các cơ hội đảo ngược.

Chiến lược logic

Chiến lược được thực hiện chủ yếu thông qua các phần sau:

  1. Chỉ số RSI của Connors

    Tính toán chỉ số RSI thông thường, tỷ lệ thắng RSI và chỉ số RSI Paris để có được chỉ số RSI của Connors là trung bình.

  2. Chỉ số RSI nhanh

    Sử dụng thay đổi giá để tính RSI nhanh, phản ánh chu kỳ cực ngắn hạn.

  3. Bộ lọc thân cây nến

    Cần cơ thể tăng trong thời gian dài và cơ thể giảm trong thời gian ngắn để ngăn chặn sự phá vỡ sai.

  4. Điều kiện dài và ngắn

    Đi dài khi Connors RSI dưới 20 và nhanh RSI dưới 25 với cơ thể tăng.

    Đi ngắn khi Connors RSI trên 80 và nhanh RSI trên 75 với cơ thể giảm.

  5. Khóa lệnh dừng lỗ

    Rời với stop loss khi thân cây nến quay lại.

Connors RSI xác định các điểm đảo ngược xu hướng dài hạn, RSI nhanh xác định các đảo ngược ngắn hạn và thân cây nến đảm bảo tính hợp lệ của sự đột phá. Điều này cho phép phát hiện hiệu quả các cơ hội đảo ngược và thực hiện các giao dịch chống xu hướng trong điều kiện mua quá mức và bán quá mức.

Phân tích lợi thế

Những lợi thế của chiến lược này bao gồm:

  1. Kết hợp các chỉ số dài hạn và ngắn hạn

    Connors RSI phản ánh chu kỳ dài hạn và RSI nhanh phản ánh chu kỳ ngắn hạn, kết hợp cả hai có thể xác định chính xác các điểm đảo ngược.

  2. Bộ lọc thân cây nến

    Giao dịch chỉ trên cơ thể breakouts có thể giảm tổn thất từ breakouts giả.

  3. Các thông số điều chỉnh

    Các thông số RSI, sản phẩm giao dịch và khung thời gian giao dịch có thể được điều chỉnh tự do để phù hợp với các thị trường khác nhau.

  4. Đơn giản và trực quan

    RSI và thân cây nến là các chỉ số cơ bản, logic dễ hiểu.

  5. Dễ thực hiện

    Chỉ sử dụng các chỉ số tích hợp, đòi hỏi ít mã và dễ thực hiện.

Phân tích rủi ro

Những rủi ro chính của chiến lược này:

  1. Rủi ro đảo ngược thất bại

    Giá tiếp tục xu hướng ban đầu sau tín hiệu đảo ngược, dẫn đến tổn thất.

  2. Rủi ro thị trường khác nhau

    Các tín hiệu không hiệu quả thường xuyên được kích hoạt trong các thị trường khác nhau.

  3. Rủi ro thoát sai

    Bộ lọc thân nến không thể hoàn toàn tránh được sự đột phá giả.

  4. Rủi ro tham số

    Các thông số RSI không phù hợp có thể bỏ lỡ giao dịch hoặc kích hoạt nhiều giao dịch không hiệu quả.

  5. Rủi ro điều kiện thị trường đặc biệt

    Các chỉ số RSI có thể thất bại và tạo ra các tín hiệu không chính xác trong điều kiện thị trường đặc biệt.

Hướng dẫn tối ưu hóa

Chiến lược có thể được tối ưu hóa từ các khía cạnh sau:

  1. Thêm cơ chế dừng lỗ

    Tối ưu hóa các chiến lược dừng lỗ để dừng hợp lý hơn, giảm lỗ giao dịch duy nhất.

  2. Tích hợp nhiều chỉ số

    Thêm các bộ lọc như MACD và KD để làm cho tín hiệu đáng tin cậy hơn.

  3. Thêm bộ lọc xác suất

    Kết hợp phân tích xu hướng, hỗ trợ / kháng cự để tránh các giao dịch có xác suất thấp.

  4. Tối ưu hóa cài đặt tham số

    Kiểm tra các thông số trên các sản phẩm khác nhau và khung thời gian để tìm ra các giá trị tối ưu.

  5. Tránh các điều kiện thị trường đặc biệt

    Xác định và tránh giao dịch trong điều kiện thị trường đặc biệt để tránh tổn thất lớn.

Kết luận

Chiến lược đảo ngược đà RSI xác định các đảo ngược dài và ngắn hạn bằng cách sử dụng Connors RSI và RSI nhanh, với các bộ lọc thân nến để tăng tính hợp lệ của tín hiệu. Những lợi thế như sự kết hợp của chỉ báo và các tham số có thể điều chỉnh cho phép nắm bắt sự đảo ngược và giao dịch ngược xu hướng khi mua quá nhiều hoặc bán quá nhiều. Nhưng các rủi ro như đảo ngược thất bại và đột phá sai vẫn còn, đòi hỏi tối ưu hóa thêm trong dừng lỗ, sự kết hợp của chỉ báo để giảm rủi ro và cải thiện lợi nhuận.


/*backtest
start: 2023-10-07 00:00:00
end: 2023-11-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Connors RSI Strategy v1.0", shorttitle = "CRSI str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usecrsi = input(true, defval = true, title = "Use CRSI Strategy")
usefrsi = input(true, defval = true, title = "Use FRSI Strategy")
usemod = input(true, defval = true, title = "CRSI+FRSI Mode")
limit = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
usebod = input(true, defval = true, title = "Use Body-filter")
usecol = input(true, defval = true, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//CRSI
rsilen = 3
streaklen = 2
lookback = 100
rsi = rsi(close,rsilen)
upday = close > close[1] ? 1 : 0
downday = close < close[1] ? -1 : 0
upstreak = upday!=0 ? upstreak[1] + upday : 0
downstreak = downday!=0 ? downstreak[1] + downday : 0
streak = upstreak + downstreak
streakrsi = rsi(streak,streaklen)
roc = close/close[1] - 1
roccount = 0
for i=1 to lookback-1
    roccount := roc[i]<roc ? roccount + 1 : roccount
crsi = (rsi + streakrsi + roccount) / 3

//Oscilator
// rsiplot = plot(crsi, title="RSI", style=line, linewidth=1, color=blue)
// band1 = hline(80, title="Upper Line", linestyle=dashed, linewidth=1, color=red)
// band0 = hline(20, title="Lower Line", linestyle=dashed, linewidth=1, color=green)
// fill(band1, band0, color=purple, transp=90)

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 or usecol == false
rbar = bar == -1 or usecol == false

//Signals

up1 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and crsi < limit and body and usecrsi
dn1 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and crsi > 100 - limit and body and usecrsi
up2 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and fastrsi < limit and body and usefrsi
dn2 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and fastrsi > 100 - limit and body and usefrsi
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if ((up1 or up2) and usemod == false) or (up1 and up2 and usemod)
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if ((dn1 or dn2) and usemod == false) or (dn1 and dn2 and usemod)
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Thêm nữa