Strategi perdagangan rata-rata bergerak regresi linier menghasilkan sinyal beli dan jual berdasarkan persilangan antara garis regresi linier dan rata-rata bergerak harga saham.
Strategi ini pertama-tama menghitung garis regresi linier n-hari dan rata-rata bergerak m-hari dari harga saham.
Ketika rata-rata bergerak melintasi di atas garis regresi, itu menandakan penguatan momentum upside dan menghasilkan sinyal beli.
Secara khusus, strategi mengikuti langkah-langkah berikut untuk menentukan sinyal perdagangan:
Menghitung garis regresi linier harga n hari lrLine
Hitung rata-rata bergerak sederhana m-hari dari lrLine yang disebut lrMA
Menghitung m-hari eksponensial bergerak rata-rata harga yang disebut ema
Ketika EMA melintasi di atas lrMA, menghasilkan sinyal beli longEntry
Ketika EMA melintasi di bawah lrMA, menghasilkan sinyal jual longExit
Hanya mempertimbangkan sinyal beli ketika pasar bullish
Mengeksekusi perdagangan berdasarkan sinyal
Dengan menggunakan crossover antara regresi dan rata-rata bergerak untuk menentukan entri, strategi dapat secara efektif menyaring istirahat palsu dan mengidentifikasi pembalikan untuk membeli rendah dan menjual tinggi.
Parameter harus disesuaikan untuk meningkatkan periode rata-rata bergerak dan garis regresi dan mengurangi frekuensi perdagangan. Stop loss yang wajar harus diterapkan untuk mengendalikan risiko. Filter pasar dapat ditingkatkan untuk meningkatkan akurasi.
Strategi dapat dioptimalkan dalam beberapa aspek:
Optimasi rata-rata bergerak dengan menguji berbagai jenis MA
Optimasi garis regresi dengan menyesuaikan periode perhitungan
Optimalisasi filter pasar dengan menguji indikator yang berbeda
Optimasi parameter melalui backtesting yang ketat
Optimasi stop loss dengan menguji logika stop loss yang berbeda
Optimalisasi biaya dengan menyesuaikan frekuensi perdagangan berdasarkan biaya
Optimalisasi ini dapat meningkatkan stabilitas dan profitabilitas strategi.
Strategi Linear Regression MA mengintegrasikan kekuatan analisis tren dan regresi linier untuk identifikasi pembalikan yang efektif dan membeli harga rendah dengan harga tinggi. Strategi sederhana ini cocok untuk memilih saham dalam jangka menengah hingga panjang. Dengan penyesuaian parameter dan pengendalian risiko, strategi dapat mencapai stabilitas yang lebih tinggi. Ini menyediakan kerangka kerja perdagangan teknis yang layak untuk analisis pasar.
/*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)