Chiến lược đột phá thứ cấp của chỉ báo RSI nhanh


Ngày tạo: 2023-11-07 16:56:39 sửa đổi lần cuối: 2023-11-07 16:56:39
sao chép: 0 Số nhấp chuột: 737
1
tập trung vào
1617
Người theo dõi

Chiến lược đột phá thứ cấp của chỉ báo RSI nhanh

Tổng quan

Chiến lược này thực hiện nhiều đợt phá giá bằng cách đặt các tham số cho chỉ số RSI nhiều lần, để có được tín hiệu nhập và thoát chính xác hơn.

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

Chiến lược này đặt hai nhóm tham số RSI, RSI chu kỳ là 7, RSI chu kỳ là 25, RSI chu kỳ là 14, RSI chu kỳ là 25, RSI chu kỳ là 25.

Chiến lược đầu tiên tính giá trị của hai nhóm chỉ số RSI, sau đó đánh giá xem giá có phá vỡ giới hạn trên hoặc dưới của RSI hay không. Nếu phá vỡ giới hạn trên, sẽ tạo ra tín hiệu làm nhiều và nếu phá vỡ giới hạn dưới, sẽ tạo ra tín hiệu làm hỏng.

Nếu đã nắm giữ vị trí, nó sẽ tiếp tục đánh giá liệu RSI hiện tại có nằm trong phạm vi bình thường hay không. Nếu RSI bình thường và thực thể phá vỡ một nửa đường trung bình, nó sẽ tạo ra tín hiệu thoát.

Chiến lược này cũng sử dụng hệ thống Martingale. Mỗi lần thua lỗ, khối lượng giao dịch sẽ tăng gấp đôi.

Phân tích lợi thế

  • Sử dụng hai nhóm chỉ số RSI, bạn có thể xác định chính xác hơn các tín hiệu phá vỡ và tránh phá vỡ giả.

  • Trong khi đó, kiểm tra các lỗ hổng thực thể để tránh giao dịch sai trong thời gian chấn động.

  • Sử dụng Martingale, bạn có thể dừng lỗ nhanh chóng sau khi mất mát.

  • Có thể tùy chỉnh các tham số RSI để tối ưu hóa cơ hội nhập học.

  • Có thể giới hạn thời gian giao dịch để tránh ảnh hưởng của các sự kiện lớn.

Phân tích rủi ro

  • Chỉ số RSI đôi không thể hoàn toàn tránh được sự phá vỡ giả.

  • Trong khi đó, các nhà đầu tư khác cũng có xu hướng mở rộng vị thế của mình khi họ thua lỗ.

  • Không tính đến chi phí giao dịch.

  • Có nhiều tham số có thể tối ưu hóa, cần nhiều thử nghiệm để tìm ra sự kết hợp tham số tối ưu nhất.

Bạn có thể đặt lệnh dừng để hạn chế lỗ; tối ưu hóa các tham số RSI; thêm các cân nhắc về chi phí; và giải phóng thích hợp để xác định đột phá.

Hướng tối ưu hóa chiến lược

  • Thêm vào đó, các cơ chế ngăn chặn thiệt hại có thể hạn chế thiệt hại tối đa.

  • Tối ưu hóa các tham số RSI để tìm các tham số tốt nhất để giảm đột phá giả.

  • Cân nhắc chi phí giao dịch và tránh giao dịch quá thường xuyên.

  • Các doanh nghiệp sẽ có cơ hội giao dịch nhiều hơn.

  • Thêm một bộ lọc cho các chỉ số khác để tránh bị mắc kẹt.

Tóm tắt

Chiến lược này sử dụng chỉ số RSI kép để xác định giá phá vỡ, kết hợp với xác định phá vỡ thực thể, tránh bị mắc kẹt trong thị trường biến động. Đồng thời sử dụng Martingale để dừng lỗ nhanh. Chiến lược này có thể nhận được tín hiệu giao dịch chính xác hơn bằng cách tối ưu hóa tham số và thêm bộ lọc chỉ số.

Mã nguồn chiến lược
/*backtest
start: 2023-10-30 00:00:00
end: 2023-11-06 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Fast RSI Strategy v2.0", shorttitle = "Fast RSI str 2.0", overlay = true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usersi1 = input(true, defval = true, title = "Use RSI #1")
rsiperiod1 = input(7, defval = 7, minval = 2, maxval = 50, title = "#1 RSI Period")
rsilimit1 = input(25, defval = 25, minval = 1, maxval = 100, title = "#1 RSI limit")
usersi2 = input(true, defval = true, title = "Use RSI #2")
rsiperiod2 = input(14, defval = 14, minval = 2, maxval = 50, title = "#2 RSI Period")
rsilimit2 = input(25, defval = 25, minval = 1, maxval = 100, title = "#2 RSI limit")
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")

//RSI #1
uprsi1 = rma(max(change(close), 0), rsiperiod1)
dnrsi1 = rma(-min(change(close), 0), rsiperiod1)
rsi1 = dnrsi1 == 0 ? 100 : uprsi1 == 0 ? 0 : 100 - (100 / (1 + uprsi1 / dnrsi1))
uplimit1 = 100 - rsilimit1
dnlimit1 = rsilimit1

//RSI #2
uprsi2 = rma(max(change(close), 0), rsiperiod2)
dnrsi2 = rma(-min(change(close), 0), rsiperiod2)
rsi2 = dnrsi2 == 0 ? 100 : uprsi2 == 0 ? 0 : 100 - (100 / (1 + uprsi2 / dnrsi2))
uplimit2 = 100 - rsilimit2
dnlimit2 = rsilimit2

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi1 < dnlimit1 and body > abody / 5 and usersi1
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi1 > uplimit1 and body > abody / 5 and usersi1
up2 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and rsi2 < dnlimit2 and body > abody / 5 and usersi2
dn2 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and rsi2 > uplimit2 and body > abody / 5 and usersi2
norma = rsi1 > dnlimit1 and rsi1 < uplimit1 and rsi2 > dnlimit2 and rsi2 < uplimit2
exit = (((strategy.position_size > 0 and bar == 1 and norma) or (strategy.position_size < 0 and bar == -1 and norma)) and body > abody / 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
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 up1 or up2
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()