Strategi perdagangan purata bergerak regresi linear menjana isyarat beli dan jual berdasarkan persimpangan antara garis regresi linear dan purata bergerak harga saham. Strategi ini menggabungkan trend berikut dengan analisis regresi linear untuk mengenal pasti potensi pembalikan dan mencapai membeli rendah dan menjual tinggi.
Strategi ini mula-mula mengira garis regresi linear n-hari dan purata bergerak m-hari harga saham.
Apabila purata bergerak melintasi di atas garis regresi, ia menandakan penguatan momentum menaik dan menghasilkan isyarat beli.
Secara khusus, strategi ini mengikuti langkah-langkah berikut untuk menentukan isyarat perdagangan:
Mengira garis regresi linier harga hari-hari
Mengira purata mudah bergerak hari-m dari lrLine dipanggil lrMA
Mengira purata bergerak eksponensial harga m-hari yang dipanggil ema
Apabila EMA melintasi di atas lrMA, menjana isyarat beli panjang
Apabila EMA melintasi di bawah lrMA, menjana isyarat jual panjangExit
Hanya mempertimbangkan isyarat beli apabila pasaran naik
Melakukan perdagangan berdasarkan isyarat
Dengan menggunakan persilangan antara regresi dan purata bergerak untuk menentukan entri, strategi ini dapat menyaring pecah palsu dengan berkesan dan mengenal pasti pembalikan untuk membeli rendah dan menjual tinggi.
Parameter harus disesuaikan untuk meningkatkan purata bergerak dan tempoh garis regresi dan mengurangkan kekerapan perdagangan. Stop loss yang munasabah harus dilaksanakan untuk mengawal risiko. Penapis pasaran boleh ditingkatkan untuk meningkatkan ketepatan.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Pengoptimuman purata bergerak dengan menguji pelbagai jenis MA
Pengoptimuman garis regresi dengan menyesuaikan tempoh pengiraan
Pengoptimuman penapis pasaran dengan menguji penunjuk yang berbeza
Pengoptimuman parameter melalui pengujian belakang yang ketat
Peningkatan Stop Loss dengan menguji logik Stop Loss yang berbeza
Pengoptimuman kos dengan menyesuaikan kekerapan perdagangan berdasarkan kos
Pengoptimuman ini dapat meningkatkan kestabilan dan keuntungan strategi.
Strategi MA Regresi Linear mengintegrasikan kekuatan analisis trend dan regresi linear untuk mengenal pasti pembalikan yang berkesan dan membeli harga rendah yang tinggi. Strategi yang mudah sesuai untuk memilih saham dalam jangka masa sederhana hingga panjang. Dengan penyesuaian parameter dan kawalan risiko, strategi dapat mencapai kestabilan yang lebih tinggi. Ia menyediakan rangka kerja perdagangan teknikal yang berdaya maju untuk analisis pasaran.
/*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)