StochRSI 기반의 양적 거래 전략

저자:차오장, 날짜: 2023-12-07 16:05:17
태그:

img

전반적인 설명

이 전략은 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으로 트레일링 스톱을 사용합니다.

이점 분석

  1. 과잉 구매 및 과잉 판매 영역을 결정하기 위해 StochRSI 지표를 사용하는 것은 단일 RSI 지표보다 더 신뢰할 수 있습니다.
  2. RSI로 신호를 필터링하면 잘못된 파장을 피합니다.
  3. 리스크를 제어하기 위한 스톱 로스 (stop loss) 메커니즘과 수익을 취하는 메커니즘 설정

위험 분석

  1. StochRSI 지표는 잘못된 신호를 가질 수 있습니다.
  2. 이상 구매 및 이상 판매 매개 변수를 합리적으로 설정해야, 그렇지 않으면 잘못된 작동을 일으킬 것입니다
  3. 만약 스톱 로스 포인트가 너무 작다면, 함정에 빠지기 쉽다. 만약 이윤을 취하는 포인트가 너무 크다면, 이윤 획득은 제한될 수 있다.

위의 위험에 대해 더 긴 사이클 매개 변수를 설정하거나 다른 지표와 결합하여 신호를 필터링하고, 다른 시장에 적응하기 위해 과소 구매 및 과소 판매 매개 변수를 조정하고, 다른 스톱 로스 및 수익 매개 변수를 테스트하는 것을 고려할 수 있습니다.

최적화 방향

  1. MACD, 볼링거 밴드 등과 같은 다른 지표와 결합하여 잘못된 신호를 필터링하는 것을 고려하십시오.
  2. 더 많은 시장 조건에 적응하기 위해 다른 매개 변수 사이클 설정을 테스트하십시오.
  3. 최적의 매개 변수를 찾기 위해 여러 백테스팅을 통해 손해를 멈추고 수익 포인트를 최적화하십시오.

요약

이 전략은 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")
    
    
    

더 많은