
Chiến lược giao dịch hồi quy đường trung bình quyết định tín hiệu mua và bán bằng cách tính toán đường hồi quy tuyến tính của giá cổ phiếu và giao thoa của đường trung bình. Chiến lược này kết hợp phân tích hồi quy tuyến tính và đường trung bình, xem xét xu hướng giá cổ phiếu và tính đến các đặc điểm thống kê, có thể xác định hiệu quả điểm đảo ngược giá cổ phiếu, để thực hiện mua bán thấp.
Chiến lược này bắt đầu bằng việc tính toán đường hồi quy tuyến tính của giá cổ phiếu trong n ngày và đường trung bình hàng ngày m. Đường hồi quy tuyến tính phản ánh xu hướng thống kê dài hạn của giá cổ phiếu, đường trung bình phản ánh chuyển động ngắn hạn của giá cổ phiếu.
Khi đường hồi phục tuyến tính đi qua đường trung bình, nó cho thấy giá cổ phiếu tăng lên, tạo ra tín hiệu mua. Khi đường hồi phục tuyến tính đi qua đường trung bình, nó cho thấy giá cổ phiếu tăng yếu, tạo ra tín hiệu bán.
Cụ thể, chiến lược đánh giá tín hiệu giao dịch thông qua các bước sau:
Tính toán đường hồi quy tuyến tính giá cổ phiếu trong n ngày
Tính trung bình di chuyển đơn giản m ngày của đường hồi quy tuyến tính LRMA
Chỉ số m-ngày tính giá cổ phiếu
LongEntry tạo ra một tín hiệu mua khi lrMA trên ema
Khi ema đi qua LRMA, nó tạo ra một tín hiệu bán longExit
Đồng thời, kết hợp với phán đoán của thị trường lớn, chỉ xem xét tín hiệu mua khi thị trường lớn là thị trường bò
Thực hiện giao dịch mua bán theo tín hiệu
Thông qua giao thoa giữa đường trung bình và đường hồi phục, thời gian mua và bán có thể được lọc hiệu quả và nắm bắt các điểm đảo ngược để mua thấp và bán cao.
Cần chú ý đến điều chỉnh tham số, tăng tham số chu kỳ đường trung bình và đường hồi quy thích hợp, giảm tần suất giao dịch. Thiết lập hợp lý chiến lược kiểm soát rủi ro dừng lỗ. Tối ưu hóa các quy tắc phán đoán lớn, tăng độ chính xác.
Chiến lược này có thể được tối ưu hóa theo các khía cạnh sau:
Tối ưu hóa chỉ số đường trung bình: thử các loại đường trung bình khác nhau, chẳng hạn như đường trung bình chuyển động trọng lượng, để tìm đường trung bình phù hợp nhất cho cổ phiếu.
Tối ưu hóa đường hồi: điều chỉnh chu kỳ tính toán đường hồi để tìm các tham số chu kỳ phản ánh tốt nhất xu hướng dài hạn của cổ phiếu.
Tối ưu hóa phán đoán lớn: Kiểm tra các chỉ số phán đoán lớn khác nhau để tìm tín hiệu lớn phù hợp nhất với chiến lược.
Tối ưu hóa tham số: Tìm cấu hình tham số tối ưu bằng cách lặp lại các tổ hợp tham số khác nhau.
Tối ưu hóa chiến lược dừng lỗ: thử nghiệm các phương pháp dừng lỗ khác nhau, thiết lập logic dừng lỗ tốt nhất để kiểm soát rủi ro.
Tối ưu hóa chi phí giao dịch: Điều chỉnh tần số giao dịch để giảm chi phí giao dịch theo các mô hình phí giao dịch khác nhau.
Bằng cách tối ưu hóa các điểm trên, bạn có thể nâng cao hơn nữa sự ổn định và lợi nhuận của chiến lược.
Chiến lược này tích hợp các lợi ích của phân tích đường trung bình và phân tích sự hồi phục tuyến tính, có thể xác định hiệu quả các điểm biến đổi giá cổ phiếu, hướng dẫn mua bán thấp. Chiến lược này đơn giản và đáng tin cậy, phù hợp cho giao dịch cổ phiếu chọn trung và dài.
/*backtest
start: 2022-10-18 00:00:00
end: 2023-10-24 00:00:00
period: 1d
basePeriod: 1h
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/
// © lazy_capitalist
//@version=5
strategy('Linear Regression MA', overlay=true, initial_capital=10000)
datesGroup = "Date Info"
startMonth = input.int(defval = 1, title = "Start Month", minval = 1, maxval = 12, group=datesGroup)
startDay = input.int(defval = 1, title = "Start Day", minval = 1, maxval = 31, group=datesGroup)
startYear = input.int(defval = 2022, title = "Start Year", minval = 1970, group=datesGroup)
averagesGroup = "Averages"
lrLineInput = input.int(title="Linear Regression Line", defval=55, minval = 1, group=averagesGroup)
lrMAInput = input.int(title="Linear Regression MA", defval=55, minval = 1, group=averagesGroup)
emaInput = input.int(title="EMA Length", defval=55, minval = 1, group=averagesGroup)
tradesGroup = "Execute Trades"
executeLongInput = input.bool(title="Execute Long Trades", defval=true)
executeShortInput = input.bool(title="Execute Short Trades", defval=true)
executeStopLoss = input.bool(title="Execute Stop Loss", defval=true)
fourHrSMAExpr = ta.sma(close, 200)
fourHrMA = request.security(symbol=syminfo.tickerid, timeframe="240", expression=fourHrSMAExpr)
bullish = close > fourHrMA ? true : false
maxProfitInput = input.float( title="Max Profit (%)", defval=10.0, minval=0.0) * 0.01
stopLossPercentageInput = input.float( title="Stop Loss (%)", defval=1.75, minval=0.0) * 0.01
start = timestamp(startYear, startMonth, startDay, 00, 00) // backtest start window
window() => time >= start ? true : false // create function "within window of time"
showDate = input(defval = true, title = "Show Date Range")
lrLine = ta.linreg(close, lrLineInput, 0)
lrMA = ta.sma(lrLine, lrMAInput)
ema = ta.ema(close, emaInput)
longEntry = ema < lrMA
longExit = lrMA < ema
shortEntry = lrMA < ema
shortExit = ema < lrMA
maxProfitLong = strategy.opentrades.entry_price(0) * (1 + maxProfitInput)
maxProfitShort = strategy.opentrades.entry_price(0) * (1 - maxProfitInput)
stopLossPriceShort = strategy.position_avg_price * (1 + stopLossPercentageInput)
stopLossPriceLong = strategy.position_avg_price * (1 - stopLossPercentageInput)
if(executeLongInput and bullish)
strategy.entry( id="long_entry", direction=strategy.long, when=longEntry and window(), qty=10, comment="long_entry")
strategy.close( id="long_entry", when=longExit, comment="long_exit")
// strategy.close( id="long_entry", when=maxProfitLong <= close, comment="long_exit_mp")
if(executeShortInput and not bullish)
strategy.entry( id="short_entry", direction=strategy.short, when=shortEntry and window(), qty=10, comment="short_entry")
strategy.close( id="short_entry", when=shortExit, comment="short_exit")
// strategy.close( id="short_entry", when=maxProfitShort <= close, comment="short_exit_mp")
if(strategy.position_size > 0 and executeStopLoss)
strategy.exit( id="long_entry", stop=stopLossPriceLong, comment="exit_long_SL")
strategy.exit( id="short_entry", stop=stopLossPriceShort, comment="exit_short_SL")
// plot(series=lrLine, color=color.green)
plot(series=lrMA, color=color.red)
plot(series=ema, color=color.blue)