Chiến lược đảo ngược xu hướng mô hình năng động

Tác giả:ChaoZhang, Ngày: 2023-12-13 16:52:34
Tags:

img

Tổng quan

Chiến lược đảo ngược xu hướng mô hình động sử dụng hồi quy tuyến tính để dự đoán giá và đường trung bình động để tạo ra mô hình để tạo ra tín hiệu giao dịch. Nó tạo ra tín hiệu mua khi giá dự đoán vượt qua đường trung bình động lên và bán tín hiệu khi vượt qua dưới xuống, nắm bắt sự đảo ngược xu hướng.

Chiến lược logic

  1. Tính toán hồi quy tuyến tính của giá cổ phiếu dựa trên khối lượng giao dịch để có được giá dự đoán
  2. Tính toán trung bình động trong các điều kiện khác nhau
  3. Tạo tín hiệu mua khi giá dự đoán vượt qua đường trung bình động lên
  4. Tạo tín hiệu bán khi giá dự đoán vượt qua đường trung bình động xuống
  5. Kết hợp chỉ số MACD để xác định thời gian đảo ngược xu hướng

Sự kết hợp của các tín hiệu trên với nhiều xác nhận tránh sự đột phá sai và cải thiện độ chính xác.

Phân tích lợi thế

  • Sử dụng hồi quy tuyến tính để dự đoán xu hướng giá, tăng độ chính xác tín hiệu
  • Khám phá sự đảo ngược xu hướng thông qua các mô hình trung bình động
  • Sự suy giảm dựa trên khối lượng giao dịch có ý nghĩa kinh tế tốt hơn
  • Nhiều xác nhận bởi MACD, v.v. làm giảm tín hiệu sai

Phân tích rủi ro

  • Các thông số hồi quy tuyến tính ảnh hưởng đáng kể đến kết quả
  • Cài đặt trung bình động cũng ảnh hưởng đến chất lượng tín hiệu
  • Mặc dù có xác nhận, tín hiệu sai vẫn là một rủi ro
  • Mã có thể được tối ưu hóa thêm để giảm tần suất giao dịch và cải thiện tỷ lệ lợi nhuận

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

  • Tối ưu hóa các tham số hồi quy tuyến tính và trung bình động
  • Thêm thêm các điều kiện xác nhận để giảm tỷ lệ tín hiệu sai
  • Bao gồm nhiều yếu tố hơn để đánh giá chất lượng của sự đảo ngược xu hướng
  • Cải thiện các chiến lược dừng lỗ để giảm rủi ro cho các giao dịch cá nhân

Kết luận

Chiến lược đảo ngược xu hướng mô hình động tích hợp dự đoán hồi quy tuyến tính và các mô hình trung bình động để nắm bắt sự đảo ngược xu hướng. So với các chiến lược chỉ số duy nhất, nó có độ tin cậy cao hơn.


/*backtest
start: 2023-12-05 00:00:00
end: 2023-12-12 00:00:00
period: 1m
basePeriod: 1m
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)




Thêm nữa