Bitcoin-Handelsstrategie auf Basis von RVI und EMA

Schriftsteller:ChaoZhang, Datum: 2024-02-22 13:50:17
Tags:

img

Übersicht

Diese Strategie basiert auf den Indikatoren RVI (Relative Vigor Index) und EMA (Exponential Moving Average). Es geht lang, wenn RVI ein Eintrittssignal gibt und die schnelle EMA über der langsamen EMA liegt, und geht kurz, wenn RVI ein Eintrittssignal gibt und die langsame EMA über der schnellen EMA liegt.

Strategieprinzip

  1. Verwenden Sie RVI, um überkaufte und überverkaufte Bedingungen zu beurteilen. Wenn die RVI-Indikatorlinie über ihre Signallinie geht, ist es ein überkauftes Signal, um lang zu gehen. Wenn die RVI-Linie unter ihrer Signallinie geht, ist es ein überverkauftes Signal, um kurz zu gehen.

  2. Wenn die schnelle EMA über der langsamen EMA liegt, handelt es sich um einen Aufwärtstrend.

  3. Gehen Sie nur lang, wenn RVI ein Eintrittssignal gibt und die EMAs einen bullischen Trend zeigen.

  4. Der Stop-Loss nach dem Long-Going wird um einen Abstand von atr unter dem jüngsten Tief gesetzt.Das Ergebnis des Vorjahres war im Vergleich zum Vorjahreszeitraum mit einem höheren Gewinn vonDer Stop-Loss nach dem Shorten wird um einen Abstand von atr über dem jüngsten Höchststand gesetzt.Der Gewinn ist um einen Abstand vonatrTP.

Analyse der Vorteile

  1. Die Kombination von Trend- und Überkauf-Überverkaufsindicatoren verhindert falsche Ausbrüche.

  2. Dynamische Stop-Loss und Take-Profit helfen, große Bewegungen zu erfassen.

  3. Gleichgewicht zwischen Trendqualität und Überkauf/Überverkauf, was die Genauigkeit des Signals verbessert.

  4. Umfangreiche Backtests, optimierte Parameter, gute reale Handelsleistung.

Risikoanalyse

  1. Häufige Trendänderungen, die von den EMAs während der Wechselkurse beurteilt werden, können zu Überhandelungen führen.

  2. RVI-Parameter und EMA-Perioden müssen für verschiedene Handelsinstrumente optimiert werden, da sonst die Performance beeinträchtigt werden kann.

  3. Die Stop-Loss- und Take-Profit-Koeffizienten sollten vernünftigerweise auf der Grundlage der Marktvolatilität festgelegt werden, da sonst die Risiken nicht wirksam kontrolliert werden können.

Optimierungsrichtlinien

  1. Es können weitere Indikatoren hinzugefügt werden, die die Qualität des Trends beurteilen, z. B. Oszillatoren, Bollinger Bands usw., um Handelsentscheidungen genauer zu treffen.

  2. Die Stop-Loss-/Take-Profit-Distanzen können dynamisch anhand von Volatilitätsmaßnahmen wie ATR angepasst werden, sodass in Zeiten hoher Volatilität breitere Stopps möglich sind.

  3. Parameterkombinationen können für verschiedene Instrumente getrennt getestet und optimiert werden, um die Robustheit der Strategie zu verbessern.

Schlussfolgerung

Diese Strategie kombiniert die Stärken der RVI- und EMA-Indikatoren, beurteilt Überkauf-/Überverkaufsniveaus, respektiert dabei die Haupttrendrichtung und vermeidet Konflikte. Der dynamische Stop-Loss/Take-Profit-Mechanismus hilft, Bewegungen in der Haupttrendrichtung zu erfassen. Durch Parameteroptimierung und strenge Risikokontrolle kann diese Strategie relativ stabile Renditen erzielen. Es gibt noch Raum für weitere Anpassungen und Optimierungen in realen Handelsanwendungen. Händler können maßgeschneiderte Modifikationen basierend auf ihren eigenen Risikopräferenzen und Instrumenteneigenschaften vornehmen.


/*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)


Mehr