Strategi mengikuti tren berbasis ZigZag


Tanggal Pembuatan: 2023-10-30 14:51:08 Akhirnya memodifikasi: 2023-10-30 14:51:08
menyalin: 0 Jumlah klik: 843
1
fokus pada
1617
Pengikut

Strategi mengikuti tren berbasis ZigZag

Ringkasan

Strategi ini menggunakan indikator ZigZag untuk menentukan arah tren, dan melakukan pelacakan tren setelah tren dikonfirmasi, termasuk dalam strategi pelacakan tren.

Prinsip Strategi

Strategi ini terutama menggunakan indikator ZigZag untuk menentukan arah tren harga. Indikator ZigZag dapat menyaring kebisingan pasar dan menentukan arah fluktuasi harga utama. ZigZag akan mengirimkan sinyal perdagangan ketika harga membuat tinggi baru atau rendah baru.

Secara khusus, strategi pertama menghitung nilai ZigZag, dengan ZigZag untuk harga tinggi ketika harga menciptakan titik tinggi yang lebih tinggi; dan dengan ZigZag untuk harga rendah ketika harga menciptakan titik rendah yang lebih rendah. Dengan demikian, ZigZag dapat dengan jelas mencerminkan arah utama pergerakan harga.

Strategi menilai arah tren berdasarkan nilai ZigZag. Ketika ZigZag naik, menunjukkan berada dalam tren naik; Ketika ZigZag turun, menunjukkan berada dalam tren turun. Strategi membuka posisi saat ZigZag berbalik, untuk mengikuti arah tren.

Secara khusus, strategi membuka overorder saat ZigZag berbalik membentuk tinggi baru, dan membuka kosong saat ZigZag berbalik membentuk rendah baru. Kondisi posisi kosong adalah ZigZag berbalik lagi. Dengan demikian, strategi perdagangan otomatis yang didasarkan pada penilaian tren ZigZag terwujud.

Analisis Keunggulan Strategi

  • Menggunakan indikator ZigZag untuk menilai tren, dapat secara efektif menyaring kebisingan pasar dan menentukan arah tren utama secara akurat.
  • ZigZag memutar waktu dengan tepat dan mudah membentuk waktu masuk yang lebih baik.
  • Strategi pelacakan tren yang lengkap dan tidak memerlukan dukungan indikator atau model yang rumit lainnya.
  • Strategi logisnya sederhana dan jelas, mudah dipahami dan dimodifikasi.
  • Frekuensi transaksi yang dapat disesuaikan dengan parameter dari strategi kontrol bebas.

Analisis risiko

  • ZigZag tidak sensitif terhadap konversi bull/bear pada garis tengah pendek, dan mungkin akan melewatkan perputaran balik yang lebih cepat.
  • Strategi untuk melacak tren, tidak dapat menanggung kerugian akibat pembalikan tren.
  • Anda tidak dapat membatasi jumlah kerugian tunggal, dan Anda memiliki risiko kerugian tunggal yang lebih besar.
  • Strategi yang hanya didasarkan pada satu indikator mungkin memiliki risiko overfit.

Risiko dapat dikurangi dengan:

  • Kombinasi indikator lain untuk menilai risiko reversal tren.
  • Mempersingkat jangka waktu pemegang saham dengan tepat dan menghentikan kerugian tepat waktu
  • Menambahkan modul pengelolaan dana untuk membatasi jumlah kerugian tunggal.
  • Menambahkan model pembelajaran mesin untuk meningkatkan kehandalan strategi.

Arah optimasi

Strategi ini dapat dioptimalkan dalam beberapa hal:

  1. Tambahkan strategi stop loss untuk mengendalikan risiko kerugian tunggal. Anda dapat mengatur stop loss bergerak atau stop loss tetap.

  2. Menambahkan mekanisme penghakiman pembalikan tren. Indikator seperti MACD, moving average, dan lain-lain dapat digunakan untuk menutup posisi jika terjadi pembalikan tren.

  3. Tambahkan modul re-entry. Jika tren berlanjut, Anda dapat menaikkan posisi dengan tepat untuk mendapatkan lebih banyak keuntungan.

  4. Menambahkan model pembelajaran mesin. Dapat melatih model pembelajaran mendalam seperti LSTM untuk membantu ZigZag menentukan arah tren.

  5. Mekanisme pengelolaan dana yang dioptimalkan. Ukuran posisi dapat dioptimalkan berdasarkan teori penarikan atau korelasi.

  6. Parameter pengoptimalan secara keseluruhan ditetapkan. Parameter pengoptimalan dapat dilakukan melalui retrospeksi sejarah dan referensi buku-buku profesional, seperti panjang siklus ZigZag.

Meringkaskan

Strategi ini menggunakan indikator ZigZag untuk menentukan arah tren, dan menerapkan strategi perdagangan berbasis tren. Logika strategi sederhana, jelas, dan mudah diterapkan. Namun, ada juga masalah seperti ketergantungan pada satu indikator, risiko pembalikan tren, dan sebagainya.

Kode Sumber Strategi
/*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()