Strategi ini menggunakan penunjuk ZigZag untuk menentukan arah trend dan mengikuti trend setelah disahkan.
Strategi ini terutamanya menggunakan penunjuk ZigZag untuk menentukan arah trend harga. ZigZag boleh menapis bunyi pasaran dan mengenal pasti arah turun naik harga utama. Ia menghasilkan isyarat perdagangan apabila harga mencapai tahap tertinggi atau terendah baru.
Secara khusus, strategi pertama mengira nilai ZigZag. Apabila harga mencapai tahap tertinggi yang lebih tinggi, nilai ZigZag menjadi harga tinggi. Apabila harga mencapai tahap rendah yang lebih rendah, nilai ZigZag menjadi harga rendah. Oleh itu, ZigZag dapat mencerminkan dengan jelas arah fluktuasi harga utama.
Strategi menentukan arah trend berdasarkan nilai ZigZag. Apabila ZigZag naik, ia menunjukkan trend menaik. Apabila ZigZag jatuh, ia menunjukkan trend menurun. Strategi membuka kedudukan apabila ZigZag berbalik untuk mengikuti arah trend.
Secara khusus, strategi ini berjalan lama apabila ZigZag beralih ke tahap tertinggi baru, dan berjalan pendek apabila ZigZag beralih ke tahap terendah baru.
Risiko boleh dikurangkan dengan:
Strategi ini boleh dioptimumkan dalam aspek berikut:
Tambah stop loss untuk mengawal risiko kerugian tunggal, contohnya perintah stop atau stop limit.
Tambah mekanisme pengesanan pembalikan trend, contohnya MACD, purata bergerak. Tutup kedudukan apabila pembalikan dikesan.
Tambah modul kemasukan semula, kedudukan piramid apabila trend berterusan.
Tambah model pembelajaran mesin seperti LSTM untuk membantu pengesanan trend.
Mengoptimumkan pengurusan modal berdasarkan teori pengurangan atau korelasi.
Mengoptimumkan parameter yang komprehensif seperti tempoh ZigZag dengan backtesting dan pakar rujukan.
Strategi ini mengenal pasti arah trend oleh ZigZag dan memperdagangkan trend. Logiknya mudah dan mudah dilaksanakan. Tetapi risiko seperti kebergantungan satu penunjuk dan pembalikan trend wujud. Kita boleh mengoptimumkan melalui stop loss, penunjuk tambahan, kemasukan semula, model pembelajaran mesin dan lain-lain untuk menjadikannya lebih kukuh dan rasional. Dengan parameter dan kawalan risiko yang betul, ia dapat menjejaki trend jangka menengah dan panjang dengan berkesan.
/*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()