Strategi ini menggunakan indikator ZigZag untuk menentukan arah tren dan mengikuti tren setelah dikonfirmasi.
Strategi ini terutama menggunakan indikator ZigZag untuk menentukan arah tren harga. ZigZag dapat menyaring kebisingan pasar dan mengidentifikasi arah fluktuasi harga utama.
Secara khusus, strategi pertama menghitung nilai ZigZag. Ketika harga mencapai puncak yang lebih tinggi, nilai ZigZag menjadi harga tinggi. Ketika harga mencapai titik terendah yang lebih rendah, nilai ZigZag menjadi harga rendah. Dengan demikian, ZigZag dapat dengan jelas mencerminkan arah fluktuasi harga utama.
Strategi ini menentukan arah tren berdasarkan nilai ZigZag. Ketika ZigZag naik, itu menunjukkan tren naik. Ketika ZigZag turun, itu menunjukkan tren turun. Strategi ini membuka posisi ketika ZigZag berbalik untuk mengikuti arah tren.
Secara khusus, strategi berjalan panjang ketika ZigZag berubah menjadi tinggi baru, dan berjalan pendek ketika ZigZag berubah menjadi rendah baru.
Risiko dapat dikurangi dengan:
Strategi dapat dioptimalkan dalam aspek berikut:
Tambahkan stop loss untuk mengendalikan risiko kerugian tunggal, misalnya perintah stop trailing atau stop limit.
Tambahkan mekanisme deteksi pembalikan tren, misalnya MACD, moving average. Tutup posisi ketika pembalikan terdeteksi.
Tambahkan modul re-entry, posisi piramida saat tren berlanjut.
Tambahkan model pembelajaran mesin seperti LSTM untuk membantu deteksi tren.
Mengoptimalkan manajemen modal berdasarkan teori drawdown atau korelasi.
Mengoptimalkan secara komprehensif parameter seperti periode ZigZag dengan backtesting dan referensi keahlian.
Strategi ini mengidentifikasi arah tren dengan ZigZag dan memperdagangkan tren. Logika sederhana dan mudah diterapkan. Tetapi risiko seperti ketergantungan indikator tunggal dan pembalikan tren ada. Kita dapat mengoptimalkan melalui stop loss, indikator tambahan, re-entry, model pembelajaran mesin dll untuk membuatnya lebih kuat dan rasional. Dengan parameter dan kontrol risiko yang tepat, dapat secara efektif melacak tren jangka menengah dan panjang.
/*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()