Zigzag Breakout Strategi

Penulis:ChaoZhang, Tarikh: 2023-10-20 16:37:28
Tag:

img

Ringkasan

Strategi ini menggunakan penunjuk Zigzag untuk menarik garis sokongan dan rintangan dan mengambil kedudukan panjang atau pendek apabila harga memecahkan garis sokongan atau rintangan.

Logika Strategi

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:

  1. Gunakan ema untuk meluruskan harga penutupan dengan purata bergerak eksponensial tiga kali ganda, mendapatkan lengkung _hls yang diluruskan.

  2. 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.

  3. Ulangi proses ini untuk mendapatkan garis zigzag zigzag.

  4. Apabila zigzag naik, merakam titik puncak semasa. Apabila jatuh, merakam titik terendah semasa.

  5. Lukis garis sokongan hijau ke atas apabila titik naik. Lukis garis rintangan merah ke bawah apabila titik jatuh.

  6. Mengambil kedudukan panjang apabila harga melanggar di atas garis hijau. Mengambil kedudukan pendek apabila harga melanggar di bawah garis merah.

Analisis Kelebihan

Kelebihan strategi ini termasuk:

  1. Mengenali tahap sokongan / rintangan utama menggunakan penunjuk Zigzag.

  2. Zigzag menapis kebisingan pasaran, menghasilkan isyarat perdagangan yang lebih jelas.

  3. Masukkan kedudukan dengan keluar, yang boleh menangkap pembalikan trend tepat pada masanya.

  4. Cara mudah dan berkesan untuk menarik garis sokongan / rintangan.

  5. Logik yang jelas dan ruang pengoptimuman parameter yang besar.

  6. Fleksibiliti dalam memilih produk dan jangka masa.

Analisis Risiko

Risiko strategi ini:

  1. Parameter Zigzag yang tidak betul boleh kehilangan peluang perdagangan.

  2. Harga boleh menguji semula sokongan / rintangan selepas pecah. Gunakan stop loss untuk mengawal risiko.

  3. Isyarat pecah mungkin mengelirukan, perlu disahkan dengan trend dan corak.

  4. Perdagangan sampingan yang berpanjangan boleh menghasilkan perdagangan yang berlebihan dan tidak berkesan.

  5. Pertimbangkan kos transaksi. Elakkan perdagangan yang terlalu kerap.

Penyelesaian:

  1. Mengoptimumkan Zigzag parameter untuk mencari kombinasi terbaik.

  2. Tetapkan stop loss tepat pada masanya selepas pecah untuk mengehadkan kerugian.

  3. Tambah penapis seperti penunjuk trend untuk meningkatkan ketepatan.

  4. Mengenali sisi dan mengelakkan perdagangan semasa tempoh ini.

  5. Ringankan julat penembusan untuk mengurangkan perdagangan yang tidak berkesan.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Mengoptimumkan parameter Zigzag dengan backtesting untuk mencari optimum.

  2. Pertimbangkan kemungkinan untuk menguji semula sokongan / rintangan selepas pecah. Tambah logik keluar untuk senario ujian semula.

  3. Tambah penapis seperti MA untuk menyaring isyarat kebarangkalian rendah.

  4. Masukkan penunjuk jumlah untuk mengesahkan isyarat pecah.

  5. Melaksanakan metodologi ganda Lachenbruch (panjang dan pendek) untuk menapis isyarat dan keuntungan yang salah.

  6. Gunakan pembelajaran mesin untuk mengoptimumkan parameter secara dinamik.

  7. Memperkenalkan strategi stop loss untuk mengurangkan risiko.

Kesimpulan

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)


Lebih lanjut