Strategi ZVWAP berdasarkan jarak Z dari VWAP

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

img

Ringkasan

Strategi ini berdasarkan jarak Z dari penunjuk VWAP oleh LazyBear. Ia menggunakan jarak Z antara harga dan VWAP untuk menentukan keadaan overbought dan oversold, serta entri dan keluar. Strategi ini menggabungkan garis EMA dan jarak Z melintasi tahap 0 untuk menapis beberapa bunyi bising.

Logika Strategi

  1. Mengira nilai VWAP
  2. Mengira jarak Z antara harga dan VWAP
  3. Tentukan garis overbought (2.5) dan baris oversold (-0.5)
  4. Pergi panjang apabila EMA pantas > EMA perlahan, jarak Z < garis oversold dan jarak Z melintasi di atas 0
  5. Posisi ditutup apabila jarak Z > garis overbought
  6. Menggabungkan logik stop loss

Fungsi utama:

  • calc_zvwap: Mengira jarak Z antara harga dan VWAP
  • Nilai VWAP: vwap ((hlc3)
  • EMA pantas: ema ((dekat,Ema pantas)
  • EMA perlahan: Ema (dekat, perlahan)

Analisis Kelebihan

  1. Jarak Z secara intuitif menunjukkan tahap overbought / oversold
  2. EMA menapis keluar pecah palsu
  3. Membolehkan piramid untuk memanfaatkan trend
  4. Mempunyai logik stop loss untuk mengawal risiko

Analisis Risiko

  1. Perlu memastikan parameter seperti garis, tempoh EMA ditetapkan dengan betul
  2. Z-jarak penunjuk kelewatan, mungkin terlepas titik perubahan utama
  3. Pyramiding boleh meningkatkan kerugian jika trend berbalik
  4. Stop loss perlu ditetapkan dengan munasabah

Penyelesaian:

  1. Mengoptimumkan parameter melalui backtesting
  2. Tambah penunjuk lain kepada isyarat penapis
  3. Tentukan keadaan yang sesuai untuk piramid
  4. Gunakan stop loss dinamik

Arahan pengoptimuman

  1. Mengoptimumkan tempoh EMA
  2. Uji kriteria overbought/oversold yang berbeza
  3. Tambah penunjuk lain untuk menapis bunyi bising
  4. Uji teknik stop loss yang berbeza
  5. Mengoptimumkan logik masuk, piramid dan stop loss

Ringkasan

Strategi ini menggunakan jarak Z untuk menentukan hubungan harga-VWAP dan menambah EMA untuk menapis isyarat, bertujuan untuk menangkap peluang trend. Ia membolehkan piramid untuk mengikuti trend dan mempunyai stop loss untuk mengawal risiko. Pengoptimuman dan menambah penunjuk lain dapat meningkatkan ketahanan. Walau bagaimanapun, isu jarak Z yang tertinggal harus dipertimbangkan semasa pengoptimuman. Secara keseluruhan, ini adalah strategi trend-mengikuti dengan logik yang mudah dan jelas. Apabila dioptimumkan sepenuhnya, ia boleh menjadi alat yang cekap untuk perdagangan trend.


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