Esta estrategia utiliza principalmente el valor promedio del RSI y los cambios repentinos de precios para identificar la tendencia del mercado y los puntos de reversión.
Calcular la SMA del RSI. Cuando el RSI cruza la SMA por encima de 60 o cae por debajo de 40, se considera sobrecomprado o sobrevendido, y se considerarán posiciones invertidas.
Cuando el cambio del RSI supera un cierto valor, se considera un cambio repentino.
Utilice múltiples EMA para filtrar. Solo cuando el precio cruce por encima de la EMA de período más corto, se considerará la posición larga. Solo cuando el precio caiga por debajo de la EMA de período más corto, se considerará la posición corta.
Al combinar el uso de la media del RSI, los cambios repentinos y el filtrado de la EMA, se pueden identificar mejores puntos de entrada.
El uso del promedio RSI puede juzgar con precisión las condiciones de sobrecompra y sobreventa, lo que es propicio para capturar oportunidades de reversión.
Los cambios repentinos a menudo significan cambios en la tendencia y dirección de los precios, el uso de esta señal puede mejorar la puntualidad de las entradas.
El filtrado de la EMA a varios niveles puede evitar aún más las falsas señales y reducir las pérdidas innecesarias.
La combinación de múltiples parámetros como criterios de decisión puede mejorar la estabilidad y fiabilidad de la estrategia.
El rendimiento del RSI puede ser inestable y la tasa de éxito de la SMA puede ser baja.
Los cambios repentinos podrían ser sólo fluctuaciones a corto plazo en lugar de inversiones verdaderas.
Hay un retraso en el filtrado de dirección de la EMA. Prueba las EMA de período más corto para mejorar la sensibilidad.
En general, esta estrategia es bastante sensible a la regulación de parámetros. Se necesitan pruebas cuidadosas para encontrar combinaciones óptimas de parámetros. Utilice stop loss para controlar los riesgos.
Prueba otros indicadores como ADX, MACD combinado con RSI para encontrar mejores puntos de entrada.
Aumentar los algoritmos de aprendizaje automático para juzgar la autenticidad y la estabilidad de las señales repentinas de compra/venta.
Mejorar aún más el filtrado de la dirección de la EMA, por ejemplo, mediante el uso de juicios compuestos de diferentes EMA de periodos.
Se añadirá una estrategia de stop loss adaptativa para ajustar dinámicamente el intervalo de stop loss en función de la volatilidad del mercado.
Continuar la optimización de parámetros para encontrar las combinaciones óptimas de parámetros.
Esta estrategia utiliza en primer lugar el promedio RSI para determinar las condiciones de sobrecompra / sobreventa. Las posiciones inversas se establecen cuando ocurren cambios repentinos. La EMA también se utiliza como un filtro auxiliar. Con la configuración adecuada de parámetros, esta estrategia puede determinar eficazmente los cambios de tendencia del mercado. En general, tiene buena estabilidad y valor práctico. Todavía hay espacio para una mayor mejora, que requiere pruebas y optimización persistentes.
/*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)