Strategi perdagangan yang akan diperkenalkan dalam artikel ini adalah strategi perdagangan mengikuti trend berdasarkan petunjuk ZigZag (ZigZag Trend Following Strategy). Strategi ini menggunakan petunjuk ZigZag untuk mengenal pasti trend harga dan membuka kedudukan untuk mengikuti trend apabila trend berbalik. Dalam kod Strategy Pine, petunjuk ZigZag digunakan untuk mengesahkan harga tinggi baru dan rendah baru. Sebagai isyarat perdagangan apabila harga memecahkan garis petunjuk ZigZag.
Inti strategi ini adalah menggunakan penunjuk ZigZag untuk menentukan titik-titik harga yang paling tinggi dan menunjukkan trend harga. Penunjuk ZigZag terdiri daripada Exponential Moving Average yang tinggi dan rendah. Secara khusus, ia terdiri daripada beberapa langkah berikut:
Mengira purata bergerak indeks harga tutup EMA, terdiri daripada tiga purata bergerak: garis cepat, garis tengah, dan garis perlahan.
Menentukan sama ada harga sedang meningkat. Apakah garis tengah semasa lebih tinggi daripada garis tengah K sebelumnya.
Jika trend naik, carilah harga terendah dalam tempoh pengesanan yang bermula dari titik rendah gelombang sebelumnya, sebagai nilai ZigZag.
Jika kini sedang dalam trend menurun, cari harga tertinggi dalam tempoh pengesanan yang bermula dari puncak gelombang sebelumnya, sebagai nilai ZigZag.
Ini membentuk penunjuk ZigZag yang mencerminkan titik-titik tertinggi pergerakan harga.
Berdasarkan ini, kita menggunakan garis ZigZag sebagai rujukan untuk menilai trend harga. Iaitu, apabila harga naik, kita melakukan lebih banyak; apabila harga turun, kita melakukan lebih sedikit.
Kelebihan menggunakan indikator ZigZag untuk menentukan trend harga dan mengesan titik-titik harga yang melampau sebagai penempatan adalah:
Ia boleh menyaring kebisingan pasaran dengan berkesan dan menangkap trend utama.
Ia adalah satu cara untuk menjana keuntungan yang lebih baik kerana ia adalah satu isyarat perdagangan yang berdasarkan pada harga yang tinggi dan rendah.
ZigZag line lebih halus dan boleh mengurangkan isyarat palsu.
Mudah untuk mengoptimumkan strategi dengan menyesuaikan parameter ZigZag.
Risiko utama strategi ini ialah:
Operasi jangka panjang mungkin terkurung kerana turun naik yang teruk.
Penunjuk ZigZag sensitif terhadap parameter. Jika tidak ditetapkan dengan betul, ia boleh kehilangan peluang perdagangan atau menghasilkan isyarat palsu. Parameter perlu diuji dan dioptimumkan dengan betul.
Strategi untuk mengesan trend lebih bergantung kepada keadaan trend. Strategi ini tidak akan berfungsi dengan baik jika terdapat pertimbangan kejutan.
Untuk menangani risiko di atas, kita boleh menetapkan mekanisme hentian untuk mengawal kerugian tunggal; pada masa yang sama menyesuaikan saiz pegangan, jangan mengejar operasi penuh; dan akhirnya, menggunakan kombinasi strategi yang sesuai dengan pelbagai jenis.
Kita boleh terus mengoptimumkan strategi ini dalam beberapa aspek:
Menambah mekanisme penangguhan kerugian. Sebagai contoh, menetapkan penangguhan bergerak atau penangguhan harga yang menarik balik.
Gabungan dengan penapis lain. Sebagai contoh, penunjuk tenaga yang dipertingkatkan untuk memastikan terdapat tenaga yang mencukupi; atau penunjuk jumlah transaksi untuk memastikan terdapat ciri-ciri pelepasan.
Konfigurasi parameter yang berbeza digunakan mengikut keadaan pasaran yang berbeza (seperti pasaran lembu dan pasaran beruang).
Uji parameter EMA yang berbeza untuk mencari kombinasi parameter terbaik.
Strategi ini menggunakan indikator ZigZag untuk menentukan trend harga, dan membina kedudukan yang dijejaki di sekitar titik ekstrem. Kelebihannya adalah berikutan, keuntungan yang cekap. Tetapi ada risiko yang terhalang.
/*backtest
start: 2023-12-31 00:00:00
end: 2024-01-07 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(title = "Noro's ZigTrend Strategy v1.0", shorttitle = "ZigTrend 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)
//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
length = input(4)
ExtremeDetection = input(4)
src = input(close)
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")
//ZigZag
f_zz(_length, _detection)=>
_hls = ema(ema(ema(src, _length), round(_length*0.66)), round(_length*0.33))
_isRising = _hls >= _hls[1]
_zigzag = _isRising and not _isRising[1] ? lowest(_detection) : not _isRising and _isRising[1] ? highest(_detection) : na
zigzag = f_zz(length, ExtremeDetection)
plot(zigzag, color=black, linewidth=2)
//Signals
up = close > zigzag
dn = close < zigzag
//Trading
lot = 0.0
lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if up
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)
if dn
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)