Chiến lược đột phá RSI nhanh

Tác giả:ChaoZhang, Ngày: 2023-10-24 11:51:56
Tags:

img

Tổng quan

Chiến lược này thực hiện các hoạt động đột phá nhanh dựa trên chỉ số RSI và EMA của các cơ thể nến. Nó xác định các tín hiệu đảo ngược bằng cách sử dụng sự hình thành nhanh của RSI và các cơ thể nến lớn.

Chiến lược logic

  1. Tính toán chỉ số RSI với giai đoạn 7 và sử dụng RMA để tăng tốc.

  2. Tính toán EMA của kích thước thân cây nến với thời gian 30 làm điểm chuẩn cho kích thước thân.

  3. Nếu chỉ số RSI vượt trên đường giới hạn (mục tiêu 30) và thân nến hiện tại lớn hơn 1/4 kích thước thân trung bình, hãy mua dài.

  4. Nếu chỉ số RSI vượt dưới đường giới hạn (mất mặc định 70) và thân nến hiện tại lớn hơn 1/4 kích thước thân trung bình, hãy mua ngắn.

  5. Nếu đã ở vị trí, đóng khi RSI vượt qua đường giới hạn.

  6. Các thông số như chiều dài RSI, giới hạn, giá tham chiếu có thể được cấu hình.

  7. Các thông số như thời gian EMA cơ thể, mở vị trí chroot nhân có thể được cấu hình.

  8. Số lượng các giao điểm RSI có thể được cấu hình.

Phân tích lợi thế

  1. Sử dụng thuộc tính đảo ngược của RSI để nắm bắt sự đảo ngược kịp thời.

  2. RMA đẩy nhanh sự hình thành RSI cho những sự đảo ngược nhạy cảm hơn.

  3. Chế độ lọc tập hợp phạm vi nhỏ với cơ thể nến lớn.

  4. Dữ liệu backtest đủ đảm bảo độ tin cậy.

  5. Các tham số có thể tùy chỉnh thích nghi với môi trường thị trường khác nhau.

  6. Một logic đơn giản và rõ ràng.

Phân tích rủi ro

  1. Chỉ số RSI có sai lệch trong backtest, hiệu suất thực tế cần được xác nhận.

  2. Các tổ chức lớn không thể lọc hoàn toàn các thị trường hỗn loạn.

  3. Các thông số mặc định có thể không phù hợp với tất cả các sản phẩm, cần tối ưu hóa.

  4. Tỷ lệ thắng có thể không cao, cần phải chịu đựng những thất bại liên tiếp về mặt tinh thần.

  5. Nguy cơ không thành công, cần dừng lỗ kịp thời.

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

  1. Tối ưu hóa các thông số RSI cho các giai đoạn và sản phẩm khác nhau.

  2. Tối ưu hóa thời gian EMA cơ thể để làm mượt kích thước cơ thể.

  3. Tối ưu hóa nhân cơ thể cho các vị trí mở để kiểm soát tần số nhập cảnh.

  4. Thêm stop loss di chuyển để đảm bảo tỷ lệ thắng.

  5. Thêm bộ lọc xu hướng để tránh giao dịch ngược xu hướng.

  6. Tối ưu hóa quản lý tiền để kiểm soát rủi ro.

Kết luận

Tóm lại, đây là một chiến lược đảo ngược rất đơn giản và trực tiếp. Nó sử dụng cả thuộc tính đảo ngược của RSI và động lực của các cơ thể nến lớn để nhanh chóng vào trong các lần đảo ngược thị trường. Mặc dù kết quả backtest trông tốt, nhưng hiệu suất thực tế vẫn chưa được xác nhận. Tối ưu hóa tham số và kiểm soát rủi ro là cần thiết khi áp dụng nó. Nhìn chung, đây là một chiến lược có giá trị lớn và đáng áp dụng và liên tục cải thiện trong giao dịch trực tiếp.


/*backtest
start: 2023-09-23 00:00:00
end: 2023-10-23 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.2", shorttitle = "Fast RSI str 1.2", 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")
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")
rb = input(1, defval = 1, minval = 1, maxval = 5, title = "RSI Bars")
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))
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
ur = fastrsi > uplimit
dr = fastrsi < dnlimit
uprsi = rb == 1 and ur ? 1 : rb == 2 and ur and ur[1] ? 1 : rb == 3 and ur and ur[1] and ur[2] ? 1 : rb == 4 and ur and ur[1] and ur[2] and ur[3] ? 1 : rb == 5 and ur and ur[1] and ur[2] and ur[3] and ur[4] ? 1 : 0
dnrsi = rb == 1 and dr ? 1 : rb == 2 and dr and dr[1] ? 1 : rb == 3 and dr and dr[1] and dr[2] ? 1 : rb == 4 and dr and dr[1] and dr[2] and dr[3] ? 1 : rb == 5 and dr and dr[1] and dr[2] and dr[3] and dr[4] ? 1 : 0

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

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > emabody / 4
dn = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > emabody / 4
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

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 00, 00)))
    
if time > timestamp(toyear, tomonth, today, 00, 00) or exit
    strategy.close_all()

Thêm nữa