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.
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.
Cuando la EMA rápida está por encima de la EMA lenta, es una tendencia alcista.
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.
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.
La combinación de los indicadores de tendencia y de sobrecompra y sobreventa evita las falsas rupturas.
El stop loss dinámico y el take profit ayudan a atrapar grandes movimientos.
Equilibra la calidad de la tendencia y los niveles de sobrecompra/sobreventa, mejorando la precisión de la señal.
Extensa backtesting, parámetros optimizados, buen rendimiento comercial real.
Los cambios frecuentes de tendencia que las AEM evalúan durante los mercados de variación pueden conducir a un exceso de negociación.
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.
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.
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.
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.
Las combinaciones de parámetros se pueden probar y optimizar por separado para diferentes instrumentos para mejorar la robustez de la estrategia.
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)