ZigZag Berbasis Tren Mengikuti Strategi

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

img

Gambaran umum

Strategi ini menggunakan indikator ZigZag untuk menentukan arah tren dan mengikuti tren setelah dikonfirmasi.

Logika Strategi

Strategi ini terutama menggunakan indikator ZigZag untuk menentukan arah tren harga. ZigZag dapat menyaring kebisingan pasar dan mengidentifikasi arah fluktuasi harga utama.

Secara khusus, strategi pertama menghitung nilai ZigZag. Ketika harga mencapai puncak yang lebih tinggi, nilai ZigZag menjadi harga tinggi. Ketika harga mencapai titik terendah yang lebih rendah, nilai ZigZag menjadi harga rendah. Dengan demikian, ZigZag dapat dengan jelas mencerminkan arah fluktuasi harga utama.

Strategi ini menentukan arah tren berdasarkan nilai ZigZag. Ketika ZigZag naik, itu menunjukkan tren naik. Ketika ZigZag turun, itu menunjukkan tren turun. Strategi ini membuka posisi ketika ZigZag berbalik untuk mengikuti arah tren.

Secara khusus, strategi berjalan panjang ketika ZigZag berubah menjadi tinggi baru, dan berjalan pendek ketika ZigZag berubah menjadi rendah baru.

Analisis Keuntungan

  • ZigZag dapat secara efektif menyaring kebisingan pasar dan secara akurat menentukan arah tren utama.
  • Waktu giliran ZigZag adalah tepat, memungkinkan peluang masuk yang optimal.
  • Ini menerapkan tren murni mengikuti strategi tanpa indikator atau model kompleks lainnya.
  • Logikanya sederhana dan jelas, mudah dimengerti dan dimodifikasi.
  • Frekuensi perdagangan dapat dikontrol secara bebas melalui pengaturan parameter.

Analisis Risiko

  • ZigZag tidak sensitif terhadap pembalikan tren jangka menengah, berpotensi kehilangan pembalikan yang lebih cepat.
  • Strategi mengikuti tren tidak dapat menangani kerugian dari pembalikan tren.
  • Ini tidak membatasi ukuran kerugian dari perdagangan tunggal, menimbulkan risiko kerugian tunggal yang besar.
  • Strategi ini hanya mengandalkan satu indikator, risiko overfit.

Risiko dapat dikurangi dengan:

  • Menggabungkan indikator lain untuk mendeteksi risiko pembalikan tren.
  • Memperpendek periode penahan, stop loss tepat waktu.
  • Menambahkan manajemen risiko untuk membatasi ukuran kerugian tunggal.
  • Menambahkan model pembelajaran mesin untuk meningkatkan ketahanan.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Tambahkan stop loss untuk mengendalikan risiko kerugian tunggal, misalnya perintah stop trailing atau stop limit.

  2. Tambahkan mekanisme deteksi pembalikan tren, misalnya MACD, moving average. Tutup posisi ketika pembalikan terdeteksi.

  3. Tambahkan modul re-entry, posisi piramida saat tren berlanjut.

  4. Tambahkan model pembelajaran mesin seperti LSTM untuk membantu deteksi tren.

  5. Mengoptimalkan manajemen modal berdasarkan teori drawdown atau korelasi.

  6. Mengoptimalkan secara komprehensif parameter seperti periode ZigZag dengan backtesting dan referensi keahlian.

Ringkasan

Strategi ini mengidentifikasi arah tren dengan ZigZag dan memperdagangkan tren. Logika sederhana dan mudah diterapkan. Tetapi risiko seperti ketergantungan indikator tunggal dan pembalikan tren ada. Kita dapat mengoptimalkan melalui stop loss, indikator tambahan, re-entry, model pembelajaran mesin dll untuk membuatnya lebih kuat dan rasional. Dengan parameter dan kontrol risiko yang tepat, dapat secara efektif melacak tren jangka menengah dan panjang.


/*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 banyak