Zigzag Breakout Strategi

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

img

Gambaran umum

Strategi ini menggunakan indikator Zigzag untuk menarik garis dukungan dan resistensi dan mengambil posisi panjang atau pendek ketika harga menembus garis dukungan atau resistensi.

Logika Strategi

Strategi pertama menggunakan indikator Zigzag untuk menggambar garis Zigzag di bawah parameter tertentu. Garis dukungan hijau ditarik ketika indikator Zigzag terbawah keluar. Garis resistensi merah ditarik ketika Zigzag puncak keluar. Posisi panjang diambil ketika harga melanggar di atas garis hijau. Posisi pendek diambil ketika harga melanggar di bawah garis merah.

Secara khusus, logika inti adalah:

  1. Gunakan ema untuk meratakan harga penutupan dengan rata-rata bergerak eksponensial tiga kali lipat, mendapatkan kurva _hls yang meratakan.

  2. Pertimbangkan apakah kurva yang dihaluskan naik. Jika naik dan bar sebelumnya tidak naik, itu dianggap sebagai bawah. Ambil harga terendah dari bar ini. Jika turun dan bar sebelumnya naik, itu dianggap atas. Ambil harga tertinggi dari bar ini. Jika tidak, NaN.

  3. Ulangi proses ini untuk mendapatkan garis zigzag zigzag.

  4. Saat zigzag naik, catat titik puncak saat ini. Saat jatuh, catat titik terendah saat ini.

  5. Gambar garis dukungan hijau ke atas ketika titik naik. Gambar garis resistensi merah ke bawah ketika titik turun.

  6. Ambil posisi panjang ketika harga melanggar di atas garis hijau Ambil posisi pendek ketika harga melanggar di bawah garis merah

Analisis Keuntungan

Keuntungan dari strategi ini meliputi:

  1. Mengidentifikasi level support/resistance utama menggunakan indikator Zigzag.

  2. Zigzag menyaring kebisingan pasar, menghasilkan sinyal perdagangan yang lebih jelas.

  3. Masukkan posisi dengan break-out, yang dapat menangkap pembalikan tren tepat waktu.

  4. Cara sederhana dan efektif untuk menggambar garis dukungan / resistensi.

  5. Logika yang jelas dan ruang pengoptimalan parameter yang besar.

  6. Fleksibilitas dalam memilih produk dan kerangka waktu.

Analisis Risiko

Risiko dari strategi ini:

  1. Parameter Zigzag yang tidak tepat dapat kehilangan peluang perdagangan.

  2. Harga dapat menguji kembali support/resistance setelah breakout. Gunakan stop loss untuk mengendalikan risiko.

  3. Sinyal breakout mungkin menyesatkan, perlu validasi dengan tren dan pola.

  4. Perdagangan samping yang berkepanjangan dapat menghasilkan perdagangan yang terlalu tidak efektif.

  5. Pertimbangkan biaya transaksi. Hindari perdagangan yang terlalu sering.

Solusi:

  1. Mengoptimalkan parameter Zigzag untuk menemukan kombinasi terbaik.

  2. Atur stop loss tepat waktu setelah breakout untuk membatasi kerugian.

  3. Tambahkan filter seperti indikator tren untuk meningkatkan akurasi.

  4. Mengidentifikasi sisi dan menghindari perdagangan selama periode ini.

  5. Meredakan rentang breakout untuk mengurangi perdagangan yang tidak efektif.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Mengoptimalkan parameter Zigzag dengan backtesting untuk menemukan optimal.

  2. Pertimbangkan kemungkinan pengujian kembali dukungan / resistensi setelah breakout Tambahkan logika keluar untuk skenario pengujian ulang.

  3. Tambahkan filter seperti MA untuk menyaring sinyal kemungkinan rendah.

  4. Masukkan indikator volume untuk mengkonfirmasi sinyal pecah.

  5. Mengimplementasikan metodologi ganda Lachenbruch (panjang dan pendek) untuk menyaring sinyal dan keuntungan yang salah.

  6. Gunakan pembelajaran mesin untuk mengoptimalkan parameter secara dinamis.

  7. Memperkenalkan strategi stop loss untuk membatasi risiko.

Kesimpulan

Singkatnya, ini adalah strategi breakout osilasi yang sederhana dan praktis. Ini menarik dukungan / resistensi menggunakan Zigzag dan perdagangan breakout. Strategi ini adaptif tetapi dengan beberapa risiko. Optimasi pada parameter, filter sinyal dan kontrol risiko dapat memperbaikinya. Strategi breakout semacam itu cocok untuk pedagang aktif yang dapat memahami ritme pasar.


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