Chiến lược VRSI và MARSI

Tác giả:ChaoZhang, Ngày: 2024-02-02 17:21:09
Tags:

img

Tổng quan

Chiến lược VRSI và MARSI sử dụng đường trung bình động để làm mịn các chỉ số RSI và thực hiện một chiến lược chỉ số kép. Nó sử dụng cả chỉ số RSI của giá và khối lượng, kết hợp với đường trung bình động của chúng, để tạo ra tín hiệu giao dịch. Nó đi dài khi giá RSI tăng và đi ngắn khi giá RSI giảm. Trong khi đó, nó quan sát những thay đổi trong khối lượng RSI để đánh giá sức mạnh của thị trường và những thay đổi xu hướng có thể xảy ra.

Chiến lược logic

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

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

Ví dụ, trong một xu hướng tăng, nếu giá tiếp tục tăng nhưng khối lượng bắt đầu giảm, điều này báo hiệu rằng sức mạnh tăng có thể đang suy yếu và người ta nên chuẩn bị để đóng các vị trí dài. Ngược lại, trong một xu hướng giảm, nếu giá tiếp tục giảm nhưng khối lượng tăng, điều này báo hiệu tăng cường sức mạnh giảm và các vị trí ngắn có thể được giữ thêm.

Phân tích lợi thế

Bằng cách kết hợp các đường trung bình động của các chỉ số RSI kép, chiến lược này có thể nắm bắt hiệu quả xu hướng, trong khi sử dụng thay đổi khối lượng để đánh giá sức mạnh thị trường và tránh bị mắc kẹt.

Việc sử dụng đường trung bình động cũng lọc ra một số tiếng ồn để làm cho các tín hiệu đáng tin cậy hơn. Ngoài ra, các thiết lập tham số khác nhau như thời gian RSI và thời gian trung bình độ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 lớn của chiến lược này nằm ở sự khác biệt có thể xảy ra giữa các chỉ số kép. Khi có sự khác biệt giữa giá và khối lượng, các tín hiệu giao dịch có thể trở nên kém đáng tin cậy hơn.

Một rủi ro khác là bị mắc kẹt trong các thị trường giới hạn phạm vi. Khi giá di chuyển trong phạm vi, chỉ số RSI có xu hướng dao động lên xuống, kích hoạt các giao dịch không cần thiết. Điều chỉnh tham số hoặc đánh giá mức độ tuyệt đối của các chỉ số sau đó là cần thiết.

Hướng dẫn tối ưu hóa

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

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

  2. Thêm các điều kiện khác khi tạo tín hiệu, ví dụ: tín hiệu đảo ngược được kích hoạt trong khu vực mua quá mức / bán quá mức có xu hướng đáng tin cậy hơn

  3. Thêm các chiến lược dừng lỗ như dừng lỗ di chuyển hoặc chỉ báo dừng lỗ

  4. Bao gồm các chỉ số khác ví dụ như mô hình nến, chỉ số biến động vv để tránh bẫy

Tóm lại

Chiến lược VRSI và MARSI kết hợp thành công các chỉ số RSI của giá và khối lượng. So sánh và đánh giá giữa các chỉ số kép có thể cải thiện độ chính xác và lợi nhuận của tín hiệu. Tối ưu hóa tham số và chiến lược dừng lỗ cũng làm cho hoạt động ổn định có thể. Tóm lại, bằng cách kết hợp các chỉ số, chiến lược này đạt được hiệu suất vượt trội so với một chỉ số RSI duy nhất.


/*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")
    

Thêm nữa