El índice RSI SMA y la estrategia de compra y venta súbita

El autor:¿ Qué pasa?, Fecha: 2023-12-20 17:33:04
Las etiquetas:

img

Resumen general

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.

Principios

  1. 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.

  2. Cuando el cambio del RSI supera un cierto valor, se considera un cambio repentino.

  3. 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.

  4. 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.

Análisis de ventajas

  1. 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.

  2. 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.

  3. El filtrado de la EMA a varios niveles puede evitar aún más las falsas señales y reducir las pérdidas innecesarias.

  4. La combinación de múltiples parámetros como criterios de decisión puede mejorar la estabilidad y fiabilidad de la estrategia.

Riesgos y mitigaciones

  1. El rendimiento del RSI puede ser inestable y la tasa de éxito de la SMA puede ser baja.

  2. Los cambios repentinos podrían ser sólo fluctuaciones a corto plazo en lugar de inversiones verdaderas.

  3. 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.

  4. 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.

Sugerencias para optimizar

  1. Prueba otros indicadores como ADX, MACD combinado con RSI para encontrar mejores puntos de entrada.

  2. Aumentar los algoritmos de aprendizaje automático para juzgar la autenticidad y la estabilidad de las señales repentinas de compra/venta.

  3. 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.

  4. 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.

  5. Continuar la optimización de parámetros para encontrar las combinaciones óptimas de parámetros.

Conclusión

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)

Más.