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


Ngày tạo: 2023-11-07 15:45:15 sửa đổi lần cuối: 2023-11-07 15:45:15
sao chép: 0 Số nhấp chuột: 773
1
tập trung vào
1617
Người theo dõi

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

Tổng quan

Chiến lược đảo ngược RSI bằng cách kết hợp chỉ số RSI và hướng thực thể K-line để xác định hiện tượng quá mua quá bán và 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 một lúc và kết hợp với bộ lọc thực thể K-line để xác định hiệu quả cơ hội đảo ngược.

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

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

  1. Connors RSI

Tính RSI thông thường, RSI tỷ lệ thắng và RSI Paris-Charles, lấy trung bình của ba chỉ số này làm RSI của Connor.

  1. Chỉ số RSI nhanh

RSI nhanh được tính bằng biến động giá, phản ánh chu kỳ siêu ngắn.

  1. Bộ lọc thực thể K

Cần nhiều dây mặt trời thực tế, dây âm trống, để ngăn chặn đột phá giả.

  1. Điều kiện không gian

Connors RSI thấp hơn 20 và RSI nhanh hơn 25 khi đường nắng thực sự xuất hiện, làm nhiều hơn.

Connors RSI cao hơn 80 và RSI nhanh hơn 75 khi đường chân thực xuất hiện, tạo khoảng trống.

  1. Hạn kiệt rút lui

Đánh giá giá của một thực thể

Thông qua RSI của Connor để xác định điểm đảo ngược xu hướng đường dài, RSI nhanh để xác định điểm đảo ngược đường ngắn, thực thể đường K để đảm bảo hiệu quả phá vỡ, do đó có thể phát hiện hiệu quả cơ hội đảo ngược, mở vị trí và thực hiện hành động đảo ngược kịp thời khi mua quá mức.

Phân tích lợi thế

Chiến lược này có những ưu điểm sau:

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

Connors RSI phản ánh chu kỳ đường dài, RSI nhanh phản ánh chu kỳ đường ngắn, kết hợp giữa hai điều này có thể xác định chính xác hơn điểm đảo ngược.

  1. Bộ lọc thực thể

Chỉ hoạt động khi thực tế phá vỡ, có thể giảm thiệt hại do phá vỡ giả.

  1. Các tham số có thể điều chỉnh

Các tham số RSI, loại giao dịch và thời gian giao dịch có thể được điều chỉnh tùy theo thị trường.

  1. Đơn giản, trực quan

Các thực thể RSI và K-line là các chỉ số cơ bản, logic chiến lược rất đơn giản và dễ hiểu.

  1. Dễ thực hiện

Chỉ sử dụng chỉ số tích hợp, ít mã, ít khó thực hiện.

Phân tích rủi ro

Chiến lược này có những rủi ro chính như sau:

  1. Rủi ro thất bại

Sau khi tín hiệu đảo ngược, giá tiếp tục chạy theo xu hướng ban đầu, dẫn đến tổn thất.

  1. Rủi ro của động đất

Các tín hiệu liên tục được kích hoạt trong các tình huống chấn động, gây ra quá nhiều giao dịch vô hiệu.

  1. Rủi ro đột phá giả

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

  1. Các tham số đặt rủi ro

Các tham số RSI được thiết lập không chính xác, có thể làm mất cơ hội giao dịch hoặc gây ra nhiều giao dịch không hợp lệ.

  1. Rủi ro đặc biệt

Trong trường hợp đặc biệt, chỉ số RSI sẽ không hoạt động và tạo ra tín hiệu sai.

Hướng tối ưu hóa

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

  1. Tăng hệ thống chống thiệt hại

Tối ưu hóa chiến lược dừng lỗ để dừng lỗ hợp lý hơn và giảm tổn thất đơn lẻ.

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

Thêm bộ lọc MACD, KD và các chỉ số khác để tín hiệu đáng tin cậy hơn.

  1. Tăng khả năng lọc

Kết hợp xu hướng, hỗ trợ kháng cự và các khả năng phán đoán, tránh giao dịch có khả năng thấp.

  1. Cài đặt tham số tối ưu hóa

Kiểm tra các tham số cho các loại giao dịch khác nhau và chu kỳ để tìm các tham số tối ưu.

  1. Tránh các trường hợp đặc biệt

Nhận biết các trường hợp đặc biệt, tạm dừng giao dịch và tránh thiệt hại lớn.

Tóm tắt

Chiến lược đảo ngược động lực RSI thông qua Connor RSI và RSI nhanh để xác định đường dài ngắn đảo ngược, kết hợp với bộ lọc thực thể đường K để tăng hiệu quả tín hiệu. Chiến lược này có các lợi thế như danh mục chỉ số, linh hoạt điều chỉnh tham số, có thể nắm bắt cơ hội đảo ngược, can thiệp giao dịch kịp thời khi quá mua quá bán. Tuy nhiên, chiến lược này cũng có một số rủi ro về thất bại đảo ngược, phá vỡ phá vỡ giả mạo, cần tối ưu hóa thêm các chỉ số dừng lỗ để giảm rủi ro và nâng cao khả năng lợi nhuận.

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