Strategi ZVWAP Berdasarkan jarak Z dari VWAP

Penulis:ChaoZhang, Tanggal: 2023-11-10 12:02:19
Tag:

img

Gambaran umum

Strategi ini didasarkan pada jarak Z dari indikator VWAP oleh LazyBear. Strategi ini menggunakan jarak Z antara harga dan VWAP untuk menentukan kondisi overbought dan oversold, serta entri dan keluar.

Logika Strategi

  1. Menghitung nilai VWAP
  2. Menghitung jarak Z antara harga dan VWAP
  3. Set line overbought (2.5) dan line oversold (-0.5)
  4. Pergi panjang ketika EMA cepat > EMA lambat, jarak Z < garis oversold dan jarak Z melintasi di atas 0
  5. Posisi ditutup ketika jarak Z > garis overbought
  6. Masukkan logika stop loss

Fungsi Utama:

  • calc_zvwap: Menghitung jarak Z antara harga dan VWAP
  • Nilai VWAP: vwap ((hlc3)
  • EMA cepat: ema ((dekat, fastEma)
  • EMA lambat: ema ((dekat, slowEma)

Analisis Keuntungan

  1. Jarak Z secara intuitif menunjukkan tingkat overbought/oversold
  2. EMA memfilter keluar breakout palsu
  3. Memungkinkan piramida untuk memanfaatkan tren
  4. Memiliki logika stop loss untuk mengendalikan risiko

Analisis Risiko

  1. Perlu memastikan parameter seperti garis, periode EMA ditetapkan dengan benar
  2. Z-distance indicator lag, mungkin melewatkan titik balik utama
  3. Pyramiding dapat meningkatkan kerugian jika tren berbalik
  4. Stop loss harus diatur secara wajar

Solusi:

  1. Mengoptimalkan parameter melalui backtesting
  2. Tambahkan indikator lain ke sinyal filter
  3. Menciptakan kondisi yang tepat untuk piramida
  4. Gunakan stop loss dinamis

Arahan Optimasi

  1. Mengoptimalkan periode EMA
  2. Uji kriteria overbought/oversold yang berbeda
  3. Tambahkan indikator lain untuk menyaring kebisingan
  4. Uji teknik stop loss yang berbeda
  5. Mengoptimalkan masuk, piramida dan stop loss logika

Ringkasan

Strategi ini menggunakan jarak Z untuk menentukan hubungan harga-VWAP dan menambahkan EMA untuk menyaring sinyal, bertujuan untuk menangkap peluang tren. Ini memungkinkan piramida untuk mengikuti tren dan memiliki stop loss untuk mengendalikan risiko. Optimasi dan menambahkan indikator lain dapat meningkatkan ketahanan. Namun, masalah tertinggal jarak Z harus dipertimbangkan selama optimasi. Secara keseluruhan, ini adalah strategi trend-mengikuti dengan logika yang sederhana dan jelas. Ketika sepenuhnya dioptimalkan, ini bisa menjadi alat yang efisien untuk perdagangan tren.


/*backtest
start: 2022-11-03 00:00:00
end: 2023-11-09 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mohanee

//@version=4
//This is based on Z distance from VWAP by Lazybear
strategy(title="ZVWAP[LB] strategy", overlay=false,pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)
length=input(13,"length")

calc_zvwap(pds, source1) =>
	mean = sum(volume*source1,pds)/sum(volume,pds)
	vwapsd = sqrt(sma(pow(source1-mean, 2), pds) )
	(close-mean)/vwapsd


upperTop=2.5  //input(2.5)
upperBottom=2.0  //input(2.0)
lowerTop=-0.5  //input(-0.5)
lowerBottom=-2.0 //input(-2.0)

buyLine=input(-0.5, title="OverSold Line",minval=-2, maxval=3)
sellLine=input(2.0, title="OverBought Line",minval=-2, maxval=3)

fastEma=input(13, title="Fast EMA",minval=1, maxval=50)
slowEma=input(55, title="Slow EMA",minval=10, maxval=200)

stopLoss =input(5, title="Stop Loss",minval=1) 

hline(0, title="Middle Line", linestyle=hline.style_dotted, color=color.green)

ul1=plot(upperTop, "OB High")
ul2=plot(upperBottom, "OB Low")
fill(ul1,ul2, color=color.red)
ll1=plot(lowerTop, "OS High")
ll2=plot(lowerBottom, "OS Low")
fill(ll1,ll2, color=color.green)
zvwapVal=calc_zvwap(length,close)
plot(zvwapVal,title="ZVWAP",color=color.purple, linewidth=2)


longEmaVal=ema(close,slowEma)
shortEmaVal=ema(close,fastEma)  

vwapVal=vwap(hlc3)


zvwapDipped=false

for i = 1 to 10
    zvwapDipped := zvwapDipped or zvwapVal[i]<=buyLine

longCondition=  shortEmaVal > longEmaVal  and zvwapDipped and  crossover(zvwapVal,0)

barcolor(longCondition ? color.yellow: na)

strategy.entry(id="ZVWAPLE", long=true,  when= longCondition  and strategy.position_size<1) 


//Add
strategy.entry(id="ZVWAPLE", comment="Add", long=true,  when= strategy.position_size>1 and close<strategy.position_avg_price and crossover(zvwapVal,0)) 


//calculate stop Loss
stopLossVal =  strategy.position_avg_price -  (strategy.position_avg_price*stopLoss*0.01)

strategy.close(id="ZVWAPLE",comment="SL Exit",    when=close<stopLossVal)   //close all on stop loss

strategy.close(id="ZVWAPLE",comment="TPExitAll",    qty=strategy.position_size ,   when= crossunder(zvwapVal,sellLine))   //close all      zvwapVal>sellLine

Lebih banyak