Esta estratégia usa principalmente o valor médio do RSI e mudanças repentinas de preços para identificar tendências de mercado e pontos de reversão.
Calcule a SMA do RSI. Quando o RSI cruza a SMA acima de 60 ou cai abaixo de 40, é considerado sobrecomprado ou sobrevendido, e as posições reversas serão consideradas.
Quando a variação do RSI excede um determinado valor, é considerada uma mudança súbita.
Utilize várias EMAs para filtragem. Somente quando o preço cruzar acima da EMA de período mais curto, a posição longa será considerada. Somente quando o preço cair abaixo da EMA de período mais curto, a posição curta será considerada.
Ao combinar a utilização da média do RSI, das alterações súbitas e da filtragem da EMA, podem ser identificados melhores pontos de entrada.
Usando a média do RSI pode julgar com precisão as condições de sobrecompra e sobrevenda, o que é propício para capturar oportunidades de reversão.
Mudanças repentinas muitas vezes significam mudanças na tendência e direção do preço, usando este sinal pode melhorar a puntualidade das entradas.
A filtragem da EMA a vários níveis pode evitar ainda mais falsos sinais e reduzir perdas desnecessárias.
A combinação de vários parâmetros como critérios de decisão pode aumentar a estabilidade e a fiabilidade da estratégia.
O desempenho do RSI pode ser instável e a taxa de acerto da SMA pode ser baixa. Os parâmetros do RSI podem ser otimizados ou outros indicadores podem substituí-lo.
As mudanças súbitas podem ser apenas flutuações de curto prazo, em vez de reais inversões.
Há um atraso na filtragem da direção da EMA. Teste EMAs de período mais curto para melhorar a sensibilidade.
Em geral, essa estratégia é bastante sensível ao ajuste de parâmetros. Testes cuidadosos são necessários para encontrar combinações ótimas de parâmetros. Use stop loss para controlar riscos.
Teste outros indicadores como ADX, MACD combinado com RSI para encontrar melhores pontos de entrada.
Aumentar os algoritmos de aprendizagem de máquina para julgar a autenticidade e a estabilidade dos sinais súbitos de compra/venda.
Reforçar ainda mais a filtragem da direcção da EMA, por exemplo através da utilização de um julgamento composto de diferentes EMA de períodos.
Adicionar uma estratégia de stop loss adaptativa para ajustar dinamicamente o intervalo de stop loss com base na volatilidade do mercado.
Continuar a otimização de parâmetros para encontrar combinações ótimas de parâmetros.
Esta estratégia usa em primeiro lugar a média do RSI para determinar as condições de sobrecompra / sobrevenda. As posições inversas são estabelecidas quando ocorrem mudanças repentinas. O EMA também é usado como um filtro auxiliar. Com configurações de parâmetros adequadas, esta estratégia pode determinar efetivamente as mudanças de tendência do mercado.
/*backtest start: 2023-12-12 00:00:00 end: 2023-12-19 00:00:00 period: 3m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © samwillington //@version=5 strategy("sma RSI & sudden buy and sell Strategy v1", overlay=true) price = close length = input( 14 ) inst_length = input( 10 ) var rbc = 0 var float rsiBP = 0.0 var rsc = 0 var float rsiSP = 0.0 bars = input(10) lookbackno2 = input.int(20) rsi_buy = 0 rsi_sell = 0 //EMA inputs input_ema20 = input.int(20) ema20 = ta.ema(price, input_ema20) input_ema50 = input.int(50) ema50 = ta.ema(price, input_ema50) input_ema100 = input.int(100) ema100 = ta.ema(price, input_ema100) input_ema200 = input.int(200) ema200 = ta.ema(price, input_ema200) input_ema400 = input.int(400) ema400 = ta.ema(price, input_ema400) input_ema800 = input.int(800) ema800 = ta.ema(price, input_ema800) vrsi = ta.rsi(price, length) hi2 = ta.highest(price, lookbackno2) lo2 = ta.lowest(price, lookbackno2) buy_diff_rsi = vrsi - ta.rsi(close[1], length) sell_diff_rsi = ta.rsi(close[1],length) - vrsi //RSI high low var int sudS = 0 var int sudB = 0 var float sudSO = 0.0 var float sudSC = 0.0 var float sudBO = 0.0 var float sudBC = 0.0 var sudBuy = 0 var sudSell = 0 var countB = 0 var countS = 0 var co_800 = false var co_400 = false var co_200 = false var co_100 = false var co_50 = false var co_20 = false co_800 := ta.crossover(price , ema800) co_400 := ta.crossover(price , ema400) co_200 := ta.crossover(price , ema200) co_100 := ta.crossover(price , ema100) co_50 := ta.crossover(price , ema50) co_20 := ta.crossover(price , ema20) if(ta.crossunder(price , ema20)) co_20 := false if(ta.crossunder(price , ema50)) co_50 := false if(ta.crossunder(price , ema100)) co_100 := false if(ta.crossunder(price , ema200)) co_200 := false if(ta.crossunder(price , ema400)) co_400 := false if(ta.crossunder(price , ema800)) co_800 := false if((price> ema800) and (price > ema400)) if(co_20) if(co_50) if(co_100) if(co_200) strategy.close("Sell") strategy.entry("Buy", strategy.long, comment="spl Buy") co_20 := false co_50 := false co_100 := false co_200 := false // too much rsi if(vrsi > 90) strategy.close("Buy") strategy.entry("Sell", strategy.short, comment="RSI too overbuy") if(vrsi < 10) strategy.close("Sell") strategy.entry("Buy", strategy.long, comment="RSI too oversold") var sudbcount = 0 // counting no. of bars till sudden rise var sudscount = 0 // counting no. of bars till sudden decrease if(sudB == 1) sudbcount := sudbcount + 1 if(sudS == 1) sudscount := sudscount + 1 if((buy_diff_rsi > inst_length) and (hi2 > price)) sudB := 1 sudBO := open sudBC := close if((sell_diff_rsi > inst_length) ) sudS := 1 sudSO := open sudSC := close if(sudbcount == bars) if(sudBC < price) strategy.close("Sell") strategy.entry("Buy", strategy.long, comment="sudd buy") sudbcount := 0 sudB := 0 sudbcount := 0 sudB := 0 if(sudscount == bars) if(sudSC > price) strategy.close("Buy") strategy.entry("Sell", strategy.short, comment="sudd sell") sudscount := 0 sudS := 0 sudscount := 0 sudS := 0 over40 = input( 40 ) over60 = input( 60 ) sma =ta.sma(vrsi, length) coo = ta.crossover(sma, over60) cuu = ta.crossunder(sma, over40) if (coo) strategy.close("Sell") strategy.entry("Buy", strategy.long, comment="modified buy") if (cuu) strategy.close("Buy") strategy.entry("Sell", strategy.short, comment="modefied sell") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)