Chiến lược giao dịch đảo ngược RSI nhanh


Ngày tạo: 2024-03-01 11:55:56 sửa đổi lần cuối: 2024-03-01 11:55:56
sao chép: 2 Số nhấp chuột: 617
1
tập trung vào
1617
Người theo dõi

Chiến lược giao dịch đảo ngược RSI nhanh

Tổng quan

Chiến lược giao dịch đảo ngược RSI nhanh nhằm đánh giá điểm đảo ngược xu hướng bằng cách sử dụng kết hợp các chỉ số RSI nhanh, bộ lọc thực thể K-line, bộ lọc giá tối đa và tối thiểu và bộ lọc đường trung bình SMA. Chiến lược này được thiết kế để nắm bắt các cơ hội đảo ngược ngắn hạn.

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

Chiến lược này được đánh giá dựa trên một số chỉ số:

  1. Chỉ số RSI nhanh: Tính toán RSI thông qua hàm RMA, làm cho nó nhạy cảm hơn, để nắm bắt các tín hiệu bán tháo nhanh hơn.

  2. Bộ lọc thực thể K: yêu cầu kích thước thực thể đường K lớn hơn 15 của đường trung bình của thực thể EMA để lọc sự thay đổi nhỏ.

  3. Bộ lọc giá tối đa tối thiểuCác nhà nghiên cứu đã đưa ra một số kết luận về sự thay đổi này:

  4. Bộ lọc SMACác nhà phân tích cho biết: “Điều này có nghĩa là các nhà đầu tư sẽ có nhiều tiền hơn nếu họ có thể đưa ra các quyết định chính xác”.

Một tín hiệu giao dịch được tạo ra khi nhiều điều kiện trên được kích hoạt cùng một lúc.

Nhóm đầu vào: Chỉ số RSI nhanh thấp hơn vùng bán tháo và thực thể đường K lớn hơn đường trung bình thực thể EMA 15 AND có giá phá vỡ AND tối thiểu trên đường trung bình SMA

Tham gia đầu không: Chỉ số RSI nhanh cao hơn vùng bán tháo và thực thể đường K lớn hơn đường trung bình thực thể EMA 15 AND có giá trị phá vỡ AND tối đa. Giá vượt qua đường trung bình SMA

RSI nhanh trở lại vùng bình thường

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

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

  1. Ghi lại những biến động trong thời gian ngắn
  2. Chỉ số RSI nhanh nhạy
  3. Nhiều bộ lọc làm giảm tín hiệu giả
  4. Rủi ro có thể kiểm soát được, rút lui nhỏ

Rủi ro và tối ưu hóa

Chiến lược này cũng có một số rủi ro:

  1. Rủi ro của thất bại
  2. Không gian tối ưu hóa tham số giới hạn

Có thể tối ưu hóa thêm bằng cách:

  1. Trình lọc khối lượng giao dịch
  2. Tăng chiến lược dừng lỗ
  3. Gói tham số tối ưu

Tóm tắt

Chiến lược này nói chung là một chiến lược giao dịch đảo ngược ngắn hạn có rủi ro thấp. Nó đánh giá điểm mua và bán thông qua chỉ số RSI nhanh và sử dụng nhiều bộ lọc để giảm tín hiệu giả, do đó tạo ra giao dịch đảo ngược có thể kiểm soát rủi ro và phù hợp với hoạt động ngắn. Chiến lược này có thể được tối ưu hóa hơn nữa và có tiềm năng phát triển lớn.

Mã nguồn chiến lược
/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-26 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.4", shorttitle = "Fast RSI str 1.4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usersi = input(true, defval = true, title = "Use Fast RSI Strategy")
usemm = input(true, defval = true, title = "Use Min/Max Strategy")
usesma = input(true, defval = true, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
mmbars = input(1, defval = 1, minval = 1, maxval = 5, title = "Min/Max Bars")
showsma = input(false, defval = false, title = "Show SMA Filter")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, 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")

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

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

//Body
body = abs(close - open)
emabody = ema(body, 30)

//MinMax Bars
min = min(close, open)
max = max(close, open)
minsignal = min < min[1] and bar == -1 and bar[1] == -1 ? 1 : 0
maxsignal = max > max[1] and bar == 1 and bar[1] == 1 ? 1 : 0
mins = sma(minsignal, mmbars) == 1
maxs = sma(maxsignal, mmbars) == 1

//SMA Filter
sma = sma(close, smaperiod)
colorsma = showsma ? blue : na
plot(sma, color = colorsma, linewidth = 3)

//Signals
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > emabody / 5 and usersi
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > emabody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and usemm
dn2 = maxs and (close < sma or usesma == false) and usemm 
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > emabody / 2

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if time > timestamp(toyear, tomonth, today, 00, 00) or exit
    strategy.close_all()