Chiến lược chuyển đổi RSI nhanh của Noro v1.7


Ngày tạo: 2023-12-22 15:10:40 sửa đổi lần cuối: 2023-12-22 15:10:40
sao chép: 0 Số nhấp chuột: 701
1
tập trung vào
1623
Người theo dõi

Chiến lược chuyển đổi RSI nhanh của Noro v1.7

Tổng quan

Chiến lược chuyển đổi RSI nhanh của Noro là một chiến lược giao dịch định lượng sử dụng chỉ số RSI để xác định cơ hội mua quá mức. Chiến lược này kết hợp hình thức K-line, lọc đồng nhất và phương pháp dừng để kiểm soát rủi ro.

Chiến lược này dựa trên một số thành phần quan trọng:

  1. Chỉ số RSI nhanh: được sử dụng để xác định cơ hội mua quá mức
  2. Hình dạng đường K: kết hợp các thực thể đường K và đường dương và đường dương, hỗ trợ phán đoán xu hướng
  3. Bộ lọc đường trung bình: Sử dụng đường trung bình SMA để lọc và tránh tín hiệu giả
  4. Cơ chế dừng lỗ: kết hợp các vùng giới hạn RSI để thực hiện dừng lỗ

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

Chiến lược chuyển đổi RSI nhanh của Noro chủ yếu đánh giá các tín hiệu mua và bán sau:

  1. RSI nhanh vượt qua tín hiệu bán tháo: tạo ra tín hiệu giao dịch khi RSI nhanh vượt qua giới hạn trên hoặc vượt qua giới hạn dưới.

  2. Tín hiệu hình dạng đường K: kết hợp kích thước thực thể đường K, hướng đường dương, xu hướng, hỗ trợ tín hiệu RSI nhanh.

  3. Tín hiệu lọc đường trung bình: kết hợp với hướng đường trung bình của SMA, tránh bị phá vỡ giả.

  4. Tín hiệu dừng lỗ: Hạn chế lỗ khi RSI nhanh trở lại vượt qua giới hạn trên hoặc dưới của nó

Cụ thể, chiến lược này dựa trên phạm vi mua bán quá mức của RSI nhanh để đánh giá cơ hội giao dịch. Khi RSI nhanh vượt qua giới hạn dưới, nó được coi là tín hiệu bán quá mức; Khi RSI nhanh vượt qua giới hạn trên, nó được coi là tín hiệu mua quá mức.

Để tránh tiếng ồn, chiến lược này bao gồm các phán đoán phụ sau:

  1. K-line entity size: K-line entity càng lớn, xu hướng càng rõ rệt
  2. Đường dương-trái: Xác định xu hướng của đường K
  3. Đường trung bình SMA: lọc tín hiệu phá vỡ giả
  4. Hạn chế: Hạn chế khi RSI nhanh quay trở lại khu vực giới hạn

Vì vậy, chiến lược này kết hợp RSI nhanh, K-line, đường trung bình và dừng để đưa ra quyết định giao dịch.

Lợi thế chiến lược

Chiến lược này có một số ưu điểm:

  1. RSI nhanh có độ nhạy cao: có thể nhanh chóng nắm bắt cơ hội mua và bán quá mức
  2. K-Line và H-Line: Tránh giao dịch ồn ào
  3. Tự động dừng lỗ: có thể dừng lỗ kịp thời, kiểm soát rủi ro
  4. Khả năng giao dịch ngắn hạn: Khả năng giao dịch ngắn hạn như 1 giờ, 30 phút
  5. Dễ tối ưu hóa: có thể điều chỉnh các tham số để phù hợp với thị trường khác nhau

Rủi ro chiến lược

Chiến lược này cũng có một số rủi ro:

  1. Có thể xảy ra dừng liên tục: Trong trường hợp rung động, sẽ có nhiều tín hiệu dừng
  2. Các tham số cần được tối ưu hóa: các tham số cần được điều chỉnh cho các chu kỳ và giống khác nhau
  3. Không thể hoàn toàn tránh được tổn thất: Việc dừng lỗ kịp thời cũng có thể dẫn đến một mức độ tổn thất.

Để giảm thiểu rủi ro, có thể tối ưu hóa các khía cạnh sau:

  1. Tối ưu hóa các tham số RSI nhanh để giảm tiếng ồn giao dịch
  2. Tối ưu hóa vị trí dừng lỗ, kiểm soát lỗ đơn
  3. Thêm mô-đun quản lý tài chính, phân tán rủi ro

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

Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:

  1. Tăng chiến lược dừng lại: dừng lại sau khi lợi nhuận đạt đến một mức nhất định, khóa một phần lợi nhuận
  2. Tăng quản lý vốn: thêm các phương tiện quản lý như kiểm soát vị trí, phân tán rủi ro
  3. Tối ưu hóa các tham số khác nhau: điều chỉnh các tham số chỉ số để kiểm tra hiệu quả của các chu kỳ khác nhau
  4. Tăng học máy: Sử dụng thuật toán để tự động tối ưu hóa tham số, thích ứng với sự thay đổi của thị trường
  5. Kiểm tra đa giống: Kiểm tra sức mạnh của chiến lược trên nhiều giống hơn

Việc tiếp tục cải thiện chiến lược này thông qua các phương pháp như chặn, quản lý rủi ro, tối ưu hóa tham số và học máy có thể làm tăng đáng kể tính ổn định của chiến lược.

Tóm tắt

Nhìn chung, chiến lược chuyển đổi RSI nhanh của Noro kết hợp các chỉ số RSI nhanh với các chỉ số kỹ thuật đường K hỗ trợ, để thực hiện một chiến lược giao dịch ngắn để đánh giá quá mua quá bán. Chiến lược này đáp ứng nhanh chóng và dễ dàng tối ưu hóa, đồng thời thêm mô-đun dừng lỗ để kiểm soát rủi ro.

Mã nguồn chiến lược
/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-18 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 v1.7", shorttitle = "Fast RSI str 1.7", 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, %")
usersi = input(true, defval = true, title = "Use Fast RSI Strategy")
usemm = input(true, defval = true, title = "Use Min/Max Strategy")
usebc = input(true, defval = true, title = "Use BarColor Strategy")
usesma = input(false, defval = false, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast 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), fast)
fastdown = rma(-min(change(rsisrc), 0), fast)
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)
abody = sma(body, 10)

//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 > abody / 5 and usersi
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > abody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and fastrsi < 70 and usemm
dn2 = maxs and (close < sma or usesma == false) and fastrsi > 30 and usemm 
up3 = sma(bar, 2) == -1 and usebc
dn3 = sma(bar, 2) == 1 and usebc
exit = (((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) 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 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()