Chiến lược giao dịch đột phá kênh hồi quy tuyến tính

Tác giả:ChaoZhang, Ngày: 2024-02-18 15:00:53
Tags:

img

Tổng quan

Chiến lược này sử dụng các băng tần trên và dưới của kênh hồi quy tuyến tính, kết hợp với độ lệch chuẩn kép để thiết lập tín hiệu mua và bán đột phá, để thiết lập các vị trí khi giá phá vỡ.

Chiến lược logic

Lý thuyết cốt lõi của chiến lược này dựa trên dải trên, dải dưới và đường trung của kênh hồi quy tuyến tính.

  1. Tính toán giá trị hồi quy tuyến tính linreg của giá, và giá trị hồi quy tuyến tính của giai đoạn tiếp theo linreg_p

  2. Tính toán độ dốc độ dốc và giao cắt giao cắt của đường thẳng hồi quy tuyến tính dựa trên linreg

  3. Tính toán độ lệch lệch của giá so với đường hồi quy

  4. Thiết lập các dev nhiều lần của sự lệch để có được sự dịch chuyển của các dải trên và dưới

  5. Khi giá phá vỡ lên từ dải dưới, đặt mua tín hiệu mua

  6. Khi giá phá vỡ xuống từ dải trên, đặt bán tín hiệu bán

  7. Khi giá đảo ngược từ đường giữa của kênh, thiết lập tín hiệu lợi nhuận thoát

  8. Thiết lập logic giao dịch dựa trên tín hiệu mua, bán và thoát

Phân tích lợi thế

Ưu điểm lớn nhất của chiến lược này là nó sử dụng xu hướng trung và dài hạn được phản ánh bởi kênh hồi quy tuyến tính.

  1. Các dải trên và dưới có thể phản ánh hiệu quả phạm vi bình thường của biến động giá. Sử dụng chúng để thiết lập tín hiệu giao dịch có thể giảm các tín hiệu sai.

  2. Đường chéo giữa là tín hiệu thu lợi nhuận có thể tối đa hóa lợi nhuận và tránh tổn thất do đảo ngược sau khi kiếm được lợi nhuận.

  3. Kênh hồi quy tuyến tính có một số trễ, có thể lọc hiệu quả tiếng ồn thị trường ngắn hạn và làm cho tín hiệu giao dịch đáng tin cậy hơn.

  4. Chiến lược này có ít thông số và dễ thực hiện, phù hợp với giao dịch thuật toán.

Phân tích rủi ro

Có một số rủi ro cho chiến lược này:

  1. Sự chậm trễ của kênh hồi quy tuyến tính có thể bỏ lỡ xu hướng sau những thay đổi ngắn hạn. Thời gian có thể được rút ngắn để tối ưu hóa.

  2. Cài đặt không chính xác của trình nhân độ lệch cũng có thể dẫn đến tín hiệu sai. Các tham số có thể được tối ưu hóa thông qua backtesting.

  3. Việc chỉ dựa vào tín hiệu đột phá có thể dẫn đến tổn thất.

  4. Có một số rủi ro phù hợp với đường cong. Kết hợp với các chỉ số kênh khác hoặc thử nghiệm các nguồn dữ liệu khác nhau có thể giúp ích.

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

Các hướng tối ưu hóa chính cho chiến lược này:

  1. Tối ưu hóa chiều dài của kênh hồi quy tuyến tính để cân bằng độ trễ và độ nhạy.

  2. Tối ưu hóa nhân độ lệch để cải thiện chất lượng tín hiệu trong khi tối đa hóa kiểm soát rủi ro.

  3. Thêm các chỉ số khác để lọc tín hiệu để cải thiện tỷ lệ thắng, ví dụ EMA, KDJ v.v.

  4. Thêm các cơ chế dừng lỗ như ATR trailing stop loss.

  5. Kiểm tra tác động của các nguồn dữ liệu khác nhau đối với chiến lược, ví dụ như kết thúc điều chỉnh, dữ liệu chỉ số v.v.

  6. Điều chỉnh động các tham số hoặc trọng lượng tín hiệu dựa trên điều kiện thị trường.

Kết luận

Tóm lại, đây là một hệ thống đột phá sử dụng kênh hồi quy tuyến tính làm chỉ số tín hiệu. Logic chiến lược rõ ràng và dễ hiểu, với ít thông số, làm cho giao dịch trực tiếp tương đối dễ thực hiện. Tuy nhiên, cách tối ưu hóa các thông số năng động dựa trên điều kiện thị trường thay đổi và kết hợp các chỉ số khác để lọc tín hiệu là chìa khóa thành công của chiến lược này. Thông qua kiểm tra và tối ưu hóa liên tục, chiến lược này có thể trở thành một hệ thống định lượng tạo lợi nhuận ổn định.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Robotrading
//@version=4

strategy("robotrading linreg", "linreg", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_value = 0.1)

//Settings
source      = input(close)
length      = input(100, minval=1)
offset      = input(0, minval=0)
dev         = input(2.0, "Deviation")
smoothing   = input(1, minval=1)
mtf_val     = input("", "Resolution", input.resolution)
signals     = input("Recent", "Signals Display", options=["Recent", "All"])
goto        = input(0, "End At Bar Index")

//Lin.reg.
cc(x) => x=="Red"?color.red:x=="Lime"?color.lime:x=="Orange"?color.orange:x=="Teal"?color.teal:x=="Yellow"?color.yellow:x=="Black"?color.black:color.white
data(x) => sma(security(syminfo.tickerid, mtf_val!="" ? mtf_val : timeframe.period, x), smoothing)
linreg = data(linreg(source, length, offset))
linreg_p = data(linreg(source, length, offset+1))

//Deviation
x = bar_index
slope = linreg - linreg_p
intercept = linreg - x*slope
deviationSum = 0.0
for i = 0 to length-1
    deviationSum:= deviationSum + pow(source[i]-(slope*(x-i)+intercept), 2)  
deviation = sqrt(deviationSum/(length))
x1 = x-length
x2 = x
y1 = slope*(x-length)+intercept
y2 = linreg

//Cross
dm_current = -deviation*dev + y2
dp_current = deviation*dev + y2
ex_current = (dm_current + dp_current) / 2
buy = crossunder(close, dm_current)
sell = crossover(close, dp_current)
exit = crossover(close, ex_current) or crossunder(close, ex_current)

//Channel
updating = goto <= 0 or x < goto
// if updating
//     line b = line.new(x1, y1, x2, y2, xloc.bar_index, extend.right, color.aqua, width = 3)
//     line.delete(b[1])
//     line dp = line.new(x1, deviation*dev + y1, x2, deviation*dev + y2, xloc.bar_index, extend.right, color.red, width = 3)
//     line.delete(dp[1])
//     line dm = line.new(x1, -deviation*dev + y1, x2, -deviation*dev + y2, xloc.bar_index, extend.right, color.lime, width = 3)
//     line.delete(dm[1])

//Lines
plot(dm_current, color = color.lime)
plot(dp_current, color = color.red)
plot(ex_current)
    
//Trading
if ex_current > 0
    strategy.entry("Long", strategy.long, na, limit = dm_current)
    strategy.entry("Short", strategy.short, na, limit = dp_current)
    strategy.exit("ExitLong", "Long", limit = ex_current)
    strategy.exit("ExitShort", "Short", limit = ex_current)

Thêm nữa