Chiến lược giao dịch trung bình di chuyển hồi quy tuyến tính tạo ra tín hiệu mua và bán dựa trên sự chéo chéo giữa đường hồi quy tuyến tính và trung bình di chuyển của giá cổ phiếu. Chiến lược này kết hợp theo xu hướng với phân tích hồi quy tuyến tính để xác định sự đảo ngược tiềm năng và đạt được mức mua thấp và bán cao.
Chiến lược đầu tiên tính toán đường hồi quy tuyến tính n ngày và trung bình động m ngày của giá cổ phiếu.
Khi đường trung bình động vượt trên đường hồi quy, nó báo hiệu tăng động lực tăng và tạo ra tín hiệu mua. Khi đường trung bình động vượt dưới, nó báo hiệu suy yếu tăng và tạo ra tín hiệu bán.
Cụ thể, chiến lược theo các bước sau để xác định tín hiệu giao dịch:
Tính toán n-ngày tuyến tính hồi quy đường giá lrLine
Tính toán trung bình di chuyển đơn giản trong m ngày của lrLine được gọi là lrMA
Tính toán m-ngày chỉ số trung bình động của giá gọi là ema
Khi EMA vượt qua lrMA, tạo tín hiệu mua longEntry
Khi EMA vượt dưới lrMA, tạo tín hiệu bán longExit
Chỉ xem xét tín hiệu mua khi thị trường tăng
Thực hiện giao dịch dựa trên tín hiệu
Bằng cách sử dụng chéo giữa hồi quy và đường trung bình động để xác định các mục nhập, chiến lược có thể lọc hiệu quả các đột phá sai và xác định sự đảo ngược để mua thấp và bán cao.
Các thông số nên được điều chỉnh để tăng thời gian trung bình động và đường hồi quy và giảm tần suất giao dịch. Các lỗ dừng hợp lý nên được thực hiện để kiểm soát rủi ro. Các bộ lọc thị trường có thể được nâng cao để cải thiện độ chính xác.
Chiến lược có thể được tối ưu hóa trong một số khía cạnh:
Tối ưu hóa trung bình động bằng cách thử nghiệm các loại MAs khác nhau
Tối ưu hóa đường hồi quy bằng cách điều chỉnh thời gian tính toán
Tối ưu hóa bộ lọc thị trường bằng cách thử nghiệm các chỉ số khác nhau
Tối ưu hóa tham số thông qua backtesting nghiêm ngặt
Tối ưu hóa stop loss bằng cách thử nghiệm các logic stop loss khác nhau
Tối ưu hóa chi phí bằng cách điều chỉnh tần suất giao dịch dựa trên chi phí
Những tối ưu hóa này có thể tiếp tục cải thiện sự ổn định và lợi nhuận của chiến lược.
Chiến lược MA hồi quy tuyến tính tích hợp các điểm mạnh của phân tích xu hướng và hồi quy tuyến tính để xác định sự đảo ngược hiệu quả và mua giá bán thấp cao. Chiến lược đơn giản này phù hợp với việc chọn cổ phiếu trong khoảng thời gian trung bình đến dài hạn. Với điều chỉnh tham số và kiểm soát rủi ro, chiến lược có thể đạt được sự ổn định cao hơn. Nó cung cấp một khuôn khổ giao dịch kỹ thuật khả thi cho phân tích thị trường.
/*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)