Strategi kuantitatif berdasarkan pembalikan titik pivot


Tanggal Pembuatan: 2024-02-20 14:22:13 Akhirnya memodifikasi: 2024-02-20 14:22:13
menyalin: 0 Jumlah klik: 654
1
fokus pada
1617
Pengikut

Strategi kuantitatif berdasarkan pembalikan titik pivot

Ringkasan

Gagasan inti dari strategi ini adalah untuk melakukan perdagangan kuantitatif menggunakan titik pivot. Ini mencari titik pivot tinggi dan rendah yang penting, dan melakukan perdagangan reversal ketika harga menembus titik-titik kunci ini.

Prinsip Strategi

Strategi ini pertama-tama mendefinisikan fungsi pivotHighSig() dan pivotLowSig() untuk menemukan titik tinggi dan titik rendah pada sumbu. Kedua fungsi ini akan mencari titik sumbu yang memenuhi syarat di sisi kiri dan kanan.

Secara khusus, untuk titik tinggi pada sumbu, ia akan mencari beberapa titik tinggi yang lebih tinggi secara berturut-turut di sisi kiri dan beberapa titik tinggi yang lebih rendah secara berturut-turut di sisi kanan. Dengan demikian, titik tinggi pada sumbu berada pada posisi yang relatif lebih tinggi.

Setelah menemukan titik tinggi dan rendah pada sumbu, strategi akan memilih titik penting pada sumbu tersebut. Hal ini dilakukan dengan mendefinisikan beberapa variabel historis dari titik tinggi dan rendah pada sumbu, seperti ph1, ph2 dan sebagainya.

Akhirnya, saat harga menembus titik pivot dari sumbu, maka dilakukan reversal trading.

Keunggulan Strategis

Strategi kuantitatif berbasis pivot ini memiliki beberapa keuntungan:

  1. Mengambil keuntungan dari area dukungan dan resistensi di pasar, yang seringkali merupakan titik peluang untuk membalikkan harga
  2. Ini adalah salah satu cara untuk menemukan titik tinggi dan titik rendah yang penting, dan melakukan perdagangan bilateral multi-udara.
  3. Titik sumbu adalah titik extremum yang lebih menonjol, titik seperti ini memiliki sinyal yang lebih kuat
  4. Menggunakan titik-titik sumbu sumbu untuk membuat sinyal lebih handal

Risiko dan Solusi

Strategi ini juga memiliki beberapa risiko:

  1. Salah menilai titik pusat, menyebabkan sinyal yang salah. Solusinya adalah menyesuaikan parameter jarak kiri dan kanan, untuk memastikan pengidentifikasian titik pusat lebih akurat.
  2. Penembusan palsu. Solusinya adalah menggabungkan lebih banyak faktor untuk memfilter sinyal, seperti kapasitas, volume transaksi, dan lain-lain.

Arah optimasi

Strategi ini juga dapat dioptimalkan dari beberapa arah:

  1. Meningkatkan strategi stop loss untuk membuat strategi lebih stabil
  2. Menyaring sinyal dengan lebih banyak indikator
  3. Mengembangkan strategi reversal PRED untuk lebih mengoptimalkan perkiraan pivotal menggunakan ML
  4. Menambahkan fungsi adaptif parameter

Meringkaskan

Strategi ini overall berkinerja baik, dengan ide inti adalah untuk menemukan pivot point yang penting dan melakukan reverse trade pada saat terobosan. Dengan pengoptimalan lebih lanjut, strategi ini dapat memperoleh sinyal yang lebih stabil dan dapat diandalkan, sehingga mendapatkan keuntungan yang baik.

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