Trend Berasaskan ZigZag Mengikuti Strategi

Penulis:ChaoZhang, Tarikh: 2023-10-30 14:51:08
Tag:

img

Ringkasan

Strategi ini menggunakan penunjuk ZigZag untuk menentukan arah trend dan mengikuti trend setelah disahkan.

Logika Strategi

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.

Analisis Kelebihan

  • ZigZag dapat menapis bunyi pasaran dengan berkesan dan menentukan arah trend utama dengan tepat.
  • Masa giliran ZigZag adalah tepat, membolehkan peluang masuk yang optimum.
  • Ia melaksanakan trend murni mengikut strategi tanpa penunjuk atau model yang rumit.
  • Logiknya mudah dan jelas, mudah difahami dan diubah.
  • Frekuensi perdagangan boleh dikawal secara bebas melalui penyesuaian parameter.

Analisis Risiko

  • ZigZag tidak sensitif terhadap pembalikan trend jangka menengah, berpotensi kehilangan pembalikan yang lebih cepat.
  • Strategi mengikut trend tidak dapat menangani kerugian daripada pembalikan trend.
  • Ia tidak mengehadkan saiz kerugian perdagangan tunggal, menimbulkan risiko kerugian tunggal yang besar.
  • Strategi ini hanya bergantung pada satu petunjuk, risiko terlalu sesuai.

Risiko boleh dikurangkan dengan:

  • Menggabungkan penunjuk lain untuk mengesan risiko pembalikan trend.
  • Memendekkan tempoh memegang, menghentikan kerugian tepat pada masanya.
  • Menambah pengurusan risiko untuk mengehadkan saiz kerugian tunggal.
  • Menambah model pembelajaran mesin untuk meningkatkan ketahanan.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Tambah stop loss untuk mengawal risiko kerugian tunggal, contohnya perintah stop atau stop limit.

  2. Tambah mekanisme pengesanan pembalikan trend, contohnya MACD, purata bergerak. Tutup kedudukan apabila pembalikan dikesan.

  3. Tambah modul kemasukan semula, kedudukan piramid apabila trend berterusan.

  4. Tambah model pembelajaran mesin seperti LSTM untuk membantu pengesanan trend.

  5. Mengoptimumkan pengurusan modal berdasarkan teori pengurangan atau korelasi.

  6. Mengoptimumkan parameter yang komprehensif seperti tempoh ZigZag dengan backtesting dan pakar rujukan.

Ringkasan

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()

Lebih lanjut