트리플 RSI 극한 거래 전략

저자:차오장, 날짜: 2023-11-02 14:34:21
태그:

img

전반적인 설명

이 전략은 시장이 극단적으로 과소매 또는 과소매 수준에 도달했는지 여부를 결정하기 위해 서로 다른 기간에 세 가지 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()

더 많은