
Chiến lược này sử dụng các đường dẫn trên và dưới của các kênh hồi phục tuyến tính, kết hợp với các tín hiệu mua và bán phá vỡ theo thiết lập chênh lệch hai tiêu chuẩn, để tạo vị trí mở vị trí sau khi giá phá vỡ. Đồng thời sử dụng các đường giao nhau của các kênh trung tâm làm tín hiệu vị trí bằng phẳng, để đạt được lợi nhuận sau khi dừng lại.
Lý luận cốt lõi của chiến lược này dựa trên đường ray lên xuống của đường dẫn hồi quy tuyến tính và đường trung tâm. Quá trình tính toán cụ thể như sau:
Tính toán giá trị linear regression linreg, và giá trị linear regression linreg_p cho chu kỳ tiếp theo
Tính độ dốc và điểm cắt của đường hồi quy tuyến tính dựa trên giá trị hồi quy tuyến tính
Tính lệch của giá so với đường hồi quy
Đặt số dev của độ lệch để có được độ lệch lên và xuống đường ray
Cài đặt tín hiệu mua khi giá phá vỡ từ đường ray dưới lên
Đặt sell khi giá phá vỡ từ đường ray trên xuống
Cài đặt tín hiệu dừng exit khi giá đảo ngược từ đường trung tâm
Logic giao dịch dựa trên các tín hiệu mua, bán và dừng
Ưu điểm lớn nhất của chiến lược này là sử dụng xu hướng trung và dài hạn của giá được phản ánh bởi các kênh quay trở tuyến tính. Các khía cạnh sau đây được thể hiện cụ thể:
Các đường dẫn trên và dưới của kênh hồi quy tuyến tính có thể phản ánh hiệu quả phạm vi bình thường của biến động giá, sử dụng phạm vi kênh để thiết lập tín hiệu giao dịch, có thể giảm tín hiệu sai.
Giao lộ giữa đường là tín hiệu dừng, có thể khóa lợi nhuận tối đa, tránh thiệt hại do tiếp tục đảo ngược sau khi kiếm được lợi nhuận.
Linear regression tool có một số độ trễ, có thể loại bỏ 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.
Chiến lược này có ít tham số, dễ thực hiện và phù hợp với thuật toán hóa giao dịch định lượng.
Chiến lược này cũng có một số rủi ro, đặc biệt là:
Các kênh hồi quy tuyến tính có tính chậm trễ, có thể bỏ lỡ xu hướng sau khi thay đổi mạnh trong thời gian ngắn. Các chu kỳ kênh có thể được rút ngắn thích hợp, các tham số được tối ưu hóa.
Việc đặt hệ số sai lệch không đúng cũng có thể dẫn đến tín hiệu sai. Nó có thể được kết hợp với tham số tối ưu hóa phản hồi.
Chỉ dựa trên tín hiệu đột phá, có thể có nhiều tổn thất do chấn động. Bạn có thể xem xét lọc sóng kết hợp với các chỉ số khác.
Có một số rủi ro phù hợp với đường cong. Bạn có thể xem xét kết hợp với các chỉ số khác của kênh hoặc thử nghiệm các nguồn dữ liệu khác nhau.
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Tối ưu hóa chiều dài của đường hồi quy tuyến tính, cân bằng độ trì trệ và độ nhạy phản ứng.
Tối ưu hóa hệ số sai lệch, cải thiện chất lượng tín hiệu trong khi kiểm soát tối đa rủi ro.
Thêm các chỉ số khác để lọc tín hiệu và tăng tỷ lệ chiến lược. Ví dụ: EMA, KDJ, v.v.
Thêm các cơ chế dừng lỗ. Ví dụ: dừng ATR, dừng theo dõi, v.v.
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ụ: sử dụng dữ liệu quyền lợi, dữ liệu chỉ số, v.v.
Tham gia với môi trường thị trường ((thị trường nhiều đầu không) động điều chỉnh tham số hoặc trọng lượng tín hiệu.
Chiến lược này nói chung 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. Ý tưởng chiến lược rõ ràng, dễ hiểu, ít tham số, thực hiện thực tế không khó. Nhưng làm thế nào để tối ưu hóa và điều chỉnh tham số theo động lực của môi trường thị trường, kết hợp với các chỉ số khác để lọc tín hiệu, là chìa khóa cho sự thành công của chiến lược. Bằng cách liên tục kiểm tra và tối ưu hóa, chiến lược có thể trở thành một hệ thống định lượng có 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)