이 문서에서는 다중 주기 RSI 지표를 사용하여 역점을 판단하는 양적 거래 전략에 대해 자세히 설명합니다. 이 전략은 동시에 여러 RSI 지표를 분석하여 시장의 전환점을 식별합니다.
1 전략
이 전략은 3개의 세트의 RSI 지표를 사용하여 다음과 같은 특정 논리를 사용합니다.
2주기, 7주기, 14주기 RSI를 계산합니다.
RSI-2이 10보다 작고, RSI-7이 20보다 작고, RSI-14이 30보다 작으면 바닥이 형성된다고 판단한다.
RSI-2가 90보다 크면, RSI-7가 80보다 크면, RSI-14가 70보다 크면 꼭대기 형성으로 판단한다.
RSI 지표의 일관성에 따라 구매/판매 신호를 생성한다.
지표 일관성 요구 사항의 파라미터를 미리 설정하여 신호의 빈도를 제어할 수 있다.
이렇게 하면, 다중 주기 RSI 지표의 집합적 분석을 통해, 반전점의 판단 정확도를 향상시킬 수 있다.
2 전략적 장점
이 전략의 가장 큰 장점은 다중 주기 RSI 지표를 사용하여 집합 분석을 수행하는 것입니다. 이것은 핵심 지점의 판단 정확도를 높이고 잘못된 신호를 제거 할 수 있습니다.
또 다른 장점은 일관성 매개 변수를 조정하여 거래 빈도를 제어하여 다른 시장 환경에 적응할 수 있다는 것입니다.
마지막으로, 다른 주기 RSI의 조합은 더 많은 변수 공간을 최적화 할 수 있습니다.
그러나 이 전략에는 다음과 같은 위험도 있습니다.
우선, 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()