
Strategi ini bernama Price Channel VWAP Trading Strategy, yaitu strategi yang didasarkan pada saluran harga untuk mencapai perdagangan VWAP. Gagasan utama dari strategi ini adalah: dalam saluran harga, menggunakan garis rata-rata indikator VWAP dan garis saluran yang bergeser ke atas dan ke bawah untuk melakukan penilaian titik jual beli, membuka posisi sesuai dengan persentase total aset dari posisi tetap saat menerobos garis saluran, dan menutup posisi saat kembali ke garis rata-rata VWAP.
Strategi ini menghitung harga transaksi rata-rata dari harga saat ini dengan menggunakan indikator VWAP. VWAP mewakili harga rata-rata, yaitu rasio antara jumlah transaksi dan volume transaksi. Indikator VWAP mencerminkan seberapa jauh harga saat ini dan harga transaksi rata-rata historis.
Strategi menggunakan garis rata-rata indikator VWAP dan garis channel bias. Proporsi garis channel bias ditetapkan melalui parameter longlevel1 dan shortlevel1. Ketika harga menembus garis channel bias, buka lebih banyak opsi sesuai dengan persentase posisi di lotsizelong; Ketika harga menembus garis channel bias, buka lebih banyak opsi sesuai dengan persentase posisi di lotsizeshort.
Pengaturan parameter strategi ini mencerminkan ide perdagangan saluran. Pengguna dapat menyesuaikan lebar saluran dan ukuran persentase posisi sesuai dengan preferensi mereka sendiri, sehingga mencapai frekuensi perdagangan yang berbeda.
Strategi perdagangan ini memiliki beberapa keuntungan:
Karena indikator VWAP dapat mencerminkan tingkat rata-rata harga dengan baik, perdagangan berdasarkan jalurnya dapat secara efektif mengunci pusat nilai dan menghindari bias oleh band fluktuasi jangka pendek. Pada saat yang sama, dengan menggunakan saluran parameter yang berbeda untuk melakukan kombinasi, membangun gudang secara berkelompok, dapat secara efektif mengontrol risiko dan mencegah risiko unilateral untuk memusatkan ledakan. Akhirnya, dengan berhenti tepat waktu kembali ke posisi kosong di dekat garis rata-rata VWAP, dapat mengurangi kerugian yang disebabkan oleh reversal harga.
Strategi ini juga memiliki beberapa risiko yang perlu diperhatikan:
Indikator VWAP tidak sensitif terhadap fluktuasi perdagangan frekuensi tinggi, dan jika terjadi lonjakan harga yang ekstrim atau abnormalitas jangka pendek, sinyal perdagangan yang tidak perlu dan kerugian akan tetap terjadi. Selain itu, jika parameter saluran diatur terlalu longgar, sinyal yang tidak efektif akan terbentuk.
Pengendalian adalah pengaturan parameter penilaian yang masuk akal, penyesuaian parameter saluran yang tepat; sekaligus digabungkan dengan indikator lain untuk menilai abnormalitas harga, menghindari tindak lanjut buta; dan akhirnya mengevaluasi optimasi parameter untuk berbagai tingkat saluran dan ruang lingkup regresi, untuk mencapai efek penghentian yang lebih baik.
Strategi ini dapat dioptimalkan dari beberapa arah:
Anda dapat menambahkan lebih banyak saluran, dan mengoptimalkan parameter kombinasi, untuk mencapai efek perdagangan yang lebih stabil. Selain itu, Anda dapat menambahkan aturan penilaian volume perdagangan, untuk menghindari harga yang tidak efektif melonjak menyebabkan kerugian perdagangan. Akhirnya, Anda juga dapat mengatur aturan stop loss, keluar dari stop loss ketika kerugian memegang posisi mencapai proporsi tertentu, untuk mengontrol risiko secara efektif.
Strategi ini menggabungkan indikator VWAP dengan saluran harga, untuk mencapai strategi perdagangan yang relatif stabil. Pengaturan parameter strategi fleksibel, dan pengguna dapat menyesuaikan sesuai dengan preferensi mereka sendiri. Strategi ini dapat secara efektif menentukan arah pusat nilai, melalui kombinasi parameter dan batch building, untuk mencapai efek keuntungan yang stabil. Meskipun ada ruang untuk perbaikan, secara keseluruhan merupakan strategi perdagangan kuantitatif yang sangat praktis.
/*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")