Strategi Perdagangan Bitcoin Berdasarkan RVI dan EMA

Penulis:ChaoZhang, Tanggal: 2024-02-22 13:50:17
Tag:

img

Gambaran umum

Strategi ini didasarkan pada indikator RVI (Relative Vigor Index) dan EMA (Exponential Moving Average).

Prinsip Strategi

  1. Gunakan RVI untuk menilai kondisi overbought dan oversold. Ketika garis indikator RVI melintasi di atas garis sinyalnya, itu adalah sinyal overbought untuk pergi panjang. Ketika garis RVI melintasi di bawah garis sinyalnya, itu adalah sinyal oversold untuk pergi pendek.

  2. Gunakan EMA ganda untuk menentukan arah tren. Ketika EMA cepat di atas EMA lambat, itu adalah tren bullish. Ketika EMA lambat di atas EMA cepat, itu adalah tren bearish.

  3. Hanya pergi panjang ketika RVI memberikan sinyal masuk dan EMA menunjukkan tren bullish. Hanya pergi pendek ketika RVI memberikan sinyal masuk dan EMA menunjukkan tren bearish.

  4. Stop loss setelah pergi panjang diatur di bawah terendah baru-baru ini dengan jarak atratrSL, dan mengambil keuntungan ditetapkan di atas tinggi baru-baru ini dengan jarak atrAtrTP. Stop loss setelah pergi pendek diatur di atas tinggi baru-baru ini dengan jarak atratrSL, dan mengambil keuntungan ditetapkan di bawah terendah baru-baru ini dengan jarak atratrTP.

Analisis Keuntungan

  1. Menggabungkan indikator tren dan oversold overbought menghindari false breakout.

  2. Stop loss dan take profit yang dinamis membantu menangkap gerakan besar.

  3. Mengimbangi kualitas tren dan tingkat overbought/oversold, meningkatkan akurasi sinyal.

  4. Pengujian backtesting yang luas, parameter yang dioptimalkan, kinerja perdagangan yang baik.

Analisis Risiko

  1. Perubahan tren yang sering dinilai oleh EMA selama pasar berkisar dapat menyebabkan overtrading.

  2. Parameter RVI dan periode EMA perlu dioptimalkan untuk instrumen perdagangan yang berbeda, jika tidak, kinerja dapat terganggu.

  3. Koefisien stop loss dan take profit harus ditetapkan secara wajar berdasarkan volatilitas pasar, jika tidak risiko tidak dapat dikendalikan secara efektif.

Arahan Optimasi

  1. Lebih banyak indikator menilai kualitas tren dapat ditambahkan, seperti osilator, Bollinger Bands dll, untuk membuat keputusan perdagangan lebih tepat.

  2. Jarak stop loss/take profit dapat disesuaikan secara dinamis berdasarkan ukuran volatilitas seperti ATR, memungkinkan stop yang lebih luas selama periode volatilitas tinggi.

  3. Kombinasi parameter dapat diuji dan dioptimalkan secara terpisah untuk instrumen yang berbeda untuk meningkatkan ketahanan strategi.

Kesimpulan

Strategi ini menggabungkan kekuatan indikator RVI dan EMA, menilai tingkat overbought/oversold sambil menghormati arah tren utama, menghindari perdagangan yang bertentangan. Mekanisme stop loss/take profit dinamis membantu menangkap pergerakan dalam arah tren utama. Melalui optimasi parameter dan kontrol risiko yang ketat, strategi ini dapat mencapai pengembalian yang relatif stabil. Masih ada ruang untuk penyesuaian dan optimasi lebih lanjut dalam aplikasi perdagangan nyata. Pedagang dapat membuat modifikasi khusus berdasarkan preferensi risiko dan karakteristik instrumen mereka sendiri.


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


Lebih banyak