Estrategia de negociación de Bitcoin basada en RVI y EMA

El autor:¿ Qué pasa?, Fecha: 2024-02-22 13:50:17
Las etiquetas:

img

Resumen general

Esta estrategia se basa en los indicadores RVI (Índice de Vigor Relativo) y EMA (Medio Móvil Exponencial). Va largo cuando RVI da una señal de entrada y la EMA rápida está por encima de la EMA lenta, y va corto cuando RVI da una señal de entrada y la EMA lenta está por encima de la EMA rápida, implementando una estrategia de negociación cuantitativa basada en tendencia y condiciones de sobrecompra-superventa.

Principio de la estrategia

  1. Utilice RVI para juzgar las condiciones de sobrecompra y sobreventa. Cuando la línea del indicador RVI cruza por encima de su línea de señal, es una señal de sobrecompra para ir largo. Cuando la línea RVI cruza por debajo de su línea de señal, es una señal de sobreventa para ir corto.

  2. Cuando la EMA rápida está por encima de la EMA lenta, es una tendencia alcista.

  3. Solo vaya largo cuando RVI dé una señal de entrada y las EMA muestren una tendencia alcista. Sólo vaya corto cuando RVI dé una señal de entrada y las EMA muestren una tendencia bajista.

  4. El stop loss después de ir largo se establece por debajo del mínimo reciente a una distancia de atratrSL, y el beneficio de toma se establece por encima del máximo reciente por una distancia de atratrTP. El stop loss después de ir corto se establece por encima del máximo reciente a una distancia de atrEl rendimiento de las inversiones se sitúa por debajo del mínimo reciente a una distancia deatrTP.

Análisis de ventajas

  1. La combinación de los indicadores de tendencia y de sobrecompra y sobreventa evita las falsas rupturas.

  2. El stop loss dinámico y el take profit ayudan a atrapar grandes movimientos.

  3. Equilibra la calidad de la tendencia y los niveles de sobrecompra/sobreventa, mejorando la precisión de la señal.

  4. Extensa backtesting, parámetros optimizados, buen rendimiento comercial real.

Análisis de riesgos

  1. Los cambios frecuentes de tendencia que las AEM evalúan durante los mercados de variación pueden conducir a un exceso de negociación.

  2. Los parámetros de RVI y los períodos de EMA deben optimizarse para diferentes instrumentos de negociación, de lo contrario el rendimiento puede verse afectado.

  3. Los coeficientes de stop loss y take profit deben fijarse razonablemente en función de la volatilidad del mercado, de lo contrario no se pueden controlar eficazmente los riesgos.

Direcciones de optimización

  1. Se pueden añadir más indicadores que juzguen la calidad de la tendencia, como osciladores, bandas de Bollinger, etc., para hacer que las decisiones comerciales sean más precisas.

  2. Las distancias stop loss/take profit se pueden ajustar dinámicamente en función de medidas de volatilidad como ATR, lo que permite paradas más amplias durante períodos de alta volatilidad.

  3. Las combinaciones de parámetros se pueden probar y optimizar por separado para diferentes instrumentos para mejorar la robustez de la estrategia.

Conclusión

Esta estrategia combina los puntos fuertes de los indicadores RVI y EMA, juzgando los niveles de sobrecompra / sobreventa mientras se respeta la dirección de la tendencia principal, evitando operaciones conflictivas. El mecanismo dinámico de stop loss / take profit ayuda a capturar los movimientos en la dirección de la tendencia principal. A través de la optimización de parámetros y el estricto control de riesgos, esta estrategia puede lograr retornos relativamente estables. Todavía hay espacio para más ajustes y optimizaciones en aplicaciones comerciales reales. Los operadores pueden hacer modificaciones personalizadas basadas en sus propias preferencias de riesgo y características del instrumento.


/*backtest
start: 2024-01-22 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//this strategy works well on h4 (btc or eth)


//@version=5
strategy(title="Relative Vigor Index", shorttitle="RVGI",overlay=true)
//indicator(title="Relative Vigor Index", shorttitle="RVGI", format=format.price, precision=4, timeframe="", timeframe_gaps=true)
len = input.int(4, title="Length rvi", minval=1)
rvi = math.sum(ta.swma(close-open), len)/math.sum(ta.swma(high-low),len)
sig = ta.swma(rvi)
offset = input.int(0, "Offset rvi", minval = -500, maxval = 500)


atrlength = input.int(19,title="Atr Length",minval=1)
ema1 =  input.int(95,title="Long EMA rapida",minval=1,step=10)
ema2 =  input.int(200,title="Long EMA lenta",minval=1,step=10)

atrSL = input.float(2.0,title="Atr SL", step=0.1)
atrTP = input.float(1.0,title="Atr TP", step=0.1)

atr = ta.atr(atrlength)
esalcista = low > ta.ema(close,ema1) and ta.ema(close,ema1) > ta.ema(close,ema2)
bajista = high < ta.ema(close,ema1) and ta.ema(close,ema1) < ta.ema(close,ema2)


//plot(high + atr)
//plot(low - atr)

//strategy.entry("compra",strategy.long, when=ta.crossover(rvi,sig))
//strategy.close("compra",when=ta.crossunder(rvi,sig))

//plot(rvi, color=#008000, title="RVGI", offset = offset)
//plot(sig, color=#FF0000, title="Signal", offset = offset)
//plotshape(true,style=shape.xcross)

var TP = 0.0
var SL = 0.0

comprado = strategy.position_size>0
vendido = strategy.position_size<0

crucepositivo = ta.crossover(rvi,sig)
crucenegativo = ta.crossunder(rvi,sig)

if comprado
    // ver SL
    if low < SL
        strategy.close("BUY",comment="SL")
        
        
if comprado    
    //ver tp
    if high > TP
        strategy.close("BUY",comment="TP")
        
       
    
    
    
if not comprado and not vendido
    if crucepositivo and esalcista
        strategy.entry("BUY",strategy.long)
        SL := low - (atr * atrSL)
        TP := high + (atr * atrTP)
        alert("BUY",alert.freq_once_per_bar)



//---------------

if vendido
    // ver SL
    if high > SL
        strategy.close("SELL",comment="SL")
        
        
if vendido    
    //ver tp
    if low < TP
        strategy.close("SELL",comment="TP")
        
       

if not vendido and not comprado
    if crucenegativo and bajista
        strategy.entry("SELL",strategy.short)
        SL := high + (atr * atrSL)
        TP := low - (atr * atrTP)
        alert("SELL",alert.freq_once_per_bar)







//----------------

//plotshape(comprado,style=shape.xcross)
plot( comprado ? SL : na, color=color.red,style=plot.style_circles)
plot( comprado ? TP : na, color=color.blue,style=plot.style_circles)

plot( ta.ema(close,ema1),color=color.orange)
plot( ta.ema(close,ema2),color=color.yellow)


plot( vendido ? SL : na, color=color.red,style=plot.style_circles)
plot( vendido ? TP : na, color=color.blue,style=plot.style_circles)


Más.