이 전략은 StochRSI 지표에 기초하여 개발됩니다. 전략은 주로 StochRSI 지표를 사용하여 과잉 구매 및 과잉 판매 상황을 판단합니다. 일부 잘못된 신호를 필터링하기 위해 RSI 지표와 결합하여, StochRSI 지표가 과잉 구매 지역을 표시 할 때 짧고, 과잉 판매 지역을 표시 할 때 길게 가서 이익을 얻습니다.
이 전략은 주로 시장의 과반 구매 및 과반 판매 영역을 판단하기 위해 StochRSI 지표를 적용합니다. StochRSI 지표는 K 라인과 D 라인으로 구성됩니다. K 라인은 최근 기간 동안 RSI 가격 범위에서 현재 RSI 값의 위치를 반영합니다. D 라인은 K 라인의 이동 평균입니다. K 라인이 D 라인을 넘으면 과반 구매 영역이며 긴 포지션을 취할 수 있습니다. K 라인이 D 라인 아래에 떨어지면 과반 판매 영역이며 짧은 포지션을 취할 수 있습니다.
구체적으로, 전략은 먼저 14 기간 RSI 지표의 값을 계산하고, 그 다음 RSI 지표에 StochRSI 지표를 적용합니다. StochRSI 지표 매개 변수는 길이가 14, 평형 K 라인 기간 3 및 평형 D 라인 기간 3로 설정됩니다. K 라인이 사용자 정의 과잉 판매 영역 (디폴트 1입니다) 이상으로 넘을 때 긴 포지션을 취합니다. K 라인이 사용자 정의 과잉 구매 영역 (디폴트 99입니다) 아래로 떨어지면 짧은 포지션을 취합니다.
또한 스톱 로스 및 트레이프 매개 변수는 전략에 설정되어 있습니다. 스톱 로스는 기본으로 10000입니다. 트레이프 로프는 기본 트레일링 포인트가 300이고 오프셋은 0으로 트레일링 스톱을 사용합니다.
위의 위험에 대해 더 긴 사이클 매개 변수를 설정하거나 다른 지표와 결합하여 신호를 필터링하고, 다른 시장에 적응하기 위해 과소 구매 및 과소 판매 매개 변수를 조정하고, 다른 스톱 로스 및 수익 매개 변수를 테스트하는 것을 고려할 수 있습니다.
이 전략은 StochRSI 지표에 의해 판단되는 과잉 구매 및 과잉 판매 영역을 기반으로 거래합니다. 단일 RSI 지표와 비교하면 StochRSI는 KDJ의 아이디어를 결합하고 전환점을 더 정확하게 판단 할 수 있습니다. 동시에 잘못된 신호는 RSI에 의해 필터링되며 위험은 스톱 로스로 제어됩니다. 여전히 최적화 할 수있는 많은 공간이 있으며 다른 지표 또는 최적화된 매개 변수 설정과 결합 할 수 있습니다.
/*backtest start: 2023-11-06 00:00:00 end: 2023-12-06 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version= 2 strategy("STOCHRSI JURE", overlay=false) lengthrsi = input(10) overSold = input( 1 ) overBought = input(99) call_trail_stop = input(300) call_trail_offset = input(0) call_sl = input(10000) price = ohlc4 vrsi = rsi(price, lengthrsi) smoothK = input(3, minval=1) smoothD = input(3, minval=1) lengthRSI = input(14, minval=1) lengthStoch = input(14, minval=1) src = input(close, title="RSI Source") rsi1 = rsi(src, lengthRSI) k = sma(stoch(rsi1, rsi1, rsi1, lengthStoch), smoothK) d = sma(k, smoothD) plot( k, color=blue, linewidth=1, title="K") plot( d, color=red, linewidth=1, title="D") if (crossover(k, overSold) ) strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND", comment="BUY") strategy.exit("BUY EXIT", "BUY", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl) if (crossunder(k, overBought) ) strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", comment="SELL") strategy.exit("SELL EXIT", "SELL", trail_points=call_trail_stop, trail_offset=call_trail_offset, loss = call_sl) //if ( ( crossover(k,d)) and ( (vrsi<overSold) or crossover(vrsi,overSold) ) and year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil) // strategy.entry("BUY", strategy.long, stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="BUY") //else // strategy.cancel(id="BUY") //if ( ( crossunder(k,d) ) and ( (vrsi >overBought) or crossunder(vrsi,overBought) ) and year >= yearfrom and year <= yearuntil and month>=monthfrom and month <=monthuntil and dayofmonth>=dayfrom and dayofmonth < dayuntil ) // strategy.entry("SELL", strategy.short,stop=close, oca_name="TREND", oca_type=strategy.oca.cancel, comment="SELL") //else // strategy.cancel(id="SELL")