Chiến lược giao dịch tương lai hợp chất kiểm soát rủi ro RSI nhanh

Tác giả:ChaoZhang, Ngày: 2023-11-13 11:36:34
Tags:

img

Tổng quan

Chiến lược này được thiết kế cho nền tảng giao dịch tại chỗ BitMEX. Bằng cách phân tích chỉ số RSI nhanh và kết hợp nhiều chỉ số kỹ thuật để màn hình tín hiệu, nó nhận ra giao dịch theo dõi xu hướng hiệu quả. Chiến lược cũng thiết lập cơ chế quản lý rủi ro và dừng lỗ để kiểm soát hiệu quả rủi ro giao dịch.

Chiến lược logic

  1. Tính toán chỉ số RSI nhanh với các thông số 7 ngày và đường mua quá mức 25, đường bán quá mức 75. Khi chỉ số RSI vượt qua đường mua quá mức, đó là tín hiệu mua quá mức. Khi chỉ số RSI vượt dưới đường bán quá mức, đó là tín hiệu bán quá mức.

  2. Thiết lập bộ lọc trên thân nến. yêu cầu mở như nến giảm với chiều dài thân không ít hơn 20% chiều dài cơ thể trung bình ngày hôm qua.

  3. Đặt bộ lọc trên màu nến. Yêu cầu 4 nến cuối cùng như giảm khi đi ngắn, và 4 nến cuối cùng như tăng khi đi dài.

  4. Thiết lập logic dừng lỗ. Đóng vị trí khi giá di chuyển theo hướng không thuận lợi.

  5. Chỉ nhận tín hiệu khi giá phục hồi để dừng mức thua lỗ sau khi di chuyển ban đầu.

  6. Sử dụng tỷ lệ phần trăm cố định của vốn cho mỗi giao dịch, và kích thước vị trí gấp đôi sau mỗi lỗ.

Phân tích lợi thế

  1. Các thông số RSI nhanh được thiết lập hợp lý có thể nhanh chóng nắm bắt xu hướng. Kết hợp với thân cây nến và bộ lọc màu sắc có thể ngăn chặn sự đột phá sai một cách hiệu quả.

  2. Bộ lọc đa lớp tăng tỷ lệ thắng bằng cách giảm số lượng giao dịch.

  3. Định giá của các loại giao dịch

  4. Định dạng vị trí năng động thực hiện quản lý vốn tích cực vừa phải.

  5. Khung thời gian giao dịch tùy chỉnh tránh tiếng ồn từ các sự kiện lớn.

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

  1. Tốc độ cao có thể bỏ lỡ một số cơ hội giao dịch. Có thể thư giãn các tham số để linh hoạt hơn.

  2. Khó xác định kết thúc xu hướng. xem xét kết hợp với các chỉ số khác để phát hiện sự đảo ngược tiềm năng.

  3. Phương pháp định kích thước vị trí quá hung hăng, có thể giới thiệu cách khóa vị trí.

  4. Có thể tối ưu hóa các tham số cho các thị trường khác nhau để tìm kết hợp các tham số tốt hơn.

Kết luận

Nhìn chung, chiến lược này khá mạnh mẽ. Bằng cách đánh giá hướng xu hướng với RSI nhanh và lọc tín hiệu với nhiều chỉ số, nó có thể có được lợi nhuận tốt trong xu hướng. Ngoài ra, chiến lược có không gian tối ưu hóa. Bằng cách điều chỉnh sự kết hợp các tham số, nó có thể thích nghi với các môi trường thị trường khác nhau, do đó có tính thực tế tốt.


/*backtest
start: 2023-11-05 00:00:00
end: 2023-11-12 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Robot BitMEX Fast RSI v1.0", shorttitle = "Robot BitMEX Fast RSI v1.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(true, defval = true, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 100, title = "RSI Period")
rsilimit = input(25, defval = 25, minval = 1, maxval = 30, title = "RSI limit")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
useocf = input(true, defval = true, title = "Use Open Color Filter")
useccf = input(true, defval = true, title = "Use Close Color Filter")
openbars = input(4, defval = 4, minval = 1, maxval = 20, title = "Open Color Bars")
closebars = input(1, defval = 1, minval = 1, maxval = 20, title = "Close Color Bars")
useobf = input(true, defval = true, title = "Use Open Body Filter")
usecbf = input(true, defval = true, title = "Use Close Body Filter")
openbody = input(20, defval = 20, minval = 0, maxval = 1000, title = "Open Body Minimum, %")
closebody = input(50, defval = 50, minval = 0, maxval = 1000, title = "Close Body Minimum, %")
usecnf = input(true, defval = true, title = "Use Close Norma 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")

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0
rsidnok = sma(rsidn, rsibars) == 1
rsiupok = sma(rsiup, rsibars) == 1

//Body Filter
body = abs(close - open)
abody = sma(body, 10)
openbodyok = body >= abody / 100 * openbody or useobf == false
closebodyok = body >= abody / 100 * closebody or usecbf == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
opengbarok = sma(gbar, openbars) == 1 or useocf == false
openrbarok = sma(rbar, openbars) == 1 or useocf == false
closebarok = (strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1) or useccf == false

//Norma Filter
norma = (rsi > dnlimit and rsi < uplimit) or usecnf == false

//Signals
up = openrbarok and rsidnok and openbodyok and (strategy.position_size == 0 or close < strategy.position_avg_price)
dn = opengbarok and rsiupok and openbodyok and (strategy.position_size == 0 or close > strategy.position_avg_price)
exit = ((strategy.position_size > 0 and closebarok and norma) or (strategy.position_size < 0 and closebarok and norma)) and closebodyok

//Indicator
plot(rsi, color = blue, linewidth = 3, title = "Double RSI")
plot(uplimit, color = black, title = "Upper Line")
plot(dnlimit, color = black, title = "Lower Line")
colbg = rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//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 up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

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

Thêm nữa