Strategi Dagangan Purata Bergerak Regresi Linear

Penulis:ChaoZhang, Tarikh: 2023-10-25 10:58:02
Tag:

img

Ringkasan

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.

Logika Strategi

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:

  1. Mengira garis regresi linier harga hari-hari

  2. Mengira purata mudah bergerak hari-m dari lrLine dipanggil lrMA

  3. Mengira purata bergerak eksponensial harga m-hari yang dipanggil ema

  4. Apabila EMA melintasi di atas lrMA, menjana isyarat beli panjang

  5. Apabila EMA melintasi di bawah lrMA, menjana isyarat jual panjangExit

  6. Hanya mempertimbangkan isyarat beli apabila pasaran naik

  7. 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.

Kelebihan

  • Menggabungkan analisis trend dan regresi untuk pengenalan isyarat yang tepat
  • Garis regresi adalah mudah untuk mengira dan melaksanakan
  • Menggunakan penapisan pasaran untuk mengelakkan perdagangan yang tidak baik
  • Parameter yang boleh disesuaikan untuk menyesuaikan strategi
  • Mencapai membeli rendah dan menjual tinggi untuk keuntungan

Risiko

  • Perpindahan yang kerap semasa turun naik boleh menghasilkan isyarat palsu
  • Penapis pasaran yang tidak tepat membawa kepada kemasukan yang salah
  • Penyesuaian parameter yang buruk memberi kesan kepada prestasi strategi
  • Frekuensi perdagangan yang tinggi membawa kepada kos yang lebih 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.

Peningkatan

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Pengoptimuman purata bergerak dengan menguji pelbagai jenis MA

  2. Pengoptimuman garis regresi dengan menyesuaikan tempoh pengiraan

  3. Pengoptimuman penapis pasaran dengan menguji penunjuk yang berbeza

  4. Pengoptimuman parameter melalui pengujian belakang yang ketat

  5. Peningkatan Stop Loss dengan menguji logik Stop Loss yang berbeza

  6. Pengoptimuman kos dengan menyesuaikan kekerapan perdagangan berdasarkan kos

Pengoptimuman ini dapat meningkatkan kestabilan dan keuntungan strategi.

Kesimpulan

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)


Lebih lanjut