Stratégie de trading Bitcoin basée sur le RVI et l'EMA

Auteur:ChaoZhang est là., Date: le 22 février 2024 13:50:17
Les étiquettes:

img

Résumé

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.

Principe de stratégie

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

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

  3. Il suffit d'aller long lorsque RVI donne un signal d'entrée et que les EMA montrent une tendance haussière.

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

Analyse des avantages

  1. La combinaison d'indicateurs de tendance et de surachat et de survente évite de fausses ruptures.

  2. Le stop loss et le profit dynamique aident à attraper les gros mouvements.

  3. Équilibre la qualité de la tendance et les niveaux de surachat/survente, améliorant la précision du signal.

  4. Des tests approfondies, des paramètres optimisés, de bonnes performances commerciales.

Analyse des risques

  1. Les changements fréquents de tendance jugés par les EMA pendant les marchés de variation peuvent entraîner une survente.

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

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

Directions d'optimisation

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

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

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

Conclusion

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)


Plus de