VWAP-RSI Terlalu Terjual Di Bawah Strategi Pendek BTC

Penulis:ChaoZhang, Tanggal: 2023-12-29 14:12:54
Tag:

img

Gambaran umum

Ini adalah strategi pendek BTC di seluruh kerangka waktu berdasarkan indikator RSI dari VWAP. Ini menghitung Volume Weighted Average Price (VWAP) dari setiap candlestick untuk mendapatkan kurva VWAP, dan kemudian menerapkan indikator RSI ke kurva. Ketika indikator RSI melintasi ke bawah dari zona overbought, itu menjadi pendek pada BTC.

Logika Strategi

  1. Hitung VWAP dari setiap candlestick untuk mendapatkan kurva VWAP
  2. Menerapkan indikator RSI ke kurva VWAP, dengan durasi 20 hari, tingkat overbought pada 85 dan tingkat oversold pada 30
  3. Ketika RSI melintasi ke bawah dari zona overbought (85) ke zona oversold (30), buka posisi short
  4. Tutup posisi setelah memegang 28 candlestick, atau jika RSI melintasi garis oversold (30) lagi

Analisis Keuntungan

  1. Gunakan VWAP alih-alih harga penutupan sederhana untuk mencerminkan harga perdagangan yang sebenarnya
  2. Mengidentifikasi status overbought/oversold dengan RSI untuk menghindari membeli tinggi dan menjual rendah
  3. Perdagangan lintas kerangka waktu untuk menghindari terjebak
  4. Risiko terkontrol dengan 28 candlestick stop loss

Risiko & Solusi

  1. Harga melonjak dengan cepat karena peristiwa black swan, tidak dapat menghentikan kerugian
    • Mengadopsi perdagangan lintas kerangka waktu untuk mengurangi risiko terjebak
  2. Pengaturan parameter yang tidak tepat, mudah melewatkan kesempatan
    • Uji dan optimalkan parameter RSI dan tingkat overbought/oversold
  3. RSI tidak dapat menyeberang ke zona oversold
    • Gabungkan dengan indikator lain untuk menentukan tren, sesuaikan parameter secara fleksibel

Arahan Optimasi

  1. Uji lebih banyak kombinasi parameter untuk menemukan optimal
  2. Gabungkan dengan MACD, KD dll untuk menilai status overbought/oversold
  3. Pengaturan parameter uji secara terpisah untuk aset yang berbeda
  4. Mengoptimalkan mekanisme stop loss, mengatur stop loss range berdasarkan volatilitas

Ringkasan

Strategi ini mengidentifikasi status BTC overbought/oversold dengan kombinasi VWAP dan RSI. Dengan berdagang di seluruh kerangka waktu, strategi ini dapat secara efektif mengendalikan risiko.


/*backtest
start: 2023-12-21 00:00:00
end: 2023-12-28 00:00:00
period: 1m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=4

strategy("Soran Strategy 2 - SHORT SIGNALS", pyramiding=1, initial_capital=1000, default_qty_type=strategy.percent_of_equity, default_qty_value=50, overlay=false)


// ----------------- Inputs ----------------- //

reso = input(title="Resolution", type=input.resolution, defval="")
length = input(20, title="RSI Length", type=input.integer)
ovrsld = input(30, "RSI Oversold level", type=input.float)
ovrbgt = input(85, "RSI Overbought level", type=input.float)
lateleave = input(28, "Number of candles", type=input.integer)
// lateleave : numbers of bars in overbought/oversold zones where the position is closed. The position is closed when this number is reached or when the zone is left (the first condition).

// best parameters BTCUSDTPERP M15 : 20 / 30 / 85 / 28


stratbull = input(title="Enter longs ?", type = input.bool, defval=true)
stratbear = input(title="Enter shorts ?", type = input.bool, defval=true)

stratyear = input(2020, title = "Strategy Start Year")
stratmonth = input(1, title = "Strategy Start Month")
stratday = input(1, title = "Strategy Start Day")
stratstart = timestamp(stratyear,stratmonth,stratday,0,0)


// --------------- Laguerre ----------------- //

laguerre = input(title="Use Laguerre on RSI ?", type=input.bool, defval=false)
gamma = input(0.06, title="Laguerre Gamma")

laguerre_cal(s,g) =>
    l0 = 0.0
    l1 = 0.0
    l2 = 0.0
    l3 = 0.0
    l0 := (1 - g)*s+g*nz(l0[1])
    l1 := -g*l0+nz(l0[1])+g*nz(l1[1])
    l2 := -g*l1+nz(l1[1])+g*nz(l2[1])
    l3 := -g*l2+nz(l2[1])+g*nz(l3[1])
    (l0 + 2*l1 + 2*l2 + l3)/6


// ---------------- Rsi VWAP ---------------- //

rsiV = security(syminfo.tickerid, reso, rsi(vwap(close), length))

rsiVWAP = laguerre ? laguerre_cal(rsiV,gamma) : rsiV


// ------------------ Plots ----------------- //

prsi = plot(rsiVWAP, color = rsiVWAP>ovrbgt ? color.red : rsiVWAP<ovrsld ? color.green : color.white, title="RSI on VWAP", linewidth=1, style=plot.style_line)
hline = plot(ovrbgt, color = color.gray, style=plot.style_line)
lline = plot(ovrsld, color = color.gray, style=plot.style_line)
fill(prsi,hline, color = rsiVWAP > ovrbgt ? color.red : na, transp = 30)
fill(prsi,lline, color = rsiVWAP < ovrsld ? color.green : na, transp = 30)


// ---------------- Positions: only shows the Short and close shoret positions --------------- //

timebull = stratbull and time > stratstart
timebear = stratbear and time > stratstart


strategy.entry("Short", false, when = timebear and crossunder(rsiVWAP, ovrbgt), comment="")
strategy.close("Short", when = timebear and crossunder(rsiVWAP, ovrsld)[lateleave] or crossover(rsiVWAP, ovrsld), comment="")

Lebih banyak