Strategi Kuantitatif Pembalikan Pivot Berdasarkan Titik Pivot

Penulis:ChaoZhang, Tarikh: 2024-02-20 14:22:13
Tag:

img

Ringkasan

Idea utama strategi ini adalah menggunakan titik pusingan untuk perdagangan kuantitatif. Ia mencari swing tinggi dan rendah yang penting dan membuat perdagangan pembalikan apabila harga memecahkan tahap utama ini.

Logika Strategi

Strategi pertama menentukan fungsi pivotHighSig() dan pivotLowSig() untuk mencari titik swing tinggi dan rendah. Kedua-dua fungsi ini mencari titik pivot yang layak di sebelah kiri dan kanan.

Secara khusus, untuk swing high, ia mencari beberapa tinggi yang lebih tinggi di sebelah kiri dan beberapa tinggi yang lebih rendah di sebelah kanan.

Selepas mencari swing high dan low, strategi selanjutnya memilih titik pivot dari titik pivot tersebut, iaitu titik penting dari pivot. Ini dicapai dengan menentukan pelbagai pembolehubah sejarah untuk swing high dan low, misalnya ph1, ph2 dll.

Akhirnya, perdagangan pembalikan diambil apabila harga menembusi titik-titik pusingan.

Kelebihan

Strategi kuantitatif yang berasaskan titik pusingan ini mempunyai kelebihan berikut:

  1. Ia mengambil kesempatan daripada tahap sokongan dan rintangan di pasaran di mana pembalikan sering berlaku
  2. Ia mengenal pasti kedua-dua titik tinggi dan rendah penting untuk perdagangan dua sisi
  3. Titik pusingan adalah titik extremum yang luar biasa dan memecahkan mereka memberikan isyarat yang kuat
  4. Menggunakan titik pivot pivot menjadikan isyarat lebih boleh dipercayai

Risiko dan Penyelesaian

Terdapat juga beberapa risiko dengan strategi ini:

  1. Salah menilai titik pivot membawa kepada isyarat yang salah. Penyelesaian adalah untuk menyesuaikan parameter julat kiri / kanan untuk mengenal pasti titik pivot dengan lebih tepat.
  2. Penyelesaian adalah untuk menapis isyarat yang menggabungkan faktor lain seperti jumlah, momentum dan lain-lain.

Kawasan Peningkatan

Strategi ini boleh ditingkatkan dalam bidang berikut:

  1. Tambah mekanisme stop loss untuk menjadikan strategi lebih stabil
  2. Memasukkan lebih banyak penunjuk teknikal untuk penapisan isyarat
  3. Membangunkan model pembalikan PRED menggunakan pembelajaran mesin untuk meningkatkan lagi ramalan titik pusingan
  4. Membina dalam parameter adaptif

Kesimpulan

Secara keseluruhan, strategi ini berfungsi dengan baik. Idea utamanya adalah untuk mengesan titik-titik pusingan penting dan berdagang penembusan mereka. Peningkatan lanjut boleh menghasilkan isyarat yang lebih kukuh dan boleh dipercayai untuk keuntungan yang lebih tinggi dan lebih konsisten.


/*backtest
start: 2023-02-13 00:00:00
end: 2024-02-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Pivot of Pivot Reversal Strategy [QuantNomad]", shorttitle = "PoP Reversal Strategy [QN]", overlay=true)

// Inputs 
leftBars   = input(4,   title = 'PP Left Bars')
rightBars  = input(2,   title = 'PP Right Bars')
atr_length = input(14,  title = 'ATR Length')
atr_mult   = input(0.1, title = 'ATR Mult')

// Pivot High Significant Function
pivotHighSig(left, right) =>
    pp_ok = true
    atr   = atr(atr_length)
    
    for i = 1 to left
        if (high[right] < high[right+i] + atr * atr_mult)
            pp_ok := false
    for i = 0 to right-1
        if (high[right] < high[i] + atr * atr_mult)
            pp_ok := false
    
    pp_ok ? high[right] : na

// Pivot Low Significant Function
pivotLowSig(left, right) =>
    pp_ok = true
    atr   = atr(atr_length)
    
    for i = 1 to left
        if (low[right] > low[right+i] - atr * atr_mult)
            pp_ok := false
    for i = 0 to right-1
        if (low[right] > low[i] - atr * atr_mult)
            pp_ok := false
    
    pp_ok ? low[right] : na


swh = pivotHighSig(leftBars, rightBars)
swl = pivotLowSig (leftBars, rightBars)

swh_cond = not na(swh)

hprice = 0.0
hprice := swh_cond ? swh : hprice[1]

le = false
le := swh_cond ? true : (le[1] and high > hprice ? false : le[1])

swl_cond = not na(swl)

lprice = 0.0
lprice := swl_cond ? swl : lprice[1]

se = false
se := swl_cond ? true : (se[1] and low < lprice ? false : se[1])

// Pivots of pivots
ph1 = 0.0
ph2 = 0.0
ph3 = 0.0

pl1 = 0.0
pl2 = 0.0
pl3 = 0.0

pphprice = 0.0
pplprice = 0.0

ph3 := swh_cond ? nz(ph2[1]) : nz(ph3[1])
ph2 := swh_cond ? nz(ph1[1]) : nz(ph2[1])
ph1 := swh_cond ? hprice     : nz(ph1[1])

pl3 := swl_cond ? nz(pl2[1]) : nz(pl3[1])
pl2 := swl_cond ? nz(pl1[1]) : nz(pl2[1])
pl1 := swl_cond ? lprice     : nz(pl1[1])

pphprice := swh_cond and ph2 > ph1 and ph2 > ph3 ? ph2 : nz(pphprice[1])
pplprice := swl_cond and pl2 < pl1 and pl2 < pl3 ? pl2 : nz(pplprice[1])


if (le)
    strategy.entry("PP_RevLE", strategy.long, comment="PP_RevLE", stop=pphprice + syminfo.mintick)

if (se)
    strategy.entry("PP_RevSE", strategy.short, comment="PP_RevSE", stop=pplprice - syminfo.mintick)
    
// Plotting 
plot(lprice, color = color.red,   transp = 55)
plot(hprice, color = color.green, transp = 55)

plot(pplprice, color = color.red,   transp = 0, linewidth = 2)
plot(pphprice, color = color.green, transp = 0, linewidth = 2)

Lebih lanjut