
Strategi ini menggunakan indikator ZigZag untuk menentukan arah tren, dan melakukan pelacakan tren setelah tren dikonfirmasi, termasuk dalam strategi pelacakan tren.
Strategi ini terutama menggunakan indikator ZigZag untuk menentukan arah tren harga. Indikator ZigZag dapat menyaring kebisingan pasar dan menentukan arah fluktuasi harga utama. ZigZag akan mengirimkan sinyal perdagangan ketika harga membuat tinggi baru atau rendah baru.
Secara khusus, strategi pertama menghitung nilai ZigZag, dengan ZigZag untuk harga tinggi ketika harga menciptakan titik tinggi yang lebih tinggi; dan dengan ZigZag untuk harga rendah ketika harga menciptakan titik rendah yang lebih rendah. Dengan demikian, ZigZag dapat dengan jelas mencerminkan arah utama pergerakan harga.
Strategi menilai arah tren berdasarkan nilai ZigZag. Ketika ZigZag naik, menunjukkan berada dalam tren naik; Ketika ZigZag turun, menunjukkan berada dalam tren turun. Strategi membuka posisi saat ZigZag berbalik, untuk mengikuti arah tren.
Secara khusus, strategi membuka overorder saat ZigZag berbalik membentuk tinggi baru, dan membuka kosong saat ZigZag berbalik membentuk rendah baru. Kondisi posisi kosong adalah ZigZag berbalik lagi. Dengan demikian, strategi perdagangan otomatis yang didasarkan pada penilaian tren ZigZag terwujud.
Risiko dapat dikurangi dengan:
Strategi ini dapat dioptimalkan dalam beberapa hal:
Tambahkan strategi stop loss untuk mengendalikan risiko kerugian tunggal. Anda dapat mengatur stop loss bergerak atau stop loss tetap.
Menambahkan mekanisme penghakiman pembalikan tren. Indikator seperti MACD, moving average, dan lain-lain dapat digunakan untuk menutup posisi jika terjadi pembalikan tren.
Tambahkan modul re-entry. Jika tren berlanjut, Anda dapat menaikkan posisi dengan tepat untuk mendapatkan lebih banyak keuntungan.
Menambahkan model pembelajaran mesin. Dapat melatih model pembelajaran mendalam seperti LSTM untuk membantu ZigZag menentukan arah tren.
Mekanisme pengelolaan dana yang dioptimalkan. Ukuran posisi dapat dioptimalkan berdasarkan teori penarikan atau korelasi.
Parameter pengoptimalan secara keseluruhan ditetapkan. Parameter pengoptimalan dapat dilakukan melalui retrospeksi sejarah dan referensi buku-buku profesional, seperti panjang siklus ZigZag.
Strategi ini menggunakan indikator ZigZag untuk menentukan arah tren, dan menerapkan strategi perdagangan berbasis tren. Logika strategi sederhana, jelas, dan mudah diterapkan. Namun, ada juga masalah seperti ketergantungan pada satu indikator, risiko pembalikan tren, dan sebagainya.
/*backtest
start: 2022-10-23 00:00:00
end: 2023-04-14 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//Noro
//2018
//@version=2
strategy(title = "Noro's ZZ Strategy v1.0", shorttitle = "ZZ str 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(false, defval = false, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
tf = input('W', title='Timeframe for ZigZag')
showzz = input(false, defval = false, title = "Show ZigZag")
showbg = input(false, defval = false, title = "Show Background")
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
zigzag() =>
_isUp = close >= open
_isDown = close <= open
_direction = _isUp[1] and _isDown ? -1 : _isDown[1] and _isUp ? 1 : nz(_direction[1])
_zigzag = _isUp[1] and _isDown and _direction[1] != -1 ? highest(2) : _isDown[1] and _isUp and _direction[1] != 1 ? lowest(2) : na
useAltTF = true
zz = useAltTF ? (change(time(tf)) != 0 ? request.security(syminfo.tickerid, tf, zigzag()) : na) : zigzag()
zzcolor = showzz ? black : na
plot(zz, title = 'ZigZag', color = zzcolor, linewidth = 2)
//Levels
dot = zz > 0 ? zz : dot[1]
uplevel = dot > dot[1] ? dot : uplevel[1]
dnlevel = dot < dot[1] ? dot : dnlevel[1]
colorup = close[1] < uplevel[1] and uplevel == uplevel[1] ? lime : na
colordn = close[1] > dnlevel[1] and dnlevel == dnlevel[1] ? red : na
plot(uplevel, color = colorup, linewidth = 3)
plot(dnlevel, color = colordn, linewidth = 3)
//Background
size = strategy.position_size
bgcol = showbg == false ? na : size != size[1] ? blue : na
bgcolor(bgcol, transp = 50)
//Trading
lot = strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1]
if uplevel > 0 and dnlevel > 0
strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel + syminfo.mintick)
strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel - syminfo.mintick)
if time > timestamp(toyear, tomonth, today, 23, 59)
strategy.close_all()