VRSI 및 MARSI 전략

저자:차오장, 날짜: 2024-02-02 17:21:09
태그:

img

전반적인 설명

VRSI 및 MARSI 전략은 RSI 지표를 매끄럽게하기 위해 움직이는 평균을 활용하고 이중 지표 전략을 구현합니다. 가격과 볼륨의 RSI 지표와 이동 평균을 결합하여 거래 신호를 생성합니다. 가격 RSI가 상승하면 길고 가격이 RSI가 떨어지면 짧습니다. 한편, 시장 강도 및 가능한 트렌드 변화를 판단하기 위해 볼륨 RSI의 변화를 관찰합니다.

전략 논리

이 전략은 먼저 가격의 9 기간 RSI 지표 (RSI) 와 9 기간 RSI 부피 지표 (VRSI) 를 계산합니다. 그 다음이 두 가지 RSI 지표의 5 기간 간단한 이동 평균 (MARSI 및 MAVRSI) 을 계산합니다.

거래 신호는 MARSI 지표에 기초하여 생성됩니다. MARSI가 상승하면 길고 MARSI가 떨어지면 짧습니다. 또한 MAVRSI 지표는 시장 강도 및 가능한 트렌드 변화를 판단하는 데 사용됩니다.

예를 들어, 상승 추세 중, 가격이 계속 상승하지만 볼륨이 감소하기 시작하면, 이것은 상승 힘이 약화 될 수 있음을 신호하며 긴 포지션을 닫을 준비를해야합니다. 반대로, 하락 추세 중, 가격이 계속 하락하지만 볼륨이 상승하면, 이것은 하락 힘을 강화하고 짧은 포지션을 계속 유지할 수 있음을 신호합니다.

이점 분석

이 전략은 이중 RSI 지표의 이동 평균을 결합함으로써 트렌드를 효과적으로 파악할 수 있으며, 시장 강도를 판단하고 함정에 빠지지 않도록 볼륨 변화를 사용하여 시장 리듬을 더 정확하게 파악 할 수 있습니다. 단일 RSI 지표와 비교하면이 전략은 시장 리듬을 더 정확하게 파악 할 수 있습니다.

이동 평균의 사용은 또한 신호를 더 신뢰할 수 있도록 약간의 소음을 필터합니다. 또한 RSI 기간과 이동 평균 기간과 같은 다른 매개 변수 설정은 전략 최적화의 가능성을 제공합니다.

위험 분석

이 전략의 주요 위험은 이중 지표들 사이에 발생할 수 있는 오차에 있다. 가격과 부피 사이에 오차가 있을 때, 거래 신호는 덜 신뢰할 수 있다. 그 때 지표들 사이의 관계에 대한 수동적인 판단이 필요하다.

또 다른 위험은 범위 제한 시장에 갇혀있다. 가격이 범위 내에서 움직일 때, RSI 지표는 필요없는 거래를 유발하여 상향 하향하는 경향이 있다. 그 때 매개 변수 조정 또는 지표의 절대 수준을 판단하는 것이 필요합니다.

최적화 방향

이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.

  1. 최적의 조합을 찾기 위해 RSI와 이동 평균의 매개 변수를 조정합니다.

  2. 신호를 생성 할 때 다른 조건을 추가하십시오. 예를 들어 과잉 구매 / 과잉 판매 영역에서 유발되는 반전 신호는 더 신뢰할 수 있습니다.

  3. 이동 중지 손실 또는 지표 중지 손실과 같은 중지 손실 전략을 추가

  4. 함정을 피하기 위해 촛불 패턴, 변동성 지표 등 다른 지표를 포함하십시오.

요약

VRSI 및 MARSI 전략은 가격과 부피의 RSI 지표를 성공적으로 결합합니다. 이중 지표 간의 비교와 판단은 신호 정확성과 수익성을 향상시킬 수 있습니다. 매개 변수 최적화 및 스톱 로스 전략 또한 안정적인 실행을 가능하게합니다. 요약하자면, 지표를 결합함으로써이 전략은 단일 RSI 지표보다 뛰어난 성능을 달성합니다.


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

더 많은