이중 RSI 평균 역전 전략

저자:차오장, 날짜: 2023-10-23 15:46:33
태그:

img

전반적인 설명

이중 RSI 평균 반전 전략 (Dual RSI Mean Reversion Strategy) 은 두 개의 RSI 지표를 사용하여 서로 다른 시간 프레임에서 과반 구매 및 과반 판매 조건을 식별하는 트렌드 다음 전략이다. 이 전략은 과반 판매 조건 후에 길게 이동하고 과반 구매 조건 후에 짧게 이동하여 평균 반전을 활용하는 것을 목표로합니다. 이 전략은 하이킨-아시 촛불, RSI 지표 및 오픈 컬러 필터를 사용하여 거래 기회를 식별합니다.

전략 논리

이 전략은 서로 다른 기간을 가진 두 개의 RSI 지표를 사용합니다. 하나는 5 분 차트, 하나는 1 시간 차트입니다. RSI 지표의 경우 30 이하의 과판 수준과 70 이상의 과반 구매 수준이 식별됩니다.

그것은 RSI 값을 추적하고 RSI가 30 이하 또는 70 이상의 정의된 수의 바를 위해 RSI가 지속된 과판 또는 과입 상태를 나타내는 상황을 찾습니다.

또한, 그것은 하이킨-아시 촛불을 사용하고 거래에 들어가기 전에 트렌드 방향을 확인하기 위해 정의된 수의 녹색 또는 빨간 촛불을 검사합니다. 열린 색상 필터는 잘못된 신호를 피하는 데 도움이됩니다.

RSI와 하이킨-아시 조건이 모두 일치하면 전략은 지나치게 팔린 조건에 따라 길게 또는 지나치게 구매 된 조건에 따라 짧게 이동하여 평균으로 회귀 할 것입니다.

거래는 하루가 끝나면 닫습니다. 하루가 지나지 않아야 합니다.

장점

  • 과도한 구매/대판 조건을 식별하기 위해 다중 시간 프레임 접근법을 사용합니다.
  • 하이킨-아시 촛불 은 소음을 필터링 하여 추세 방향 을 파악 한다
  • 열색 필터는 잘못된 신호를 피합니다.
  • 명확한 출입/출입 규칙
  • 각 일일 종료 전에 포지션을 폐쇄함으로써 리스크 관리

위험성

  • RSI 과잉 구매/ 과잉 판매 신호 이후 강한 추세가 지속될 경우 Whipsaws가 가능합니다.
  • 시장 격차는 정지로 이어질 수 있습니다.
  • 하이킨-아시 지연은 거래 출입을 지연시키고 놓친 움직임을 일으킬 수 있습니다.
  • 하루 말 포지션 폐쇄는 오버나이트 홀드에서 잠재적 인 이익을 포기합니다.

개선

  • 부피나 변동성 같은 추가 필터를 추가하여 신호를 확인합니다.
  • RSI 기간 및 상품의 과잉 매수/ 과잉 판매 수준을 최적화
  • 변동성에 기초한 동적 포지션 크기를 고려하십시오.
  • 하루 끝 출구 대신 수익 목표 또는 후속 정지 실험
  • 다른 기기에 대한 시험 효과 및 조절 매개 변수

결론

이중 RSI 평균 반전 전략은 거래 동력에 대한 규칙 기반의 접근 방식을 취한다. 두 가지 시간 프레임, 과잉 구매 / 과잉 판매 지표, 촛불 분석 및 엔트리 필터를 결합하여 높은 확률의 평균 반전 설정을 식별하는 것을 목표로합니다. 엄격한 위험 관리 및 신중한 위치 사이징은 인수와 마감 관리의 균형을 잡는데 도움이됩니다. 추가 최적화 및 견고성 테스트는 다양한 시장에서 성공적으로 배치하는 데 도움이 될 것입니다.


/*backtest
start: 2023-09-01 00:00:00
end: 2023-09-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Gidra
//2018

//@version=2
strategy(title = "Gidra's Vchain Strategy v0.1", shorttitle = "Gidra's Vchain Strategy v0.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
rsiperiod = input(14, defval = 14, minval = 2, maxval = 100, title = "RSI period")
rsilimit = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI limit")
rsibars = input(3, defval = 3, minval = 1, maxval = 20, title = "RSI signals")
useocf = input(true, defval = true, title = "Use Open Color Filter")
openbars = input(2, defval = 2, minval = 1, maxval = 20, title = "Open Color, Bars")
showrsi = input(true, defval = true, title = "Show indicator RSI")
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")


//Heikin Ashi Open/Close Price
o=open
c=close
h=high
l=low
haclose = (o+h+l+c)/4
haopen = na(haopen[1]) ? (o + c)/2 : (haopen[1] + haclose[1]) / 2
hahigh = max (h, max(haopen,haclose))
halow = min (l, min(haopen,haclose))
col=haopen>haclose ? red : lime
plotcandle(haopen, hahigh, halow, haclose, title="heikin", color=col)

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0

//RSI condition
rsidnok = highest(rsidn, rsibars) == 1? 1 : 0
rsiupok = highest(rsiup, rsibars) == 1? 1 : 0

//Color Filter
bar = haclose > haopen ? 1 : haclose < haopen ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
openrbarok = sma(gbar, openbars) == 1 or useocf == false
opengbarok = sma(rbar, openbars) == 1 or useocf == false

//Signals
up = openrbarok and rsidnok
dn = opengbarok and rsiupok

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Indicator RSI
colbg = showrsi == false ? na : rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59)// or exit
    strategy.close_all()

더 많은