Chiến lược VRSI so với MARSI


Ngày tạo: 2024-02-02 17:21:09 sửa đổi lần cuối: 2024-02-02 17:21:09
sao chép: 0 Số nhấp chuột: 970
1
tập trung vào
1617
Người theo dõi

Chiến lược VRSI so với MARSI

Tổng quan

Chiến lược VRSI và MARSI sử dụng moving average để làm mịn RSI, thực hiện một chiến lược hai chỉ số. Chiến lược này sử dụng cả RSI của giá và RSI của khối lượng giao dịch, kết hợp với moving average của nó để tạo ra tín hiệu giao dịch.

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

Chiến lược này đầu tiên tính toán chỉ số RSI 9 chu kỳ của giá ((RSI) và chỉ số RSI 9 chu kỳ của khối lượng giao dịch ((VRSI)). Sau đó tính toán trung bình di chuyển đơn giản 5 chu kỳ của hai chỉ số RSI ((MARSI và MAVRSI)).

Các tín hiệu giao dịch được tạo ra dựa trên chỉ số MARSI. Khi MARSI tăng, nó tăng, và khi MARSI giảm, nó giảm. Ngoài ra, chỉ số MAVRSI được sử dụng để đánh giá sức mạnh của thị trường và sự thay đổi xu hướng có thể.

Ví dụ, trong một tình huống đa đầu, nếu giá tiếp tục tăng nhưng khối lượng giao dịch giảm, điều này cho thấy sức mạnh của đa đầu có thể suy yếu, nên chuẩn bị bằng. Ngược lại, trong một tình huống trống đầu, nếu giá tiếp tục giảm nhưng khối lượng giao dịch tăng, điều này cho thấy sức mạnh của trống đầu tăng lên, bạn có thể tiếp tục giữ vé.

Phân tích lợi thế

Chiến lược này kết hợp với đường trung bình di chuyển của hai chỉ số RSI để nắm bắt xu hướng một cách hiệu quả, đồng thời sử dụng sự thay đổi của khối lượng giao dịch để đánh giá sức mạnh của thị trường và tránh bị đặt. Chiến lược này có thể nắm bắt nhịp độ thị trường chính xác hơn so với chỉ số RSI đơn.

Việc sử dụng đường trung bình di chuyển cũng có thể lọc ra một số tiếng ồn, làm cho tín hiệu đáng tin cậy hơn. Ngoài ra, các thiết lập các tham số khác nhau như chu kỳ RSI và chu kỳ đường trung bình di chuyển cũng cung cấp khả năng tối ưu hóa chiến lược.

Phân tích rủi ro

Rủi ro chính của chiến lược này là có thể có sự lệch giữa các chỉ số kép. Khi có sự lệch giữa giá cả và khối lượng giao dịch, tín hiệu giao dịch cũng trở nên kém đáng tin cậy hơn. Khi đó cần phải đánh giá nhân tạo mối quan hệ giữa các chỉ số.

Một rủi ro khác là dễ bị đặt trong tình huống cân bằng. Khi giá được cân bằng ngang, chỉ số RSI dễ bị dao động lên xuống và gây ra tín hiệu giao dịch không cần thiết. Khi đó, bạn cần điều chỉnh tham số hoặc đánh giá vị trí tuyệt đối của chỉ số.

Hướng tối ưu hóa

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

  1. Điều chỉnh các tham số của chỉ số RSI và đường trung bình di chuyển để tìm ra sự kết hợp tốt nhất

  2. Thêm các quyết định điều kiện khác khi tạo tín hiệu giao dịch, ví dụ như tín hiệu đảo ngược được kích hoạt bởi chỉ số RSI ở khu vực quá mua quá bán có độ tin cậy cao hơn

  3. Tăng chiến lược dừng lỗ, thiết lập dừng di chuyển hoặc dừng chỉ số

  4. Kết hợp với các chỉ số khác, chẳng hạn như hình dạng K-line, chỉ số dao động, v.v. để tránh bị đặt

Tóm tắt

Chiến lược VRSI và MARSI kết hợp thành công các chỉ số RSI về giá cả và khối lượng giao dịch, so sánh và phán đoán giữa các chỉ số kép có thể cải thiện độ chính xác và tỷ lệ lợi nhuận của tín hiệu. Cài đặt tham số tối ưu và chiến lược dừng lỗ cũng cung cấp khả năng cho hoạt động ổn định của nó. Nói chung, chiến lược này sử dụng sự kết hợp giữa các chỉ số và đạt được hiệu suất cao hơn chỉ số RSI đơn lẻ.

Mã nguồn chiến lược
/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("VRSI-MARSI Strategy", shorttitle="(V/MA)RSI Str.", overlay=false, default_qty_type=strategy.percent_of_equity, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0, default_qty_value=5, initial_capital=100)

// RSI(close, ="RSI") and RSI(Volume, ="VRSI")
src = close, len = input(9, minval=1, title="Length RSI")
src2 = volume, len2 = input(9, minval=1, title="Length VRSI)")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
up2 = rma(max(change(src2), 0), len2)
down2 = rma(-min(change(src2), 0), len2)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

// MA(=Moving Average) of RSI(close, ="MARSI") and RSI(Volume, ="MAVRSI")
len3 = input(5, minval=1, title="Length MARSI")
marsi = sma(rsi, len3)
len4 = input(5, minval=1, title="Length MAVRSI")
marsi2 = sma(rsi2, len4)

// Plot: 
// Default plot of RSI and VRSI: not visible but can be made visible
// Default plot MARSI and MAVRSI: visible
p1 = plot(rsi, linewidth=2, transp=100, color=color.yellow, title="RSI")
p2 = plot(rsi2, linewidth=2, transp=100, color=color.orange, title="VRSI")
m1 = plot(marsi, color=(marsi>=0 ? (marsi[1] < marsi ? color.yellow : color.blue) : (marsi[1] < marsi ? color.yellow : color.blue) ), linewidth = 2, transp = 0, title="MARSI")
m2 = plot(marsi2, color=color.orange, linewidth = 2, transp = 0, title="MAVRSI")

// Color fill:
// Default color fill "RSI - VRSI": not visible but can be made visible
// Default color fill "MARSI - MAVRSI": visible
fill(p1,p2, color = rsi>rsi2 ? color.green : color.red, transp=100, title="BG RSI-VRSI")
fill(m1,m2, color = marsi>marsi2 ? color.green : color.red, transp=75, title="BG MARSI-MAVRSI")

// Lines:
h2=hline(20, color=color.green, linestyle=hline.style_dotted, title="Extreme Oversold Rsi")
h3=hline(30, color=color.black, linestyle=hline.style_dotted, title="Oversold Rsi")
h5=hline(50, color=color.yellow, linestyle=hline.style_dashed, title="Middle line")
h7=hline(70, color=color.black, linestyle=hline.style_dotted, title="Overbought Rsi")
h8=hline(80, color=color.red, linestyle=hline.style_dotted, title="Extreme Overbought Rsi")

// Color fill between Lines "20-30" and "70-80" represents the crossing of "MARSI" and "MAVRSI":
fill(h2, h3, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="20-30 BG color X MARSI/MAVRSI")
fill(h7, h8, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="70-80 BG color X MARSI/MAVRSI")

///Long Entry///
longCondition = marsi > marsi[1] 
if (longCondition)
    strategy.entry("Long", strategy.long)

///Long exit///
Xlong =input(true)
closeConditionLong = marsi < marsi[1] and Xlong
if (closeConditionLong)
    strategy.close("Long")

///Short Entry///
shortCondition = marsi < marsi[1] 
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
///Short exit///
Xshort =input(true)
closeConditionShort = marsi > marsi[1] and Xshort
if (closeConditionShort)
    strategy.close("Short")