
Strategi perdagangan regresi rata-rata dengan mengira garis regresi linear dan persilangan garis rata-rata harga saham untuk membuat keputusan membeli dan menjual isyarat. Strategi ini menggabungkan analisis regresi rata-rata dan linear, mempertimbangkan trend harga saham, dan mempertimbangkan ciri-ciri statistik, yang dapat menentukan titik balik harga saham dengan berkesan, untuk mencapai pembelian rendah dan penjualan tinggi.
Strategi ini mula-mula mengira garis pengembalian linear harga saham pada hari n dan garis purata harian m. Garis pengembalian linear mencerminkan trend statistik jangka panjang harga saham, dan garis purata mencerminkan pergerakan jangka pendek harga saham.
Apabila pada garis purata melalui garis pengembalian linear, menunjukkan peningkatan momentum kenaikan harga saham, menghasilkan isyarat membeli. Apabila di bawah garis purata melalui garis pengembalian linear, menunjukkan kekurangan harga saham, menghasilkan isyarat menjual.
Secara khusus, strategi ini menilai isyarat dagangan melalui langkah-langkah berikut:
Hitung n hari harga saham linear regression linelrLine
Mengira purata bergerak mudah m hari LRMA pada garis regresi linear
Indeks m-hari untuk mengira purata bergerak harga saham
Apabila ema memakai LRMA, ia menghasilkan isyarat longEntry untuk membeli
Apabila EMM melewati LRMA, ia menghasilkan isyarat longExit.
Dalam pada itu, jika anda menggunakan penilaian pasaran besar, anda hanya boleh mempertimbangkan isyarat beli apabila pasaran besar adalah pasaran lembu.
Melakukan transaksi beli dan jual berdasarkan isyarat
Dengan menentukan masa beli dan jual beli melalui persilangan garis rata-rata dan garis regresi, penyaringan palsu dan menangkap titik-titik reversal dapat dilakukan dengan berkesan, untuk mencapai harga rendah dan harga tinggi.
Penyesuaian parameter yang perlu diperhatikan, parameter kitaran garis purata dan garis regresi yang meningkat dengan sewajarnya, mengurangkan frekuensi perdagangan. Tetapan strategi kawalan risiko berhenti yang munasabah.
Strategi ini boleh dioptimumkan dalam beberapa aspek:
Pengoptimuman rata-rata: cuba pelbagai jenis rata-rata, seperti purata bergerak bertimbangan, dan lain-lain, untuk mencari rata-rata terbaik untuk saham tersebut.
Pengoptimuman garis regresi: menyesuaikan kitaran pengiraan garis regresi untuk mencari parameter kitaran yang paling mencerminkan trend jangka panjang saham tersebut.
Optimasi keputusan besar: Uji indikator keputusan besar yang berbeza untuk mencari isyarat besar yang paling sesuai untuk strategi.
Pengoptimuman parameter: mencari konfigurasi parameter yang optimum melalui pengulangan berulang kombinasi parameter yang berbeza.
Pengoptimuman strategi hentian kerugian: Uji cara hentian yang berbeza, menetapkan logik hentian kerugian yang terbaik untuk mengawal risiko.
Pengoptimuman kos urus niaga: Sesuaikan frekuensi urus niaga untuk mengurangkan kos urus niaga mengikut corak yuran urus niaga yang berbeza.
Dengan mengoptimumkan beberapa perkara di atas, anda dapat meningkatkan lagi kestabilan dan kadar pulangan strategi anda.
Strategi perdagangan kemerosotan ini mengintegrasikan analisis kemerosotan dan analisis kemerosotan linier, dapat mengenal pasti titik-titik perubahan harga saham dengan berkesan, membimbing pembelian rendah dan penjualan tinggi. Strategi ini lebih mudah dan dipercayai, sesuai untuk perdagangan saham pilihan panjang dan menengah.
/*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)