Một chiến lược giao dịch định lượng dựa trên phân tích hồi quy tuyến tính


Ngày tạo: 2024-01-26 15:48:35 sửa đổi lần cuối: 2024-01-26 15:48:35
sao chép: 0 Số nhấp chuột: 680
1
tập trung vào
1617
Người theo dõi

Một chiến lược giao dịch định lượng dựa trên phân tích hồi quy tuyến tính

Tổng quan

Chiến lược tự điều chỉnh đường dẫn hồi quy tuyến tính là một chiến lược giao dịch định lượng dựa trên phân tích hồi quy tuyến tính. Chiến lược này tạo ra một đường dẫn lên xuống bằng cách tính toán phương trình hồi quy tuyến tính của giá chứng khoán trong một khoảng thời gian nhất định và sử dụng đường dẫn lên xuống như một tín hiệu giao dịch để giao dịch hoặc theo dõi xu hướng trong khoảng thời gian.

Nguyên tắc chiến lược

Cốt lõi của chiến lược kênh thu hồi tuyến tính tự điều chỉnh là tính toán phương trình thu hồi tuyến tính của giá đóng cửa cho một số đường K gốc K, tạo thành đường trung tâm đại diện cho số chữ số trung bình của giá, đường trên đại diện cho giá trên và đường dưới đại diện cho giá dưới. Quá trình tính toán cụ thể như sau:

  1. Thu thập các tham số đầu vào cho các biến độc lập x và biến phụ thuộc y của dòng K gốc K. Ở đây x là số nguyên từ 1 đến length, y là giá trị đóng cửa của dòng K tương ứng.

  2. Tính toán hệ số regression:

    • b = (∑y)/n - m(∑x)/n
    • m = [(n∑xy) - (∑x)(∑y)]/[(n∑x2) - (∑x)2]
  3. Tính giá trị hồi quy tuyến tính đối với mỗi dòng K là y’, STDDEV

  4. Đường trung tâm là phương trình hồi quy y’ = mx + b, và các đường ray lên và xuống tương ứng với đường trung tâm trôi dạt một khoảng cách tiêu chuẩn.

Khi dòng K mới đến, tính toán trên được cập nhật, tạo ra một kênh thích ứng trên và dưới. Theo các kênh trên và dưới đường ray giao nhau, hãy thực hiện thêm việc thực hiện, dừng lại gần đường trung tâm.

Phân tích lợi thế

Chiến lược tự điều chỉnh đường quay trở tuyến tính có những lợi thế sau đây so với chiến lược đường trung bình truyền thống:

  1. Các mô hình phân tích hồi quy có ý nghĩa thống kê cao hơn đường trung bình

  2. Tăng khả năng thích ứng, tự động điều chỉnh phạm vi theo giá thay đổi

  3. Khả năng phản hồi tốt hơn, tốt hơn nhiều so với chiến lược trung bình ở một số giống

  4. Thử nghiệm trên thực tế đã có kết quả tốt, hoạt động tốt trong thực tế.

Phân tích rủi ro

Chiến lược này có những rủi ro:

  1. Sự biến động giá quá lớn dẫn đến tổn thất lớn. Giải pháp là thiết lập dừng lỗ, tối ưu hóa các tham số.

  2. Lối đi sai dẫn đến hiệu quả theo dõi kém. Giải pháp là điều chỉnh tham số, kết hợp với các chỉ số kỹ thuật khác.

  3. Hiệu quả phản hồi có vẻ tốt, nhưng hiệu quả ổ đĩa thực kém. Giải pháp là điều chỉnh tham số, xác minh đầy đủ.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:

  1. Kiểm tra nhiều hơn các kết hợp tham số để tìm ra tham số tối ưu

  2. Hướng dẫn sử dụng các chỉ số kỹ thuật khác để tránh các dấu hiệu bị lỗi trong thời gian chuyển động mạnh

  3. Tăng chiến lược ngăn chặn tổn thất, kiểm soát rủi ro mất mát, bảo vệ tài chính

  4. Thêm mô-đun quản lý vị trí, điều chỉnh quy mô vị trí theo thị trường

Tóm tắt

Chiến lược tự điều chỉnh đường dẫn hồi quy tuyến tính là một chiến lược định lượng hiệu quả. Nó có nền tảng lý thuyết vững chắc, hiệu quả thực tế tốt, đáng để nghiên cứu và tối ưu hóa hơn nữa, có thể trở thành một thành phần hiệu quả trong hệ thống giao dịch định lượng.

Mã nguồn chiến lược
/*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=2
strategy("Stealthy 7 Linear Regression Channel Strategy", overlay=true)
source = open
length = input(100, minval=1)
mult1 = input(1, minval=0.001, maxval=50)
mult2 = input(1, minval=0.001, maxval=50)
DayTrader = input(title="Range Mode", type=bool, defval=false)

//Making the first least squares line
sum_x = length * (length + 1) / 2
sum_y = 0
sum_xy = 0
xyproductsum = 0
sum_xx = 0
for i = 1 to length
    sum_y := sum_y + close[i]
    sum_xy := i * close[i] + sum_xy
    sum_xx := i * i + sum_xx
m = (length*sum_xy - (sum_x * sum_y)) / (length * sum_xx - (sum_x * sum_x))
b = sum_y / length - (m * sum_x / length)

//Finding the first standard deviation from the line
difference = 0
for i = 1 to length
    y = i * m  + b
    difference := pow(abs(close[i] - y),2) + difference
STDDEV = sqrt(difference / length)

//Creating trading zones
dev = mult1 * STDDEV
dev2 = mult2 * STDDEV
upper = b + dev
lower = b - dev2
middle = b

if DayTrader == false
    if crossover(source, upper)
        strategy.entry("RGLONG", strategy.long, oca_name="RegChannel",  comment="RegLong")
    else
        strategy.cancel(id="RGLONG")

    if crossunder(source, lower)
        strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel",  comment="RegShort")
    else
        strategy.cancel(id="RGSHORT")

    if crossover(source, middle) and strategy.position_size < 0
        strategy.close_all()
    if crossunder(source,middle) and strategy.position_size > 0
        strategy.close_all()

if DayTrader == true
    if crossover(source, lower) 
        strategy.entry("RGLONG", strategy.long, oca_name="RegChannel",  comment="RegLong")
    else
        strategy.cancel(id="RGLONG")

    if crossunder(source, upper)
        strategy.entry("RGSHORT", strategy.short, oca_name="RegChannel",  comment="RegShort")
    else
        strategy.cancel(id="RGSHORT")


plot(upper, title="UpperBand", color=purple, linewidth=1, style=line)
plot(lower, title="LowerBand", color=purple, linewidth=1, style=line)
plot(middle, title="MiddleBand", color=black, linewidth=1, style=line)