Strategi ini dinamakan “Price Channel VWAP Trading Strategy” dan merupakan strategi berdasarkan saluran harga untuk mencapai perdagangan VWAP. Gagasan utama strategi ini adalah: dalam saluran harga, menggunakan garis rata-rata indikator VWAP dan garis saluran yang bergerak ke atas dan ke bawah untuk membuat keputusan mengenai titik jual beli, membuka kedudukan mengikut peratusan aset keseluruhan untuk kedudukan tetap apabila melanggar garis saluran, dan menutup posisi apabila kembali ke garis rata-rata VWAP.
Strategi ini menggunakan VWAP untuk mengira purata harga transaksi semasa. VWAP mewakili purata harga, iaitu perbandingan antara jumlah transaksi dan jumlah transaksi.
Strategi menggunakan garis rata-rata indikator VWAP dan garis laluan perpindahan. Perkadaran garis laluan perpindahan ditetapkan melalui parameter longlevel1 danshortlevel1. Apabila harga menembusi atas garis laluan perpindahan, buka lebih banyak akaun mengikut peratusan kedudukan pada parameter lotsizelong; Apabila harga menembusi bawah garis laluan perpindahan, buka kosong mengikut peratusan kedudukan pada parameter lotsizeshort.
Tetapan parameter strategi ini mencerminkan pemikiran perdagangan saluran. Pengguna boleh menyesuaikan lebar saluran dan saiz peratusan kedudukan mengikut keutamaan mereka sendiri, untuk mencapai tahap frekuensi perdagangan yang berbeza.
Strategi perdagangan ini mempunyai beberapa kelebihan:
Oleh kerana petunjuk VWAP dapat mencerminkan tahap purata harga dengan baik, perdagangan berdasarkan salurannya dapat mengunci pusat nilai dengan berkesan, dan mengelakkan bias oleh band turun naik jangka pendek. Pada masa yang sama, menggunakan saluran parameter yang berbeza untuk menggabungkan, membina gudang secara berturut-turut, dapat mengawal risiko dengan berkesan, dan mencegah risiko unilateral untuk memusatkan kedudukan. Akhirnya, dengan berhenti tepat pada masanya untuk kembali ke kedudukan kosong berhampiran garis rata-rata VWAP, kerugian yang disebabkan oleh pembalikan harga dapat dikurangkan.
Strategi ini juga mempunyai risiko yang perlu diperhatikan:
Indeks VWAP tidak sensitif terhadap pergerakan perdagangan frekuensi tinggi, dan jika terdapat kenaikan harga yang melampau atau kecacatan jangka pendek, ia masih akan menyebabkan isyarat perdagangan yang tidak perlu dan kerugian. Selain itu, jika parameter saluran ditetapkan terlalu longgar, isyarat yang tidak berkesan akan terbentuk.
Penyelesaian adalah menetapkan parameter penilaian yang munasabah, menyesuaikan parameter saluran dengan sewajarnya; dan pada masa yang sama, dalam kombinasi dengan indikator lain, menilai ketidaksamaan harga, mengelakkan tindak balas buta; dan akhirnya menilai pengoptimuman parameter di pelbagai peringkat saluran dan julat pengembalian, untuk mencapai kesan penghentian yang lebih baik.
Strategi ini boleh dioptimumkan dalam beberapa arah:
Anda boleh menambah lebih banyak saluran dan mengoptimumkan parameter gabungan untuk mencapai kesan perdagangan yang lebih stabil. Selain itu, anda boleh menambahkan peraturan penghakiman jumlah perdagangan untuk mengelakkan kenaikan harga yang tidak berkesan yang menyebabkan kerugian perdagangan. Akhirnya, anda juga boleh menetapkan peraturan hentikan kerugian, keluar dari tempat hentikan kerugian apabila kerugian memegang kedudukan mencapai peratusan tertentu, dan mengawal risiko dengan berkesan.
Strategi ini menggabungkan indikator VWAP dengan saluran harga, untuk mencapai strategi perdagangan yang agak stabil. Tetapan parameter strategi fleksibel, pengguna boleh menyesuaikan mengikut keutamaan mereka sendiri. Strategi ini dapat menentukan arah pusat nilai dengan berkesan, mencapai keuntungan yang stabil melalui kombinasi parameter dan pembinaan gudang secara berturut-turut. Walaupun terdapat ruang untuk penambahbaikan, secara keseluruhan merupakan strategi perdagangan kuantitatif yang sangat praktikal.
/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title = "VWAP Bands Backtest", shorttitle = "VWAP Bands Backtest", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)
//Settings
lotsizelong = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %")
lotsizeshort = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
shortlevel1 = input(1.0, title = "Short line 1")
longlevel1 = input(-1.0, title = "Long line 1")
needoffset = input(true, title = "Offset")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
truetime = true
//VWAP
ma = vwap(hlc3)
//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
shortline1 = short1? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close
//Lines
colorlong1 = long1 ? color.lime : na
colorshort1 = short1 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")
//Trading
lotlong = 0.0
lotshort = 0.0
lotlong := size == 0 ? (strategy.equity / close) * (lotsizelong / 100) : lotlong[1]
lotshort := size == 0 ? (strategy.equity / close) * (lotsizeshort / 100) : lotshort[1]
if ma > 0
if lotlong > 0
lotslong = 0.0
lotslong := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0
strategy.entry("L1", strategy.long, lotlong, limit = longline1, when = (lotslong == 0 and long1 and truetime))
if lotshort > 0
lotsshort = 0.0
lotsshort := strategy.position_size < 0 ? round(strategy.position_size / lotshort) : 0.0
strategy.entry("S1", strategy.short, lotshort, limit = shortline1, when = (lotsshort == 0 and short1 and truetime))
if strategy.position_size > 0
strategy.exit("TPL", "L1", limit = ma)
if strategy.position_size < 0
strategy.exit("TPS", "S1", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()
strategy.cancel("L1")
strategy.cancel("S1")
strategy.cancel("TPL")
strategy.cancel("TPS")