Chiến lược định lượng đảo ngược pivot dựa trên các điểm pivot

Tác giả:ChaoZhang, Ngày: 2024-02-20 14:22:13
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là sử dụng các điểm pivot cho giao dịch định lượng. Nó tìm kiếm các mức cao và thấp quan trọng và thực hiện các giao dịch đảo ngược khi giá vượt qua các mức chính này.

Chiến lược logic

Chiến lược đầu tiên xác định các hàm pivotHighSig (()) và pivotLowSig (()) để xác định vị trí điểm cao và thấp.

Cụ thể, đối với swing high, nó tìm kiếm nhiều mức cao hơn ở bên trái và nhiều mức thấp hơn ở bên phải. Do đó, pivot high nằm ở một mức tương đối cao hơn. Các tiêu chí cho swing lows là ngược lại - nó tìm kiếm mức thấp hơn và thấp hơn ở cả hai bên.

Sau khi xác định vị trí đỉnh và đáy dao động, chiến lược tiếp tục chọn các điểm pivot từ các điểm pivot đó, tức là các điểm quan trọng từ các pivot. Điều này đạt được bằng cách xác định nhiều biến lịch sử cho các đỉnh và đáy dao động, ví dụ: ph1, ph2 vv.

Cuối cùng, các giao dịch đảo ngược được thực hiện khi giá vượt qua các điểm pivot của các pivot.

Ưu điểm

Chiến lược định lượng dựa trên điểm pivot này có những lợi thế sau:

  1. Nó tận dụng các mức hỗ trợ và kháng cự trên thị trường nơi những bước ngoặt thường xảy ra
  2. Nó xác định cả hai điểm cao và thấp quan trọng cho giao dịch hai bên
  3. Điểm trục là điểm cực nổi bật và phá vỡ chúng cho tín hiệu mạnh mẽ
  4. Sử dụng các điểm pivot của pivot làm cho tín hiệu thậm chí còn đáng tin cậy hơn

Rủi ro và giải pháp

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Phương pháp giải quyết là điều chỉnh các tham số phạm vi trái / phải để xác định các điểm pivot chính xác hơn.
  2. Giải pháp là lọc ra các tín hiệu kết hợp các yếu tố khác như âm lượng, động lượng vv

Các lĩnh vực cải tiến

Chiến lược này có thể được cải thiện trong các lĩnh vực sau:

  1. Thêm cơ chế dừng lỗ để làm cho chiến lược ổn định hơn
  2. Tích hợp nhiều chỉ số kỹ thuật hơn để lọc tín hiệu
  3. Phát triển các mô hình đảo ngược PRED bằng cách sử dụng máy học để tiếp tục thúc đẩy dự đoán điểm pivot
  4. Xây dựng trong tham số thích nghi

Kết luận

Nhìn chung, chiến lược này hoạt động tốt. Ý tưởng cốt lõi là phát hiện các điểm trục quan trọng và giao dịch các bước đột phá của chúng. Các cải tiến hơn nữa có thể tạo ra các tín hiệu vững chắc và đáng tin cậy hơn cho lợi nhuận cao hơn và nhất quán hơn.


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

Thêm nữa