Chiến lược giao cắt tuyến tính dài-ngắn


Ngày tạo: 2024-03-27 17:52:02 sửa đổi lần cuối: 2024-03-27 17:52:02
sao chép: 0 Số nhấp chuột: 576
1
tập trung vào
1617
Người theo dõi

Chiến lược giao cắt tuyến tính dài-ngắn

Tổng quan

Chiến lược giao chéo tuyến tính đa luồng là một chiến lược phân tích kỹ thuật dựa trên mô hình hồi quy tuyến tính để dự đoán biến động giá tương lai của cổ phiếu. Nguyên tắc cơ bản của chiến lược là: biến động giá cổ phiếu thường tuân theo xu hướng tuyến tính nhất định, và có thể dự đoán giá tương lai bằng cách tính toán hồi quy tuyến tính của giá.

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

Chiến lược này đầu tiên tính toán sự hồi phục tuyến tính của giá cổ phiếu trong một khoảng thời gian. Sự hồi phục tuyến tính sử dụng phép nhân đôi nhỏ nhất để tạo ra một đường thẳng đại diện cho xu hướng thay đổi giá theo thời gian. Chiến lược sau đó vẽ đường giá dự đoán và giá hiện tại trên biểu đồ.

Chính sách này xác định hai tín hiệu:

  1. Multi-Signal: kích hoạt khi giá dự báo trên giá hiện tại
  2. Tín hiệu không: kích hoạt khi giá dự báo vượt qua giá hiện tại

Khi có tín hiệu nhiều, chiến lược mở thêm; khi có tín hiệu ngắn, giảm.

Các bước quan trọng của chiến lược là:

  1. Tính toán hồi quy tuyến tính của giá trong một khoảng thời gian
  2. Hình vẽ đường giá dự đoán và giá hiện tại trên biểu đồ
  3. Định nghĩa các tín hiệu làm nhiều và làm trống
  4. Làm nhiều tín hiệu khi kích hoạt
  5. Kích hoạt tín hiệu tháo lỗ

Phân tích lợi thế

Chiến lược giao chéo đa không gian có những ưu điểm sau:

  1. Đơn giản và hiệu quả: Chiến lược này có logic rõ ràng, dễ thực hiện và có thể nắm bắt được xu hướng tuyến tính của giá cả.
  2. Tính ứng dụng rộng rãi: Chiến lược này có thể tạo ra tín hiệu giao dịch trong cả xu hướng và biến động.
  3. Khả năng tối ưu hóa: Chiến lược bao gồm một số tham số quan trọng, chẳng hạn như chu kỳ hồi quy tuyến tính, trung bình di chuyển, và các tham số này có thể được tối ưu hóa để cải thiện hiệu suất của chiến lược.

Phân tích rủi ro

Mặc dù có nhiều ưu điểm, chiến lược giao chéo đa không tuyến cũng có một số rủi ro:

  1. Rủi ro nhận diện xu hướng: Chiến lược có thể tạo ra tín hiệu sai khi xu hướng giá không theo xu hướng tuyến tính, chẳng hạn như trong tình trạng biến động. Bạn có thể giảm rủi ro bằng cách kết hợp với các chỉ số khác như MACD.
  2. Rủi ro thiết lập tham số: hiệu suất chiến lược nhạy cảm với thiết lập tham số, tham số không đúng có thể dẫn đến tổn thất. Do đó, cần phải kiểm tra lại và tối ưu hóa đầy đủ các tham số trước khi thực hiện.
  3. Rủi ro quá phù hợp: Nếu các tham số được tối ưu hóa quá mức, nó có thể dẫn đến việc các chiến lược quá phù hợp với dữ liệu lịch sử và hoạt động kém hơn trong tương lai. Phương pháp tránh quá phù hợp bao gồm giữ đơn giản, thử nghiệm ngoài tập dữ liệu, v.v.

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

  1. Kết hợp với các chỉ số khác: Tín hiệu hồi quy tuyến tính có thể kết hợp với các chỉ số kỹ thuật khác như MACD, Brinband, v.v. để cải thiện độ chính xác của tín hiệu.
  2. Tối ưu hóa tham số động: Có thể thiết kế một cơ chế thích ứng tự động của các tham số, điều chỉnh các tham số động theo tình hình thị trường, tăng khả năng thích ứng.
  3. Thêm mô-đun kiểm soát rủi ro: Thêm các biện pháp kiểm soát rủi ro như dừng lỗ, quản lý tiền vào chiến lược, giảm rủi ro giao dịch đơn lẻ và tăng thu nhập tích lũy.
  4. Tối ưu hóa học máy: Có thể sử dụng các thuật toán học máy để liên tục tối ưu hóa mô hình hồi quy tuyến tính để dự đoán chính xác hơn.

Tóm tắt

Chiến lược chéo đa luồng dựa trên sự hồi quy tuyến tính của giá, tạo ra tín hiệu giao dịch bằng cách so sánh giá dự đoán với giá hiện tại. Lập luận của chiến lược đơn giản và rõ ràng, có thể nắm bắt xu hướng tuyến tính của giá, phù hợp với mọi tình huống. Đồng thời, chiến lược dễ thực hiện và tối ưu hóa, có thể điều chỉnh các tham số một cách linh hoạt, kết hợp với các chỉ số khác, thêm mô-đun kiểm soát rủi ro, v.v., liên tục cải thiện hiệu suất của chiến lược.

Mã nguồn chiến lược
/*backtest
start: 2024-02-25 00:00:00
end: 2024-03-26 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © stocktechbot
//@version=5
strategy("Linear Cross", overlay=true, margin_long=100, margin_short=0)

//Linear Regression

vol = volume

// Function to calculate linear regression
linregs(y, x, len) =>
    ybar = math.sum(y, len)/len
    xbar = math.sum(x, len)/len
    b = math.sum((x - xbar)*(y - ybar),len)/math.sum((x - xbar)*(x - xbar),len)
    a = ybar - b*xbar
    [a, b]

// Historical stock price data
price = close

// Length of linear regression
len = input(defval = 21, title = 'Strategy Length')
linearlen=input(defval = 9, title = 'Linear Lookback')
[a, b] = linregs(price, vol, len)

// Calculate linear regression for stock price based on volume
//eps = request.earnings(syminfo.ticker, earnings.actual)
//MA For double confirmation

out = ta.sma(close, 200)
outf = ta.sma(close, 50)
outn = ta.sma(close, 90)
outt = ta.sma(close, 21)
outthree = ta.sma(close, 9)

// Predicted stock price based on volume
predicted_price = a + b*vol

// Check if predicted price is between open and close
is_between = open < predicted_price and predicted_price < close

//MACD
//[macdLine, signalLine, histLine] = ta.macd(close, 12, 26, 9)

// Plot predicted stock price
plot(predicted_price, color=color.rgb(65, 59, 150), linewidth=2, title="Predicted Price")
plot(ta.sma(predicted_price,linearlen), color=color.rgb(199, 43, 64), linewidth=2, title="MA Predicted Price")
//offset = input.int(title="Offset", defval=0, minval=-500, maxval=500)
plot(out, color=color.blue, title="MA200")
[macdLine, signalLine, histLine] = ta.macd(predicted_price, 12, 26, 9)

//BUY Signal

longCondition=false
mafentry =ta.sma(close, 50) > ta.sma(close, 90)
//matentry = ta.sma(close, 21) > ta.sma(close, 50)
matwohun = close > ta.sma(close, 200)
twohunraise = ta.rising(out, 2)
twentyrise = ta.rising(outt, 2)
macdrise = ta.rising(macdLine,2)
macdlong = ta.crossover(predicted_price, ta.wma(predicted_price,linearlen))  and (signalLine < macdLine)
if macdlong and macdrise
    longCondition := true

if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)
//Sell Signal
lastEntryPrice = strategy.opentrades.entry_price(strategy.opentrades - 1)
daysSinceEntry = len
daysSinceEntry := int((time - strategy.opentrades.entry_time(strategy.opentrades - 1)) / (24 * 60 * 60 * 1000))
percentageChange = (close - lastEntryPrice) / lastEntryPrice * 100
//trailChange = (ta.highest(close,daysSinceEntry) - close) / close * 100

//label.new(bar_index, high, color=color.black, textcolor=color.white,text=str.tostring(int(trailChange)))
shortCondition=false
mafexit =ta.sma(close, 50) < ta.sma(close, 90)
matexit = ta.sma(close, 21) < ta.sma(close, 50)
matwohund = close < ta.sma(close, 200)
twohunfall = ta.falling(out, 3)
twentyfall = ta.falling(outt, 2)
shortmafall = ta.falling(outthree, 1)
macdfall = ta.falling(macdLine,1)
macdsell = macdLine < signalLine
if macdfall and macdsell and (macdLine < signalLine) and ta.falling(low,2)
    shortCondition := true

if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)