Chiến lược đảo ngược các điểm trọng tâm quan trọng

Tác giả:ChaoZhang, Ngày: 2024-01-29 14:58:15
Tags:

img

Tổng quan

Chiến lược này tối ưu hóa chiến lược đảo ngược điểm pivot truyền thống bằng cách tính toán ATR và thiết lập bộ lọc ATR để loại bỏ các điểm pivot không quan trọng, chỉ giao dịch trên những điểm thực sự quan trọng.

Chiến lược logic

Lý thuyết cốt lõi là xác định các điểm pivot đỉnh và đáy quan trọng.

  1. Tính toán ATR và đặt yếu tố lọc ATR atr_mult.
  2. Đi qua một số thanh nhất định ở bên trái (được đặt bởi leftBars), nếu pivot đỉnh cao hơn bất kỳ cao + ATR*atr_mult ở bên trái, pivot không hợp lệ.
  3. Đi qua một số thanh nhất định ở bên phải (được đặt bởi rightBars), nếu pivot đỉnh cao hơn bất kỳ cao nào + ATR*atr_mult ở bên phải, pivot không hợp lệ.
  4. Nếu trục đỉnh vẫn còn hợp lệ sau các thử nghiệm trên, hãy trả lại nó như một trục đỉnh quan trọng.

Lý thuyết để tính toán các pivot trough quan trọng là tương tự.

Sau khi có được các pivot quan trọng, đi ngắn khi giá phá vỡ một pivot đỉnh quan trọng, và đi dài khi nó phá vỡ một pivot đáy quan trọng.

Phân tích lợi thế

Những lợi thế chính của chiến lược này là:

  1. Bộ lọc ATR và atr_mult có thể loại bỏ các biến động không đáng kể và chỉ giao dịch các pivot thực sự quan trọng, tránh giao dịch không cần thiết.
  2. Các tham số ATR năng động có thể điều chỉnh phạm vi giao dịch tự động trong thị trường biến động, ngăn ngừa giao dịch quá mức.
  3. Sự đảo ngược điểm trục chính nó có tỷ lệ thắng tương đối cao và lợi nhuận.

Phân tích rủi ro

Những rủi ro chính là:

  1. Các thông số ATR không chính xác có thể lọc ra quá nhiều giao dịch hợp lệ. Nếu ATR quá cao, các pivot hợp lệ có thể bị loại bỏ.
  2. Rủi ro bị mắc kẹt vẫn tồn tại, cần thiết phải đặt dừng lỗ để kiểm soát rủi ro.
  3. Các chiến lược đảo ngược nhạy cảm với chi phí giao dịch, nên đặt mức dừng lỗ và lợi nhuận hợp lý.

Để kiểm soát các rủi ro trên, tối ưu hóa từ các khía cạnh sau:

  1. Tối ưu hóa các thông số ATR để đảm bảo đủ cơ hội giao dịch.
  2. Thiết lập tỷ lệ dừng lỗ và lợi nhuận hợp lý.
  3. Điều chỉnh kích thước vị trí để giảm tác động đến chi phí giao dịch.

Hướng dẫn tối ưu hóa

Các hướng tối ưu hóa khác bao gồm:

  1. Kết hợp với các chỉ số khác để xác định chế độ thị trường, tránh đảo ngược giao dịch trong các thị trường xu hướng.

  2. Thêm các thuật toán học máy để tự động tối ưu hóa các tham số. Các phương pháp như thuật toán di truyền, rừng ngẫu nhiên có thể được sử dụng để tìm các tập hợp tham số tối ưu.

  3. Mô hình đào tạo sử dụng dữ liệu định lượng để tìm phạm vi ATR tối ưu.

  4. Xem xét kết hợp với các chiến lược khác, sử dụng điểm mạnh của các loại chiến lược khác nhau. ví dụ, kết hợp với chiến lược theo xu hướng, đảo ngược trong khoảng cách, theo xu hướng trong xu hướng bền vững.

Kết luận

Chiến lược đảo ngược pivot quan trọng này lọc ra các biến động nhỏ vô nghĩa bằng cách tính toán ATR và thiết lập bộ lọc. Chỉ có việc đảo ngược giao dịch trên các pivot quan trọng có thể cải thiện hiệu quả lợi nhuận của chiến lược. Trong khi đó, nó cũng làm tăng khó khăn tối ưu hóa tham số. Các tham số tối ưu cần phải được tìm thấy bằng cách xem xét toàn diện phạm vi ATR, tỷ lệ dừng lỗ / lấy lợi nhuận vv. Nếu tối ưu hóa kỹ lưỡng, nó có thể trở thành một chiến lược giao dịch ngắn hạn hiệu quả và ổn định.


/*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("QuantNomad - Significant Pivot Reversal Strategy", shorttitle = "SPPS", 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])

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

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])

if (se)
    strategy.entry("PivRevSE", strategy.short, comment="PivRevSE", stop=lprice - syminfo.mintick)

Thêm nữa