Strategi perdagangan rata-rata bergerak regresi linier

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

img

Gambaran umum

Strategi perdagangan rata-rata bergerak regresi linier menghasilkan sinyal beli dan jual berdasarkan persilangan antara garis regresi linier dan rata-rata bergerak harga saham.

Logika Strategi

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:

  1. Menghitung garis regresi linier harga n hari lrLine

  2. Hitung rata-rata bergerak sederhana m-hari dari lrLine yang disebut lrMA

  3. Menghitung m-hari eksponensial bergerak rata-rata harga yang disebut ema

  4. Ketika EMA melintasi di atas lrMA, menghasilkan sinyal beli longEntry

  5. Ketika EMA melintasi di bawah lrMA, menghasilkan sinyal jual longExit

  6. Hanya mempertimbangkan sinyal beli ketika pasar bullish

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

Keuntungan

  • Menggabungkan analisis tren dan regresi untuk identifikasi sinyal yang akurat
  • Garis regresi mudah dihitung dan diterapkan
  • Menggunakan penyaringan pasar untuk menghindari perdagangan yang tidak menguntungkan
  • Parameter yang dapat disesuaikan untuk menyesuaikan strategi
  • Mencapai membeli rendah dan menjual tinggi untuk keuntungan

Risiko

  • Crossover yang sering terjadi selama volatilitas dapat menghasilkan sinyal palsu
  • Filter pasar yang tidak akurat menyebabkan entri yang salah waktu
  • Penyesuaian parameter yang buruk mempengaruhi kinerja strategi
  • Frekuensi perdagangan yang tinggi mengarah pada biaya yang lebih 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.

Peningkatan

Strategi dapat dioptimalkan dalam beberapa aspek:

  1. Optimasi rata-rata bergerak dengan menguji berbagai jenis MA

  2. Optimasi garis regresi dengan menyesuaikan periode perhitungan

  3. Optimalisasi filter pasar dengan menguji indikator yang berbeda

  4. Optimasi parameter melalui backtesting yang ketat

  5. Optimasi stop loss dengan menguji logika stop loss yang berbeda

  6. Optimalisasi biaya dengan menyesuaikan frekuensi perdagangan berdasarkan biaya

Optimalisasi ini dapat meningkatkan stabilitas dan profitabilitas strategi.

Kesimpulan

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)


Lebih banyak