Esta estratégia é desenvolvida com base no indicador StochRSI. A estratégia usa principalmente o indicador StochRSI para julgar situações de sobrecompra e sobrevenda. Combinado com o indicador RSI para filtrar alguns sinais falsos, vá curto quando o indicador StochRSI mostra área de sobrecompra e vá longo quando mostra área de sobrevenda para obter lucros.
Esta estratégia aplica principalmente o indicador StochRSI para julgar áreas de sobrecompra e sobrevenda no mercado. O indicador StochRSI consiste na linha K e na linha D. A linha K reflete a posição do valor atual do RSI na faixa de preços do RSI durante um período recente. A linha D é a média móvel da linha K. Quando a linha K cruza acima da linha D, é uma área de sobrecompra e posições longas podem ser tomadas. Quando a linha K cai abaixo da linha D, é uma área de sobrevenda e posições curtas podem ser tomadas.
Especificamente, a estratégia primeiro calcula o valor do indicador RSI de 14 períodos e, em seguida, aplica o indicador StochRSI no indicador RSI. Os parâmetros do indicador StochRSI são definidos com um comprimento de 14, período de linha K suavizado de 3 e período de linha D suavizado de 3. Quando a linha K cruzar acima da área de sobrevenda definida pelo usuário (o padrão é 1), a posição longa será tomada. Quando a linha K cair abaixo da área de sobrecompra definida pelo usuário (o padrão é 99), a posição curta será tomada.
Além disso, os parâmetros de stop loss e take profit são definidos na estratégia.
Para os riscos acima referidos, podem ser definidos parâmetros de ciclo mais longo ou considerar-se a utilização em combinação com outros indicadores para filtrar sinais, ajustar parâmetros de sobrecompra e sobrevenda para se adaptarem a diferentes mercados e testar diferentes parâmetros de stop loss e take profit.
Esta estratégia opera com base em áreas de sobrecompra e sobrevenda julgadas pelo indicador StochRSI. Em comparação com o único indicador RSI, o StochRSI combina a idéia de KDJ e pode julgar pontos de virada com mais precisão. Ao mesmo tempo, sinais falsos são filtrados pelo RSI e os riscos são controlados por stop loss e take profit. Ainda há grande espaço para otimização, pode ser combinado com outros indicadores ou configurações de parâmetros otimizadas.
/*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")