
Esta estrategia utiliza principalmente el promedio del RSI y los cambios bruscos en los precios para identificar tendencias y puntos de inflexión en el mercado. La idea central es considerar la creación de posiciones en caso de sobrecompra y sobreventa en el RSI y buscar oportunidades de inflexión en caso de cambios bruscos en los precios.
Cuando el RSI cruza la línea SMA de 60 o baja la línea SMA de 40, se considera un fenómeno de sobrecompra y sobreventa, y se considera la apertura de posición inversa.
Cuando el RSI se mueve por encima de un determinado valor, se considera que se ha producido un cambio repentino. En combinación con la verificación de los precios de cierre reales, como señal para establecer una posición inversa.
El uso de filtros multi-arco de EMAs sólo se considera la creación de múltiples EMAs cuando los precios están en EMAs de ciclos más cortos; sólo se considera la creación de vacantes cuando los precios están en EMAs de ciclos más cortos.
Busca posiciones favorables mediante el uso combinado de las medias del RSI, los cambios bruscos y los filtros de la EMA.
El uso de la media del RSI permite determinar con mayor precisión el fenómeno de sobreventa y sobrecompra, lo que ayuda a aprovechar las oportunidades de reversión.
Los cambios bruscos suelen indicar un cambio en la tendencia y dirección de los precios, y el uso de esta señal puede mejorar la puntualidad de la entrada.
El filtro multigar EMA evita aún más las señales erróneas, reduciendo así las pérdidas innecesarias.
La integración de varios parámetros como criterio de decisión puede mejorar la estabilidad y la fiabilidad de la estrategia.
El RSI es inestable, el SMA tiene un bajo índice de éxito. Los parámetros del RSI pueden optimizarse adecuadamente o sustituirse por otros indicadores.
Los cambios bruscos pueden ser convulsiones a corto plazo, no una verdadera reversión. Se puede aumentar la longitud del ciclo de inducción para mejorar la precisión del juicio.
El filtro de dirección EMA tiene un retraso. Se puede probar una EMA de menor ciclo para aumentar la sensibilidad.
En general, esta estrategia es más sensible a los ajustes de parámetros y requiere una prueba cuidadosa para encontrar la combinación óptima de parámetros. Al mismo tiempo, se utiliza el stop loss para controlar el riesgo.
Prueba el uso de otros indicadores como el ADX, MACD y otros en combinación con el RSI para encontrar mejores puntos de entrada.
Aumentar los algoritmos de aprendizaje automático para determinar la veracidad y estabilidad de las señales de compra y venta de impulso a través del entrenamiento de modelos.
Mejorar aún más el efecto de la filtración de la dirección de la EMA, como la mejora del juicio integral de la EMA de diferentes períodos.
Se añade una estrategia de stop loss adaptativa, que permite ajustar el stop loss de forma dinámica en función de la volatilidad del mercado.
Continúe optimizando los parámetros para encontrar la combinación óptima de parámetros. Los criterios de evaluación de optimización pueden considerar el índice de Sharpe, etc.
Esta estrategia utiliza primero el valor promedio del RSI para determinar sobrecompra y sobreventa. Luego, establece una posición inversa en caso de cambios repentinos. Al mismo tiempo, utiliza la EMA para realizar filtros auxiliares.
/*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)