Cette stratégie est basée sur les indicateurs RVI (Relative Vigor Index) et EMA (Exponential Moving Average). Elle est longue lorsque RVI donne un signal d'entrée et que l'EMA rapide est au-dessus de l'EMA lente, et court lorsque RVI donne un signal d'entrée et que l'EMA lente est au-dessus de l'EMA rapide, en mettant en œuvre une stratégie de trading quantitative basée sur la tendance et les conditions de surachat-survente.
Utilisez RVI pour juger des conditions de surachat et de survente. Lorsque la ligne de l'indicateur RVI traverse au-dessus de sa ligne de signal, c'est un signal de surachat pour aller long. Lorsque la ligne RVI traverse au-dessous de sa ligne de signal, c'est un signal de survente pour aller court.
Utilisez des EMA doubles pour déterminer la direction de la tendance. Lorsque l'EMA rapide est au-dessus de l'EMA lente, il s'agit d'une tendance haussière. Lorsque l'EMA lente est au-dessus de l'EMA rapide, il s'agit d'une tendance baissière.
Il suffit d'aller long lorsque RVI donne un signal d'entrée et que les EMA montrent une tendance haussière.
L'arrêt de perte après avoir passé long est placé en dessous du plus bas récent d'une distance de atrLe taux de profit est fixé au-dessus du niveau le plus élevé récemment atteint, à une distance deLe stop loss après le short est placé au-dessus du haut récent d'une distance deLe taux d'intérêt de l'économie de l'Union est deatrTP.
La combinaison d'indicateurs de tendance et de surachat et de survente évite de fausses ruptures.
Le stop loss et le profit dynamique aident à attraper les gros mouvements.
Équilibre la qualité de la tendance et les niveaux de surachat/survente, améliorant la précision du signal.
Des tests approfondies, des paramètres optimisés, de bonnes performances commerciales.
Les changements fréquents de tendance jugés par les EMA pendant les marchés de variation peuvent entraîner une survente.
Les paramètres RVI et les périodes EMA doivent être optimisés pour différents instruments de négociation, faute de quoi les performances pourraient être affectées.
Les coefficients de stop-loss et de take profit devraient être raisonnablement fixés en fonction de la volatilité du marché, faute de quoi les risques ne peuvent pas être efficacement contrôlés.
Plus d'indicateurs évaluant la qualité de la tendance peuvent être ajoutés, tels que des oscillateurs, des bandes de Bollinger, etc., pour rendre les décisions commerciales plus précises.
Les distances stop-loss/take profit peuvent être ajustées dynamiquement en fonction de mesures de volatilité telles que l'ATR, ce qui permet des arrêts plus larges pendant les périodes de forte volatilité.
Les combinaisons de paramètres peuvent être testées et optimisées séparément pour différents instruments afin d'améliorer la robustesse de la stratégie.
Cette stratégie combine les atouts des indicateurs RVI et EMA, en jugeant les niveaux de surachat/survente tout en respectant la direction de la tendance principale, en évitant les transactions en conflit. Le mécanisme de stop loss/take profit dynamique aide à capturer les mouvements dans la direction de la tendance principale. Grâce à l'optimisation des paramètres et à un contrôle strict des risques, cette stratégie peut obtenir des rendements relativement stables. Il reste encore de la place pour d'autres ajustements et optimisations dans les applications de trading réelles. Les traders peuvent apporter des modifications personnalisées en fonction de leurs propres préférences de risque et des caractéristiques de l'instrument.
/*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)