Chiến lược giao dịch theo xu hướng dựa trên hồi quy tuyến tính và đường trung bình động


Ngày tạo: 2023-12-18 17:34:29 sửa đổi lần cuối: 2023-12-18 17:34:29
sao chép: 4 Số nhấp chuột: 890
1
tập trung vào
1621
Người theo dõi

Chiến lược giao dịch theo xu hướng dựa trên hồi quy tuyến tính và đường trung bình động

Tổng quan

Chiến lược này dựa trên đường hồi quy tuyến tính và đường trung bình di chuyển, thiết kế một hệ thống giao dịch theo dõi xu hướng đơn giản. Khi đường hồi quy tuyến tính đi qua đường trung bình di chuyển, hãy làm nhiều và khi đường hồi quy tuyến tính đi qua đường trung bình di chuyển, hãy làm trống.

Tên chiến lược

Trend Following Regression Trading Strategy (Chiến lược giao dịch theo hồi quy xu hướng)

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

Chiến lược này bao gồm các phần quan trọng sau:

  1. Tính trung bình di chuyển đơn giản (SMA) trong n ngày
  2. Tính toán đường hồi quy tuyến tính gần nhất của ngày N
  3. Làm nhiều hơn khi giá đóng cửa vượt qua đường SMA và cao hơn đường hồi phục
  4. Khi giá đóng cửa vượt qua đường SMA và dưới đường hồi phục, hãy tháo lỗ
  5. Thiết lập giá dừng lỗ và giá dừng bán

Đường co lại tuyến tính phù hợp với hướng xu hướng trong một khoảng thời gian gần đây. Điều này có thể được sử dụng để xác định hướng của xu hướng tổng thể. Khi giá phá vỡ đường SMA, chúng tôi cần phải đánh giá thêm về hướng của đường co lại tuyến tính có phù hợp với sự phá vỡ này hay không. Chỉ khi hai hướng này phù hợp, tín hiệu giao dịch sẽ được tạo ra.

Ngoài ra, chiến lược này cũng đặt một cơ chế dừng lỗ. Khi giá chạm vào đường dừng lỗ, lệnh dừng lỗ sẽ được thực hiện. Cũng có một đường dừng, khóa một phần lợi nhuận.

Lợi thế chiến lược

Chiến lược này có những ưu điểm sau:

  1. Kết hợp các chỉ số xu hướng và các chỉ số đột phá, tránh đột phá giả, cải thiện chất lượng tín hiệu
  2. Sử dụng hồi quy tuyến tính để xác định hướng xu hướng, lọc xu hướng, chỉ làm nhiều khi xu hướng tăng, làm trống khi xu hướng giảm
  3. Thiết lập các cơ chế dừng và dừng để kiểm soát rủi ro
  4. Quy tắc rõ ràng, dễ hiểu và dễ thực hiện
  5. Chỉ cần điều chỉnh một vài tham số, không cần quá phức tạp

Phân tích rủi ro

Chiến lược này cũng có một số rủi ro:

  1. Các tín hiệu giao dịch sai sẽ được tạo ra nhiều hơn trong các biến động.
  2. Thiết lập đường trung bình di chuyển và chu kỳ hồi phục cần được kiểm tra và tối ưu hóa nhiều lần, thiết lập sai có thể ảnh hưởng đến hiệu suất của chiến lược
  3. Hạn chế thiệt hại trong trường hợp cực đoan có thể gây ra thiệt hại lớn hơn khi phá vỡ
  4. Dựa trên chỉ số kỹ thuật, không kết hợp các yếu tố cơ bản

Chúng ta có thể tối ưu hóa đối với những rủi ro này bằng cách:

  1. Trong thị trường bất ổn, hãy cân nhắc các chiến lược tạm dừng hoặc sử dụng các chỉ số khác để lọc
  2. Các tham số được thử nghiệm lặp đi lặp lại để tìm các tham số tối ưu
  3. Tối ưu hóa và động điều chỉnh vị trí dừng lỗ
  4. Kết hợp các yếu tố cơ bản như dữ liệu kinh tế

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

Chiến lược này có thể được tối ưu hóa bằng cách:

  1. Thêm các chỉ số hỗ trợ khác để đánh giá tình trạng thị trường, tránh giao dịch trong tình trạng chấn động
  2. Tối ưu hóa các loại trung bình di chuyển, chẳng hạn như kết hợp trung bình di chuyển đôi, trung bình di chuyển ba
  3. Phân tích sâu hơn về độ lệch đường hồi quy, thêm quy tắc phán đoán độ lệch
  4. Kết hợp với chỉ số dao động, thiết lập vị trí dừng lỗ động
  5. Sử dụng phương pháp học máy để tự động tối ưu hóa các tham số

Tóm tắt

Chiến lược này kết hợp các tính năng theo dõi xu hướng của trung bình di chuyển với các tính năng phán đoán xu hướng của sự hồi phục tuyến tính, tạo thành một hệ thống giao dịch theo dõi xu hướng tương đối đơn giản và dễ dàng. Trong thị trường có xu hướng rõ ràng, chiến lược này có thể có hiệu quả tốt hơn.

Mã nguồn chiến lược
/*backtest
start: 2023-11-17 00:00:00
end: 2023-12-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Regression Trading Strategy", shorttitle="RTS", overlay=true)

// Input parameters
n = input(14, title="SMA Period")
stop_loss_percentage = input(2, title="Stop Loss Percentage")
take_profit_percentage = input(2, title="Take Profit Percentage")

// Calculate the SMA
sma = sma(close, n)

// Linear regression function
linear_regression(src, length) =>
    sumX = 0.0
    sumY = 0.0
    sumXY = 0.0
    sumX2 = 0.0
    for i = 0 to length - 1
        sumX := sumX + i
        sumY := sumY + src[i]
        sumXY := sumXY + i * src[i]
        sumX2 := sumX2 + i * i
    slope = (length * sumXY - sumX * sumY) / (length * sumX2 - sumX * sumX)
    intercept = (sumY - slope * sumX) / length
    line = slope * length + intercept
    line

// Calculate the linear regression
regression_line = linear_regression(close, n)

// Plot the SMA and regression line
plot(sma, title="SMA", color=color.blue)
plot(regression_line, title="Regression Line", color=color.red)

// Trading strategy conditions
long_condition = crossover(close, sma) and close > regression_line
short_condition = crossunder(close, sma) and close < regression_line

// Exit conditions
stop_loss_price = close * (1 - stop_loss_percentage / 100)
take_profit_price = close * (1 + take_profit_percentage / 100)

// Plot entry and exit points on the chart
plotshape(series=long_condition, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(series=short_condition, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)
plotshape(series=crossunder(close, stop_loss_price), title="Stop Loss", location=location.abovebar, color=color.red, style=shape.labeldown, text="SL")
plotshape(series=crossover(close, take_profit_price), title="Take Profit", location=location.belowbar, color=color.green, style=shape.labelup, text="TP")

// Strategy orders
strategy.entry("Long", strategy.long, when = long_condition)
strategy.entry("Short", strategy.short, when = short_condition)
strategy.exit("Exit", from_entry = "Long", when = crossover(close, stop_loss_price) or crossover(close, take_profit_price))
strategy.exit("Exit", from_entry = "Short", when = crossunder(close, stop_loss_price) or crossunder(close, take_profit_price))