다중 기간 RSI 지표 기반 반전 전략


생성 날짜: 2023-09-14 20:42:55 마지막으로 수정됨: 2023-09-14 20:42:55
복사: 1 클릭수: 735
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이 문서에서는 다중 주기 RSI 지표를 사용하여 역점을 판단하는 양적 거래 전략에 대해 자세히 설명합니다. 이 전략은 동시에 여러 RSI 지표를 분석하여 시장의 전환점을 식별합니다.

1 전략

이 전략은 3개의 세트의 RSI 지표를 사용하여 다음과 같은 특정 논리를 사용합니다.

  1. 2주기, 7주기, 14주기 RSI를 계산합니다.

  2. RSI-2이 10보다 작고, RSI-7이 20보다 작고, RSI-14이 30보다 작으면 바닥이 형성된다고 판단한다.

  3. RSI-2가 90보다 크면, RSI-7가 80보다 크면, RSI-14가 70보다 크면 꼭대기 형성으로 판단한다.

  4. RSI 지표의 일관성에 따라 구매/판매 신호를 생성한다.

  5. 지표 일관성 요구 사항의 파라미터를 미리 설정하여 신호의 빈도를 제어할 수 있다.

이렇게 하면, 다중 주기 RSI 지표의 집합적 분석을 통해, 반전점의 판단 정확도를 향상시킬 수 있다.

2 전략적 장점

이 전략의 가장 큰 장점은 다중 주기 RSI 지표를 사용하여 집합 분석을 수행하는 것입니다. 이것은 핵심 지점의 판단 정확도를 높이고 잘못된 신호를 제거 할 수 있습니다.

또 다른 장점은 일관성 매개 변수를 조정하여 거래 빈도를 제어하여 다른 시장 환경에 적응할 수 있다는 것입니다.

마지막으로, 다른 주기 RSI의 조합은 더 많은 변수 공간을 최적화 할 수 있습니다.

  1. 잠재적인 위험

그러나 이 전략에는 다음과 같은 위험도 있습니다.

우선, RSI가 가격 반향을 판단하는 것은 그 자체로 뒤처진 문제입니다.

두 번째, 다중 지표 조합으로 인한 신호 판단이 어렵고 명확한 필터링 규칙이 필요합니다.

마지막으로, 반전 거래는 실패율이 있기 때문에 심리적으로 준비해야 합니다.

네 가지 내용

이 글은 여러 주기 RSI 지표에 기반한 반전점을 식별하는 양적 거래 전략에 대해 자세히 소개한다. RSI 지표의 일관성을 판단함으로써 시장의 반전점을 식별하는 능력을 향상시킨다. 그러나 또한 지연 문제와 신호 판단 오류를 방지해야 한다.

전략 소스 코드
/*backtest
start: 2023-09-06 00:00:00
end: 2023-09-13 00:00:00
period: 45m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Triple RSI Top/Bottom v1.1", shorttitle = "3RSI Top/Bottom 1.1", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
leverage = input(1, defval = 1, minval = 1, maxval = 100, title = "leverage")
indi = input(3, defval = 3, minval = 1, maxval = 3, title = "Indicators")
accuracy = input(3, defval = 3, minval = 1, maxval = 10, title = "accuracy")
fromyear = input(1900, defval = 1900, 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")

//RSI-2
fastup = rma(max(change(close), 0), 2)
fastdown = rma(-min(change(close), 0), 2)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//RSI-7
middleup = rma(max(change(close), 0), 7)
middledown = rma(-min(change(close), 0), 7)
middlersi = middledown == 0 ? 100 : middleup == 0 ? 0 : 100 - (100 / (1 + middleup / middledown))

//RSI-14
slowup = rma(max(change(close), 0), 14)
slowdown = rma(-min(change(close), 0), 14)
slowrsi = slowdown == 0 ? 100 : slowup == 0 ? 0 : 100 - (100 / (1 + slowup / slowdown))

//Body
body = abs(close - open)
abody = sma(body, 10)

//Signals
acc = 10 - accuracy
signalup1 = fastrsi < (5 + acc) ? 1 : 0
signalup2 = middlersi < (10 + acc * 2) ? 1 : 0
signalup3 = slowrsi < (15 + acc * 3) ? 1 : 0

signaldn1 = fastrsi > (95 - acc) ? 1 : 0
signaldn2 = middlersi > (90 - acc * 2) ? 1 : 0
signaldn3 = slowrsi > (85 - acc * 3) ? 1 : 0

up = signalup1 + signalup2 + signalup3 >= indi
dn = signaldn1 + signaldn2 + signaldn3 >= indi
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 3

//Trading
lot = strategy.position_size == 0 ? strategy.equity / close * leverage : lot[1]

if up
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Bottom", strategy.long, needlong == false ? 0 : lot)

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