이 전략은 시장이 극단적으로 과소매 또는 과소매 수준에 도달했는지 여부를 결정하기 위해 서로 다른 기간에 세 가지 RSI 지표를 사용하여 그에 따라 구매 및 판매 신호를 생성합니다. 주로 다른 시간 프레임에 걸쳐 지표의 조합을 관찰하여 시장 추세를 판단합니다.
이 전략은 2주기, 7주기 및 14주기 RSI 지표를 동시에 사용합니다. 세 가지 RSI 지표 모두 동시에 과반 구매 또는 과반 판매 신호를 표시하면 거래 신호가 생성됩니다.
특히, 2 기간 RSI가 10보다 낮고, 7 기간 RSI가 20보다 낮고, 14 기간 RSI가 30보다 낮을 때, 시장은 과소매로 간주되며 구매 신호가 생성됩니다. 2 기간 RSI가 90 이상, 7 기간 RSI가 80 이상, 14 기간 RSI가 70 이상일 때 시장은 과소매로 간주되며 판매 신호가 생성됩니다.
이 코드는 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()