Chiến lược giao dịch hồi quy động

Tác giả:ChaoZhang, Ngày: 2024-01-31 16:56:31
Tags:

img

Tổng quan

Chiến lược này là một chiến lược theo dõi xu hướng và đột phá dựa trên chỉ số Recursive Bands được phát triển bởi alexgrover. Nó sử dụng chỉ số Recursive Bands để xác định xu hướng giá và mức hỗ trợ / kháng cự chính, kết hợp với các điều kiện động lực để lọc các đột phá sai, đạt được tín hiệu nhập cảnh tần số thấp nhưng chất lượng cao.

Chiến lược logic

Tính toán chỉ số băng tần tái diễn

Chỉ số Recursive Bands bao gồm một dải trên, dải dưới và đường giữa.

Upper Band = Max ((Bara trước đây là dải trên, Close price + nSự biến động) Phạm vi thấp hơn = Min(phạm vi thấp hơn của thanh trước, Giá đóng - nSự biến động) Đường giữa = (Band trên + Band dưới) / 2

Ở đây n là một hệ số mở rộng, và độ biến động có thể được chọn từ ATR, độ lệch chuẩn, phạm vi trung bình thực sự hoặc một phương pháp RFV đặc biệt.

Quy tắc giao dịch

Chiến lược đầu tiên kiểm tra xem dải dưới và dải trên có xu hướng theo cùng một hướng để tránh đột phá sai.

Khi giá phá vỡ dưới dải dưới, mua dài. Khi giá phá vỡ trên dải trên, mua ngắn.

Ngoài ra, logic dừng lỗ được thực hiện.

Phân tích lợi thế

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

  1. Tính toán chỉ số hiệu quả bằng cách sử dụng khuôn khổ tái diễn, tránh tính toán lặp đi lặp lại
  2. Điều chỉnh tham số linh hoạt để thích nghi với các chế độ thị trường khác nhau
  3. Kết hợp xu hướng và đột phá, tránh đột phá sai
  4. Các bộ lọc trạng thái xung đảm bảo chất lượng tín hiệu

Phân tích rủi ro

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

  1. Cài đặt tham số không chính xác có thể dẫn đến giao dịch quá mức hoặc chất lượng tín hiệu kém
  2. Có thể phải đối mặt với tổn thất lớn khi thay đổi xu hướng lớn
  3. Kiểm soát trượt không đủ trong các chuyển động cực đoan có thể làm tăng tổn thất

Những rủi ro này có thể được quản lý bằng cách tối ưu hóa tham số, thực hiện dừng lỗ, tăng ngưỡng trượt v.v.

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

Một số hướng để tối ưu hóa chiến lược hơn nữa:

  1. Kết hợp các chỉ số trên nhiều khung thời gian để đảm bảo độ bền
  2. Thêm mô-đun học máy cho tối ưu hóa tham số thích nghi
  3. Thực hiện phân tích tương quan định lượng để tìm kết hợp các tham số tối ưu
  4. Sử dụng học sâu để dự đoán đường dẫn giá và cải thiện độ chính xác tín hiệu

Kết luận

Tóm lại, đây là một chiến lược theo dõi xu hướng rất thực tế và hiệu quả. Nó kết hợp khung tái diễn cho hiệu quả tính toán, sử dụng hỗ trợ xu hướng / kháng cự để xác định xu hướng chính, thêm các điều kiện động lực để lọc các đột phá sai và đảm bảo chất lượng tín hiệu. Với điều chỉnh tham số và kiểm soát rủi ro thích hợp, nó có thể đạt được kết quả tốt. Đáng nghiên cứu và tối ưu hóa hơn để thích nghi với các chế độ thị trường phức tạp hơn.


/*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=5
// Original indicator by alexgrover
strategy('Extended Recursive Bands Strategy', overlay=true, commission_type=strategy.commission.percent,commission_value=0.06,default_qty_type =strategy.percent_of_equity,default_qty_value = 100,initial_capital =1000)
length = input.int(260, step=10, title='Length')
src = input(close, title='Source')
method = input.string('Classic', options=['Classic', 'Atr', 'Stdev', 'Ahlr', 'Rfv'], title='Method')
bandDirectionCheck = input.bool(true, title='Bands Hold Direction')
lookback = input(3)
//----
atr = ta.atr(length)
stdev = ta.stdev(src, length)
ahlr = ta.sma(high - low, length)
rfv = 0.
rfv := ta.rising(src, length) or ta.falling(src, length) ? math.abs(ta.change(src)) : rfv[1]
//-----
f(a, b, c) =>
    method == a ? b : c
v(x) =>
    f('Atr', atr, f('Stdev', stdev, f('Ahlr', ahlr, f('Rfv', rfv, x))))
//----
sc = 2 / (length + 1)
a = 0.
a := math.max(nz(a[1], src), src) - sc * v(math.abs(src - nz(a[1], src)))
b = 0.
b := math.min(nz(b[1], src), src) + sc * v(math.abs(src - nz(b[1], src)))
c = (a+b)/2

// Colors
beColor = #675F76
buColor = #a472ff

// Plots
pA = plot(a, color=color.new(beColor, 0), linewidth=2, title='Upper Band')
pB = plot(b, color=color.new(buColor, 0), linewidth=2, title='Lower Band')
pC = plot(c, color=color.rgb(120,123,134,0), linewidth=2, title='Middle Band')
fill(pC, pA, color=color.new(beColor,90))
fill(pC, pB, color=color.new(buColor,90))

// Band keeping direction
// By Adulari
longc = 0
shortc = 0
for i = 0 to lookback-1
    if b[i] > b[i+1]
        longc:=longc+1
    if a[i] < a[i+1]
        shortc:=shortc+1
bhdLong = if bandDirectionCheck
    longc==lookback
else
    true
bhdShort = if bandDirectionCheck
    shortc==lookback
else
    true

// Strategy
if b>=low and bhdLong
    strategy.entry(id='Long',direction=strategy.long)
if high>=a and bhdShort
    strategy.entry(id='Short',direction=strategy.short)

// TP at middle line
//if low<=c and strategy.position_size<0 and strategy.position_avg_price>close
    //strategy.exit(id="Short",limit=close)
//if high>=c and strategy.position_size>0 and strategy.position_avg_price<close
    //strategy.exit(id="Long",limit=close)

Thêm nữa