
Strategi trading yang akan diceritakan dalam artikel ini adalah strategi trading yang mengikuti tren berdasarkan indikator ZigZag (ZigZag Trend Following Strategy). Strategi ini menggunakan indikator ZigZag untuk mengidentifikasi tren harga dan membuka posisi untuk mengikuti tren ketika tren berbalik. Dalam kode Strategy Pine, indikator ZigZag digunakan untuk mengkonfirmasi harga tinggi baru dan rendah baru.
Inti dari strategi ini adalah menggunakan indikator ZigZag untuk menemukan titik-titik ekstrim dari harga dan menunjukkan tren harga. Indikator ZigZag terdiri dari Exponential Moving Average dengan harga tinggi dan rendah. Secara khusus, dibangun dalam beberapa langkah berikut:
Indeks moving average EMA untuk harga close terdiri dari tiga moving average: fast line, medium line, dan slow line.
Untuk menentukan apakah harga sedang naik. Apakah garis tengah saat ini lebih tinggi dari garis tengah K sebelumnya.
Jika saat ini sedang tren naik, carilah harga terendah dalam periode pengamatan yang dihitung dari titik terendah gelombang sebelumnya, sebagai nilai ZigZag.
Jika saat ini sedang tren turun, carilah harga tertinggi dalam periode pengamatan yang dihitung dari puncak gelombang sebelumnya, sebagai nilai ZigZag.
Ini membentuk indikator ZigZag yang mencerminkan titik terendah dari fluktuasi harga.
Pada dasar ini, kita menggunakan garis ZigZag sebagai referensi untuk menilai tren harga. Artinya, ketika harga naik, kita melakukan lebih banyak; ketika harga turun, kita melakukan lebih sedikit.
Keuntungan menggunakan indikator ZigZag untuk menentukan tren harga dan melacak titik ekstrim harga sebagai posisi adalah:
Ini bisa memfilter kebisingan pasar secara efektif untuk menangkap tren utama.
Dengan adanya sinyal perdagangan yang didasarkan pada kenaikan harga dan penurunan harga, Anda dapat menghasilkan keuntungan secara efisien.
ZigZag lebih halus dan mengurangi sinyal palsu.
Strategi dapat dengan mudah dioptimalkan dengan menyesuaikan parameter ZigZag.
Risiko utama dari strategi ini adalah:
Operasi jangka panjang dapat dikurung karena fluktuasi yang sangat besar.
Indikator ZigZag sensitif terhadap parameter. Jika tidak diatur dengan benar, peluang perdagangan dapat dilewatkan atau sinyal palsu dihasilkan. Parameter perlu diuji dan dioptimalkan dengan tepat.
Strategi untuk melacak tren lebih bergantung pada kondisi tren. Strategi ini tidak efektif jika terjadi perhitungan getaran.
Untuk risiko di atas, kita dapat mengatur mekanisme stop loss untuk mengontrol kerugian tunggal; sementara itu menyesuaikan ukuran kepemilikan, tidak mengejar operasi seluruh posisi; dan terakhir, menggunakan kombinasi strategi yang cocok untuk berbagai jenis.
Kami dapat terus mengoptimalkan strategi ini dalam beberapa hal:
Meningkatkan mekanisme stop loss, misalnya dengan menetapkan stop loss yang bergerak atau stop loss dengan harga yang mundur.
Dalam kombinasi dengan indikator lain, filter masuk. Misalnya, indikator energi yang diperkuat, untuk memastikan ada cukup energi gerak; atau indikator volume transaksi, untuk memastikan ada fitur pelepasan.
Konfigurasi parameter yang berbeda sesuai dengan situasi pasar yang berbeda (seperti pasar bull dan pasar bear).
Uji parameter rata-rata EMA yang berbeda untuk menemukan kombinasi optimal.
Strategi ini menggunakan indikator ZigZag untuk menentukan tren harga dan membangun posisi pelacakan di dekat titik ekstrim. Kelebihannya adalah berlanjut, keuntungan yang efisien. Namun, ada risiko yang tercakup.
/*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)