Fraktal Williams digabungkan dengan strategi perdagangan kuantitatif penunjuk ZZ


Tarikh penciptaan: 2024-01-29 15:24:30 Akhirnya diubah suai: 2024-01-29 15:24:30
Salin: 0 Bilangan klik: 850
1
fokus pada
1617
Pengikut

Fraktal Williams digabungkan dengan strategi perdagangan kuantitatif penunjuk ZZ

Gambaran keseluruhan

Ini adalah strategi perdagangan kuantitatif yang menggabungkan teori pecahan Bill Williams dan indikator ZZ. Strategi ini menilai trend pasaran dengan mengira pecahan Williams dan menggabungkan indikator ZZ untuk memetakan garis rintangan sokongan untuk mencari titik pecah yang berpotensi, yang membolehkan perdagangan trend.

Prinsip Strategi

Strategi ini pertama kali mengira pecahan Williams untuk menentukan sama ada pecahan naik atau pecahan turun. Jika pecahan naik, ia dianggap sedang dalam trend naik; jika pecahan turun, ia dianggap sedang dalam trend turun.

Garis sokongan dan garis rintangan ZZ kemudian digariskan berdasarkan titik pecahan. Jika harga menembusi garisan rintangan yang setara dengan garisan pecahan yang naik, buat tambahan; jika harga menembusi garisan sokongan yang setara dengan garisan pecahan yang turun, buat kosong.

Dengan kombinasi ini, ia boleh menangkap perubahan trend dalam masa yang tepat, dan membolehkan perdagangan trend-tracking.

Analisis kelebihan strategi

Strategi ini menggabungkan dua kaedah analisis teknikal yang berbeza, iaitu Williams fractional dan ZZ index, untuk mencari lebih banyak peluang perdagangan.

Ia dapat menilai perubahan trend pasaran pada masa yang tepat dan menetapkan keadaan hentian kerugian yang baik, membantu untuk memahami arah trend utama. Selain itu, indikator ZZ dapat menyaring beberapa keadaan yang melanggar, dan mengelakkan kerugian yang tidak perlu.

Secara keseluruhannya, strategi ini mempertimbangkan penilaian trend dan pilihan titik masuk tertentu, dengan keseimbangan antara risiko dan keuntungan.

Analisis risiko strategi

Risiko terbesar dalam strategi ini adalah bahawa penghakiman pecahan dan indikator ZZ mungkin menghantar isyarat perdagangan yang salah, yang menyebabkan kerugian yang tidak perlu. Sebagai contoh, harga mungkin jatuh kembali dengan cepat setelah memecahkan garis rintangan dan tidak dapat terus meningkat.

Di samping itu, perhitungan pecahan mungkin salah kerana tidak betul menetapkan kitaran masa. Jika kitaran masa terlalu pendek, maka kemungkinan palsu akan meningkat.

Untuk mengurangkan risiko ini, parameter pengiraan pembahagian boleh disesuaikan dengan betul, atau anda boleh mengurangkan isyarat yang salah dengan menambah syarat penapisan. Selain itu, anda boleh menetapkan marjin stop yang lebih besar untuk mengawal kerugian tunggal.

Arah pengoptimuman strategi

Strategi ini boleh dioptimumkan dengan cara berikut:

  1. Menambah penapis penunjuk momentum, seperti MACD atau penunjuk Brin, dapat mengelakkan beberapa penembusan palsu.

  2. Mengoptimumkan parameter pembahagian, menyesuaikan cara pengiraan titik tinggi dan rendah, dan mengurangkan tempoh masa untuk mendapatkan penilaian trend yang lebih tepat.

  3. Meningkatkan ketepatan algoritma pembelajaran mesin dalam menentukan trend, menggunakan kebijaksanaan AI untuk mengelakkan batasan yang ditetapkan oleh manusia.

  4. Menambah mekanisme penangguhan kerugian yang dapat disesuaikan dengan ketara turun naik pasaran

  5. Menggunakan algoritma pembelajaran mendalam untuk mengoptimumkan keseluruhan parameter.

ringkaskan

Strategi ini menggunakan gabungan yang bijak antara teori Williams dan ZZ Indicator, untuk menilai dan menangkap perubahan trend pasaran pada masa yang tepat. Ia mengekalkan kadar kemenangan yang tinggi dan dijangka memperoleh keuntungan tambahan yang stabil dalam jangka panjang. Langkah seterusnya adalah dengan memperkenalkan lebih banyak alat penapisan dan kebijaksanaan AI, yang dijangka meningkatkan lagi kestabilan dan keuntungan strategi.

Kod sumber strategi
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "robotrading ZZ-8 fractals", shorttitle = "ZZ-8", overlay = true, default_qty_type = strategy.percent_of_equity, initial_capital = 100, default_qty_value = 100, commission_value = 0.1)

//Settings
needlong  = input(true, defval = true, title = "Long")
needshort = input(false, defval = true, title = "Short")
filterBW = input(false, title="filter Bill Williams Fractals")
showll = input(true, title = "Show levels")
showff = input(true, title = "Show fractals (repaint!)")
showdd = input(true, title = "Show dots (repaint!)")
showbg = input(false, title = "Show background")
showlb = input(false, title = "Show drawdown")
startTime = input(defval = timestamp("01 Jan 2000 00:00 +0000"), title = "Start Time", type = input.time, inline = "time1")
finalTime = input(defval = timestamp("31 Dec 2099 23:59 +0000"), title = "Final Time", type = input.time, inline = "time1")

//Variables
loss = 0.0
maxloss = 0.0
equity = 0.0
truetime = true

//Fractals
isRegularFractal(mode) =>
    ret = mode == 1 ? high[4] < high[3] and high[3] < high[2] and high[2] > high[1] and high[1] > high[0] : mode == -1 ? low[4] > low[3] and low[3] > low[2] and low[2] < low[1] and low[1] < low[0] : false
isBWFractal(mode) =>
    ret = mode == 1 ? high[4] < high[2] and high[3] <= high[2] and high[2] >= high[1] and high[2] > high[0] : mode == -1 ? low[4] > low[2] and low[3] >= low[2] and low[2] <= low[1] and low[2] < low[0] : false
filteredtopf = filterBW ? isRegularFractal(1) : isBWFractal(1)
filteredbotf = filterBW ? isRegularFractal(-1) : isBWFractal(-1)

//Triangles
plotshape(filteredtopf and showff, title='Filtered Top Fractals', style=shape.triangledown, location=location.abovebar, color= color.red, offset=-2)
plotshape(filteredbotf and showff, title='Filtered Bottom Fractals', style=shape.triangleup, location=location.belowbar, color= color.lime, offset=-2)

//Levels
hh = 0.0
ll = 0.0
hh := filteredtopf ? high[2] : hh[1]
ll := filteredbotf ? low[2] : ll[1]

//Trend
trend = 0
trend := high >= hh[1] ? 1 : low <= ll[1] ? -1 : trend[1]

//Lines
hcol = showll and hh == hh[1] and close < hh ? color.lime : na
lcol = showll and ll == ll[1] and close > ll ? color.red : na
plot(hh, color = hcol)
plot(ll, color = lcol)

//Dots
// var line hline = na
// if hh != hh[1] and showdd
//     hline := line.new(bar_index - 0, hh[0], bar_index - 2, hh[0], xloc = xloc.bar_index, extend = extend.none, style = line.style_dotted, color = color.lime, width = 1)
// var line lline = na
// if ll != ll[1] and showdd
//     lline := line.new(bar_index - 0, ll[0] - syminfo.mintick, bar_index - 2, ll[0] - syminfo.mintick, xloc = xloc.bar_index, extend = extend.none, style = line.style_dotted, color = color.red, width = 1)
    
//Background
bgcol = showbg == false ? na : trend == 1 ? color.lime : trend == -1 ? color.red : na
bgcolor(bgcol, transp = 80)

//Orders
if hh > 0 and needlong
    strategy.entry("Long", strategy.long, na, stop = hh, when = needlong and truetime)
    strategy.exit("Exit Long", "Long", stop = ll, when = needshort == false)
if ll > 0 and startTime
    strategy.entry("Short", strategy.short, na, stop = ll, when = needshort and truetime)
    strategy.exit("Exit Short", "Short", stop = hh, when = needlong == false)
if time > finalTime
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

if showlb

    //Drawdown
    max = 0.0
    max := max(strategy.equity, nz(max[1]))
    dd = (strategy.equity / max - 1) * 100
    min = 100.0
    min := min(dd, nz(min[1]))
    
    //Max loss size
    equity := strategy.position_size != strategy.position_size[1] ? strategy.equity : equity[1]
    loss := equity < equity[1] ? ((equity / equity[1]) - 1) * 100 : 0
    maxloss := min(nz(maxloss[1]), loss)
    
    //Label
    min := round(min * 100) / 100
    maxloss := round(maxloss * 100) / 100
    labeltext = "Drawdown: " + tostring(min) + "%" + "\nMax.loss " + tostring(maxloss) + "%"
    var label la = na
    label.delete(la)
    tc = min > -100 ? color.white : color.red
    osx = timenow + round(change(time)*50)
    osy = highest(100)
    la := label.new(x = osx, y = osy, text = labeltext, xloc = xloc.bar_time, yloc = yloc.price, color = color.black, style = label.style_labelup, textcolor = tc)