
Strategi ini menggunakan petunjuk ZigZag untuk menentukan arah trend, dan untuk mengesan trend setelah trend disahkan, termasuk dalam strategi pengesanan trend.
Strategi ini digunakan untuk menentukan arah trend harga dengan menggunakan indikator ZigZag. Indeks ZigZag mampu menyaring bunyi pasaran dan menentukan arah pergerakan harga utama. ZigZag akan mengeluarkan isyarat perdagangan apabila harga membuat tinggi baru atau rendah baru.
Khususnya, strategi pertama mengira nilai ZigZag, ZigZag untuk harga tinggi ketika harga membuat titik tinggi yang lebih tinggi; dan ZigZag untuk harga rendah ketika harga membuat titik rendah yang lebih rendah. Dengan cara ini, ZigZag dapat mencerminkan dengan jelas arah pergerakan utama harga.
Strategi menilai arah trend berdasarkan nilai ZigZag. Apabila ZigZag naik, menunjukkan berada dalam trend naik; Apabila ZigZag turun, menunjukkan berada dalam trend menurun. Strategi membuka kedudukan apabila ZigZag berbalik, untuk mengikuti arah trend.
Khususnya, strategi membuka lebih banyak pesanan apabila ZigZag bertukar membentuk tinggi baru, dan membuka pesanan kosong apabila ZigZag bertukar membentuk rendah baru. Syarat kedudukan kosong adalah ZigZag bertukar semula. Dengan demikian, strategi perdagangan automatik yang berdasarkan kepada ZigZag menilai trend dilaksanakan.
Risiko boleh dikurangkan dengan:
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Tambah strategi hentikan kerugian untuk mengawal risiko kerugian tunggal. Anda boleh menetapkan hentikan bergerak atau hentikan hentikan tunggal.
Menambah mekanisme penghakiman pembalikan trend. Indikator seperti MACD, purata bergerak dan lain-lain boleh dimasukkan untuk menutup kedudukan apabila penghakiman pembalikan trend.
Tambah modul re-entry. Apabila trend berterusan, anda boleh menambah kedudukan dengan tepat untuk mendapatkan lebih banyak keuntungan.
Menambah model pembelajaran mesin. Model pembelajaran mendalam seperti LSTM boleh dilatih untuk membantu ZigZag menentukan arah trend.
Mekanisme pengurusan wang yang dioptimumkan. Saiz kedudukan boleh dioptimumkan berdasarkan teori penarikan balik atau hubungan.
Parameter pengoptimuman menyeluruh ditetapkan. Parameter pengoptimuman boleh dilakukan dengan mengkaji semula sejarah dan merujuk kepada buku-buku profesional, seperti panjang kitaran ZigZag.
Strategi ini menggunakan petunjuk ZigZag untuk menentukan arah trend, mewujudkan strategi perdagangan berdasarkan trend. Logik strategi mudah dan jelas, mudah dilaksanakan. Tetapi terdapat juga masalah seperti ketergantungan pada satu petunjuk, risiko pembalikan trend.
/*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()