Tài nguyên đang được tải lên... tải...

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

Tác giả:ChaoZhang, Ngày: 2024-03-01 11:55:56
Tags:

img

Tổng quan

Chiến lược giao dịch đảo ngược RSI nhanh tạo ra tín hiệu giao dịch bằng cách kết hợp chỉ số RSI nhanh, bộ lọc thân nến, bộ lọc giá tối thiểu / tối đa và bộ lọc SMA để xác định các điểm đảo ngược xu hướng cho giao dịch đảo ngược rủi ro thấp. Chiến lược nhằm mục đích nắm bắt các cơ hội đảo ngược ngắn hạn.

Chiến lược logic

  1. Chỉ số RSI nhanh: Tính toán RSI bằng cách sử dụng hàm RMA để làm cho nó nhạy cảm hơn để nắm bắt các tín hiệu mua quá mức / bán quá mức nhanh hơn.

  2. Bộ lọc thân cây nến: Yêu cầu kích thước cơ thể nến vượt quá 1/5 của trung bình cơ thể EMA để lọc các tình huống biến động thấp.

  3. Bộ lọc giá tối thiểu/tối đa: phán xét nếu giá đạt mức cao mới hoặc thấp mới để xác nhận sự đảo ngược xu hướng.

  4. Bộ lọc SMA: Cần giá để phá vỡ đường SMA để xác nhận thêm.

Các 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 đồng thời.

Đăng nhập dài: Chỉ số RSI nhanh dưới mức bán quá mức và thân cây nến > 1/5 của thân EMA và đột phá giá tối thiểu và giá vượt qua SMA

Nhập ngắn: RSI nhanh trên mức mua quá mức và thân cây nến > 1/5 của thân EMA và đột phá giá tối đa và giá vượt dưới SMA

RSI nhanh trở lại phạm vi bình thường

Ưu điểm

Chiến lược có những lợi thế sau:

  1. Khảo sát biến động từ các sự đảo ngược ngắn hạn
  2. Chỉ số RSI nhanh nhạy
  3. Nhiều bộ lọc làm giảm tín hiệu sai
  4. Rủi ro có thể kiểm soát được, thu 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 đảo ngược thất bại
  2. Không gian tối ưu hóa hạn chế

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

  1. Thêm bộ lọc khối lượng giao dịch
  2. Thực hiện lệnh dừng lỗ
  3. Tối ưu hóa sự kết hợp tham số

Kết luận

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


/*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()

Thêm nữa