
이 전략은 동시에 세 개의 다른 주기 RSI 지표를 관찰하여 시장이 과매매 과매매의 극한 영역에 도달했는지 여부를 판단하여 구매 및 판매 신호를 발송합니다. 시장의 추세를 판단하는 주요 방법은 다양한 주기 지표의 조합을 관찰하여 수행됩니다.
이 전략은 동시에 2주기, 7주기, 14주기 RSI 지표를 이용한다. 3개의 RSI 지표가 동시에 오버 바이 또는 오버 세이 신호를 표시할 때 거래 신호를 발산한다.
구체적으로, 2주기 RSI가 10,7주기 RSI가 20,14주기 RSI가 30보다 작을 때, 시장이 과매매 상태에 있다고 생각하고, 구매 신호를 낸다. 2주기 RSI가 90,7주기 RSI가 80,14주기 RSI가 70보다 클 때, 시장이 과매 상태에 있다고 생각하고, 판매 신호를 낸다.
코드는 accuracy 파라미터를 통해 RSI의 오버 바이 오버 시드 판단 하위값을 미세 조정합니다. 3, 수치가 작을수록 오버 바이 오버 시드 판단이 더 엄격합니다.
구매 또는 판매 신호를 발신한 후, 가격이 당일 개시 가격을 거꾸로 돌파하면, 현재 포지션을 평행하고, 트렌드 추적 스톱로스를 실행한다.
다중 주기적 RSI 지표의 조합을 통해 시장의 과매매 상황을 더 정확하게 판단할 수 있으며, 가짜 신호를 필터링할 수 있다.
다른 변수를 미세 조정하여 과매매 판단 조건을 적용하여 시장에 따라 전략의 민감도를 조정할 수 있다.
오픈 가격 추적 스톱 로스를 구현하여 적시에 스톱 로스를 실행하여 수익을 잠금할 수 있다.
RSI 지표는 시장의 추세 전환을 판단하는 데 효과적이지 않습니다.
높은 변동성을 고려하여 RSI의 설정은 조정해야 합니다. 그렇지 않으면 자주 손실됩니다.
트리플 RSI가 동시에 발생하는 경우는 적고, 더 좋은 거래 기회를 놓칠 수도 있다.
과매매 판단의 매개 변수를 적절히 조정하여 다른 시장의 데이터 효과를 테스트하는 것이 좋습니다.
다른 지표들을 추가하는 것도 고려할 수 있습니다. 예를 들어, 브린 라인, KDJ 등이 RSI에서 벗어나는 것을 방지합니다.
RSI의 매개 변수는 다양한 유형의 상황에 따라 자동으로 최적화 될 수 있습니다.
ATR 중지 등 다른 중지 출구 조건을 테스트 할 수 있습니다.
거래 시기를 필터링하는 조건을 추가하여 부적절한 시기를 방지할 수 있습니다.
이 전략은 복합적인 다주기 RSI 지표를 통해 과매매 지역을 판단하고, 트렌드 추적을 시행한다. 장점은 판단 정확도를 높일 수 있고, 적시에 상실을 멈출 수 있다. 단점은 표를 빠뜨릴 수 있고, RSI 지표는 잘못 판단할 수 있다. 파라미터 최적화 테스트를 수행하고, 다른 지표와 함께 확인을 하는 것이 더 좋은 효과를 얻을 수 있다.
/*backtest
start: 2023-10-25 00:00:00
end: 2023-10-28 10:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Noro's Triple RSI Top/Bottom", shorttitle = "3RSI Top/Bottom", 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")
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))
//Signals
acc = 10 - accuracy
up = fastrsi < (5 + acc) and middlersi < (10 + acc * 2) and slowrsi < (15 + acc * 3)
dn = fastrsi > (95 - acc) and middlersi > (90 - acc * 2) and slowrsi > (85 - acc * 3)
exit = (strategy.position_size > 0 and close > open) or (strategy.position_size > 0 and close > open)
//Trading
if up
if strategy.position_size < 0
strategy.close_all()
strategy.entry("Bottom", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if dn
if strategy.position_size > 0
strategy.close_all()
strategy.entry("Top", strategy.short, needshort == false ? 0 : na, 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()