Esta estratégia baseia-se nos indicadores RVI (Relative Vigor Index) e EMA (Exponential Moving Average). Ele vai longo quando RVI dá um sinal de entrada e a EMA rápida está acima da EMA lenta, e vai curto quando RVI dá um sinal de entrada e a EMA lenta está acima da EMA rápida, implementando uma estratégia quantitativa de negociação baseada em tendência e condições de sobrecompra-supervenda.
Usar RVI para julgar as condições de sobrecompra e sobrevenda. Quando a linha do indicador RVI cruza acima de sua linha de sinal, é um sinal de sobrecompra para ir longo. Quando a linha RVI cruza abaixo de sua linha de sinal, é um sinal de sobrevenda para ir curto.
Quando a EMA rápida está acima da EMA lenta, é uma tendência de alta. Quando a EMA lenta está acima da EMA rápida, é uma tendência de baixa.
Apenas vá longo quando o RVI dá um sinal de entrada e as EMAs mostram uma tendência de alta.
O stop loss após o longo é definido abaixo do mínimo recente por uma distância de atratrSL, e o lucro de take-profit é fixado acima da alta recente por uma distância de atrAtrTP. O stop loss após o short é definido acima da alta recente por uma distância de atrAtrSL, e o lucro do take-profit está situado abaixo do mínimo recente a uma distância de atratrTP.
A combinação de indicadores de tendência e de sobrecompra e sobrevenda evita falhas.
O stop loss dinâmico e o take profit ajudam a apanhar grandes movimentos.
Equilibra a qualidade da tendência e os níveis de sobrecompra/supervenda, melhorando a precisão do sinal.
Extenso backtesting, parâmetros otimizados, bom desempenho comercial real.
As alterações frequentes de tendência avaliadas pelas EMA durante os mercados variáveis podem conduzir a uma sobrecomercialização.
Os parâmetros do RVI e os períodos de EMA necessitam de otimização para diferentes instrumentos de negociação, caso contrário, o desempenho pode sofrer.
Os coeficientes stop loss e take profit devem ser estabelecidos de forma razoável com base na volatilidade do mercado, caso contrário, os riscos não poderão ser controlados de forma eficaz.
Podem ser adicionados mais indicadores que avaliam a qualidade da tendência, como osciladores, bandas de Bollinger, etc., para tornar as decisões de negociação mais precisas.
As distâncias stop loss/take profit podem ser ajustadas dinamicamente com base em medidas de volatilidade como o ATR, permitindo paradas mais largas durante períodos de alta volatilidade.
As combinações de parâmetros podem ser testadas e otimizadas separadamente para diferentes instrumentos para melhorar a robustez da estratégia.
Esta estratégia combina os pontos fortes dos indicadores RVI e EMA, julgando os níveis de sobrecompra / sobrevenda, respeitando a direção da tendência principal, evitando negócios conflitantes. O mecanismo dinâmico de stop loss / take profit ajuda a capturar os movimentos na direção da tendência principal. Através da otimização de parâmetros e controle de risco rigoroso, esta estratégia pode alcançar retornos relativamente estáveis. Ainda há espaço para mais ajustes e otimizações em aplicações de negociação reais. Os comerciantes podem fazer modificações personalizadas com base em suas próprias preferências de risco e características do 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)