Strategi Perdagangan Bitcoin Berdasarkan RVI dan EMA

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

img

Ringkasan

Strategi ini adalah berdasarkan kepada RVI (Relative Vigor Index) dan EMA (Exponential Moving Average) penunjuk. Ia pergi panjang apabila RVI memberikan isyarat kemasukan dan EMA cepat adalah di atas EMA perlahan, dan pergi pendek apabila RVI memberikan isyarat kemasukan dan EMA perlahan adalah di atas EMA pantas, melaksanakan strategi perdagangan kuantitatif berdasarkan trend dan keadaan overbought-oversold.

Prinsip Strategi

  1. Gunakan RVI untuk menilai keadaan overbought dan oversold. Apabila garis penunjuk RVI melintasi di atas garis isyaratnya, ia adalah isyarat overbought untuk pergi panjang. Apabila garis RVI melintasi di bawah garis isyaratnya, ia adalah isyarat oversold untuk pergi pendek.

  2. Gunakan EMA berganda untuk menentukan arah trend. Apabila EMA pantas di atas EMA perlahan, ia adalah trend menaik. Apabila EMA perlahan di atas EMA pantas, ia adalah trend menurun.

  3. Hanya pergi panjang apabila RVI memberi isyarat kemasukan dan EMA menunjukkan trend menaik. Hanya pergi pendek apabila RVI memberikan isyarat kemasukan dan EMA menunjukkan trend menurun.

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

Analisis Kelebihan

  1. Menggabungkan trend dan penunjuk overbought-oversold mengelakkan pecah palsu.

  2. Stop loss dan mengambil keuntungan yang dinamik membantu menangkap pergerakan besar.

  3. Mengimbangi kualiti trend dan tahap overbought / oversold, meningkatkan ketepatan isyarat.

  4. Ujian balik yang luas, parameter yang dioptimumkan, prestasi perdagangan sebenar yang baik.

Analisis Risiko

  1. Perubahan trend yang kerap dinilai oleh EMA semasa pasaran yang berbeza boleh menyebabkan overtrading.

  2. Parameter RVI dan tempoh EMA perlu dioptimumkan untuk instrumen dagangan yang berbeza, jika tidak prestasi mungkin terjejas.

  3. Pekali stop loss dan mengambil keuntungan harus ditetapkan dengan munasabah berdasarkan turun naik pasaran, jika tidak risiko tidak dapat dikawal dengan berkesan.

Arahan pengoptimuman

  1. Lebih banyak penunjuk yang menilai kualiti trend boleh ditambah, seperti osilator, Bollinger Bands dll, untuk membuat keputusan perdagangan lebih tepat.

  2. Jarak Stop Loss/Take Profit boleh diselaraskan secara dinamik berdasarkan langkah-langkah turun naik seperti ATR, yang membolehkan berhenti yang lebih luas semasa tempoh turun naik yang tinggi.

  3. Gabungan parameter boleh diuji dan dioptimumkan secara berasingan untuk instrumen yang berbeza untuk meningkatkan ketahanan strategi.

Kesimpulan

Strategi ini menggabungkan kekuatan penunjuk RVI dan EMA, menilai tahap overbought / oversold sambil menghormati arah trend utama, mengelakkan perdagangan yang bertentangan. Mekanisme stop loss / take profit dinamik membantu menangkap pergerakan dalam arah trend utama. Melalui pengoptimuman parameter dan kawalan risiko yang ketat, strategi ini dapat mencapai pulangan yang agak stabil. Masih ada ruang untuk penyesuaian dan pengoptimuman lanjut dalam aplikasi perdagangan sebenar. Pedagang boleh membuat pengubahsuaian tersuai berdasarkan pilihan risiko dan ciri 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 lanjut