Chiến lược giao dịch hợp chất kiểm soát rủi ro dựa trên RSI nhanh


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

Chiến lược giao dịch hợp chất kiểm soát rủi ro dựa trên RSI nhanh

Tổng quan

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

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

  1. Tính RSI nhanh, tham số được thiết lập là đường 7 ngày, đường mua quá mức 25, đường bán quá mức 75. Khi RSI vượt qua đường mua quá mức, là tín hiệu mua quá mức; Khi RSI vượt qua đường bán quá mức, là tín hiệu bán quá mức.

  2. Cài đặt lọc đối với thực thể K-line. Yêu cầu mở ổ đĩa là âm, chiều dài thực thể không nhỏ hơn 20% của thực thể trung bình ngày hôm qua.

  3. Chọn màu sắc của dòng K. Yêu cầu 4 dòng K gần nhất là âm và 4 dòng K gần nhất là dương.

  4. Cài đặt logic dừng lỗ. Khi giá di chuyển theo hướng bất lợi, dừng lỗ bằng đồng.

  5. Thiết lập cơ chế chống phản hồi. Khi giá di chuyển theo hướng thuận lợi đạt đến đường dừng lỗ, hãy gửi tín hiệu một lần nữa để đặt hàng.

  6. Thiết lập quản lý tài chính. Sử dụng phần trăm tiền cố định để xây dựng kho, mỗi lần mất một vị trí tăng gấp đôi.

Phân tích lợi thế

  1. Các tham 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ực thể K-line và phán đoán màu sắc, có thể lọc hiệu quả phá vỡ giả.

  2. Có nhiều lớp lọc tín hiệu, có thể làm giảm số lần giao dịch và tăng tỷ lệ thắng.

  3. Chiến lược có cơ chế dừng lỗ tích hợp, có thể kiểm soát hiệu quả tổn thất đơn lẻ.

  4. Sử dụng điều chỉnh vị thế động để quản lý tài chính cực đoan.

  5. Có thể tùy chỉnh khoảng thời gian giao dịch để tránh những cú sốc từ các sự kiện lớn.

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

  1. Tốc độ quá nhanh có thể làm mất cơ hội giao dịch.

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

  3. Phương pháp điều chỉnh vị trí quá quyết liệt, có thể giới thiệu phương pháp khóa vị trí.

  4. Các tham số có thể được điều chỉnh theo các thị trường khác nhau để đạt được sự kết hợp tốt hơn.

Tóm tắt

Chiến lược này khá ổn định, có thể nhận được lợi nhuận tốt hơn trong xu hướng bằng cách đánh giá xu hướng của xu hướng RSI nhanh, kết hợp với tín hiệu lọc của nhiều chỉ số kỹ thuật. Đồng thời, chiến lược có một số không gian tối ưu hóa, có thể thích ứng với các môi trường thị trường khác nhau bằng cách điều chỉnh các tham số, có tính thực tiễn mạnh mẽ.

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