Strategi ini menggunakan penunjuk Zigzag untuk menarik garis sokongan dan rintangan dan mengambil kedudukan panjang atau pendek apabila harga memecahkan garis sokongan atau rintangan.
Strategi ini mula-mula menggunakan penunjuk Zigzag untuk menarik garis Zigzag di bawah parameter tertentu. Garis sokongan hijau ditarik apabila indikator Zigzag terbawah keluar. Garis rintangan merah ditarik apabila Zigzag memuncak keluar. Posisi panjang diambil apabila harga memecahkan di atas garis hijau. Posisi pendek diambil apabila harga memecahkan di bawah garis merah.
Secara khusus, logik teras adalah:
Gunakan ema untuk meluruskan harga penutupan dengan purata bergerak eksponensial tiga kali ganda, mendapatkan lengkung _hls yang diluruskan.
Menghakimi jika lengkung halus meningkat. Jika meningkat dan bar sebelumnya tidak meningkat, ia dianggap bawah. Ambil harga terendah bar ini. Jika jatuh dan bar sebelumnya meningkat, ia dianggap atas. Ambil harga tertinggi bar ini. Jika tidak, NaN.
Ulangi proses ini untuk mendapatkan garis zigzag zigzag.
Apabila zigzag naik, merakam titik puncak semasa. Apabila jatuh, merakam titik terendah semasa.
Lukis garis sokongan hijau ke atas apabila titik naik. Lukis garis rintangan merah ke bawah apabila titik jatuh.
Mengambil kedudukan panjang apabila harga melanggar di atas garis hijau. Mengambil kedudukan pendek apabila harga melanggar di bawah garis merah.
Kelebihan strategi ini termasuk:
Mengenali tahap sokongan / rintangan utama menggunakan penunjuk Zigzag.
Zigzag menapis kebisingan pasaran, menghasilkan isyarat perdagangan yang lebih jelas.
Masukkan kedudukan dengan keluar, yang boleh menangkap pembalikan trend tepat pada masanya.
Cara mudah dan berkesan untuk menarik garis sokongan / rintangan.
Logik yang jelas dan ruang pengoptimuman parameter yang besar.
Fleksibiliti dalam memilih produk dan jangka masa.
Risiko strategi ini:
Parameter Zigzag yang tidak betul boleh kehilangan peluang perdagangan.
Harga boleh menguji semula sokongan / rintangan selepas pecah. Gunakan stop loss untuk mengawal risiko.
Isyarat pecah mungkin mengelirukan, perlu disahkan dengan trend dan corak.
Perdagangan sampingan yang berpanjangan boleh menghasilkan perdagangan yang berlebihan dan tidak berkesan.
Pertimbangkan kos transaksi. Elakkan perdagangan yang terlalu kerap.
Penyelesaian:
Mengoptimumkan Zigzag parameter untuk mencari kombinasi terbaik.
Tetapkan stop loss tepat pada masanya selepas pecah untuk mengehadkan kerugian.
Tambah penapis seperti penunjuk trend untuk meningkatkan ketepatan.
Mengenali sisi dan mengelakkan perdagangan semasa tempoh ini.
Ringankan julat penembusan untuk mengurangkan perdagangan yang tidak berkesan.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Mengoptimumkan parameter Zigzag dengan backtesting untuk mencari optimum.
Pertimbangkan kemungkinan untuk menguji semula sokongan / rintangan selepas pecah. Tambah logik keluar untuk senario ujian semula.
Tambah penapis seperti MA untuk menyaring isyarat kebarangkalian rendah.
Masukkan penunjuk jumlah untuk mengesahkan isyarat pecah.
Melaksanakan metodologi ganda Lachenbruch
Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara dinamik.
Memperkenalkan strategi stop loss untuk mengurangkan risiko.
Ringkasnya, ini adalah strategi breakout osilasi yang mudah dan praktikal. Ia menarik sokongan / rintangan menggunakan Zigzag dan perdagangan breakout. Strategi ini adaptif tetapi dengan beberapa risiko. Pengoptimuman pada parameter, penapis isyarat dan kawalan risiko dapat memperbaikinya. Strategi breakout sedemikian sesuai dengan peniaga aktif yang dapat memahami irama pasaran.
/*backtest start: 2022-10-13 00:00:00 end: 2023-10-19 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 // strategy(title = "Noro's ZZ-2 Strategy", shorttitle = "Noro's ZZ-2 Strategy", 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, title = "ZigZag length") Extreme = input(4, title = "ZigZag extreme") src = input(close, title = "Source") showzz = input(false, defval = false, title = "Show ZigZag") 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, Extreme) zzcol = showzz ? black : na plot(zigzag, color = zzcol, linewidth = 2) //Levels dot = 0.0 dot := zigzag > 0 ? zigzag : dot[1] uplevel = 0.0 uplevel := dot > dot[1] ? zigzag : uplevel[1] dnlevel = 0.0 dnlevel := dot < dot[1] ? zigzag : dnlevel[1] upcol = na upcol := dot > dot[1] ? na : lime plot(uplevel, color = upcol, linewidth = 2) dncol = na dncol := dot < dot[1] ? na : red plot(dnlevel, color = dncol, linewidth = 2) //Trading lot = 0.0 lot := strategy.position_size != strategy.position_size[1] ? strategy.equity / close * capital / 100 : lot[1] if dot > 0 strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, stop = uplevel) strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, stop = dnlevel)