Strategi momentum relatif

Penulis:ChaoZhang, Tarikh: 2024-01-29 08:38:04
Tag:

img

Ringkasan

Strategi momentum relatif membandingkan momentum saham individu dan indeks untuk menilai kekuatan relatif saham ke pasaran yang lebih luas. Ia membeli apabila momentum saham lebih tinggi daripada indeks, dan menjual apabila momentum saham lebih rendah daripada indeks, untuk menangkap puncak pertumbuhan saham individu.

Prinsip-prinsip

Logik teras strategi ini adalah untuk menilai kekuatan relatif saham individu berbanding pasaran, khususnya:

  1. Mengira pulangan dalam tempoh masa sebagai momentum stok
  2. Mengira pulangan indeks dalam tempoh yang sama dengan momentum indeks
  3. Gunakan purata bergerak untuk meluruskan momentum saham dan indeks
  4. Apabila purata bergerak momentum saham melintasi di atas indeks, momentum saham dianggap lebih kuat daripada pasaran secara keseluruhan - iaitu isyarat beli
  5. Apabila purata bergerak momentum saham melintasi di bawah purata bergerak momentum indeks, momentum saham dianggap lebih lemah, mencetuskan isyarat jual

Melalui logik ini, kita boleh membeli saham apabila pertumbuhan mereka berkembang dan menjual apabila momentum pertumbuhan memudar, mengunci pulangan yang berlebihan semasa tempoh puncak pertumbuhan saham.

Analisis Kelebihan

Kelebihan utama strategi momentum relatif:

  1. Boleh secara dinamik menangkap puncak pertumbuhan stok tanpa mengambil kira keadaan pasaran tertentu - hanya membeli apabila pertumbuhan stok melebihi pasaran keseluruhan
  2. Penghapusan dengan purata bergerak menapis turun naik jangka pendek dan meningkatkan kebolehpercayaan isyarat
  3. Syarat beli dan jual langsung yang mudah difahami dan digunakan
  4. Fleksibiliti untuk mengkonfigurasi tempoh masa untuk mengira momentum relatif dan mengoptimumkan

Analisis Risiko

Terdapat juga beberapa risiko dengan strategi momentum relatif:

  1. Saham boleh menarik diri selepas puncak pertumbuhan berakhir, menimbulkan risiko keuntungan yang tidak mencukupi
  2. Isyarat momentum relatif boleh menjadi palsu, mengenal pasti palsu dan bukannya puncak sebenar
  3. Perlu menetapkan stop loss untuk mengawal kerugian maksimum

Risiko ini boleh diuruskan dengan mengambil keuntungan yang munasabah, menghentikan kerugian, penyesuaian parameter dan lain-lain.

Arahan pengoptimuman

Strategi momentum relatif boleh dioptimumkan terutamanya dari aspek berikut:

  1. Uji tempoh masa yang berbeza untuk mempertimbangkan momentum untuk mencari optimum
  2. Cuba pelbagai jenis dan panjang purata bergerak untuk parameter terbaik
  3. Tambah penapis kelantangan untuk mengelakkan pecah palsu kerana kekurangan momentum
  4. Masukkan penunjuk lain untuk mengesahkan masa kemasukan yang optimum

Kesimpulan

Strategi momentum relatif menangkap fasa pertumbuhan berlebihan saham individu berbanding pasaran keseluruhan untuk menjana alpha. Dengan logik beli / jual yang mudah dan mudah digunakan, dan apabila digabungkan dengan pengoptimuman parameter dan kawalan risiko, strategi ini dapat berfungsi dengan sangat baik.


/*backtest
start: 2024-01-21 00:00:00
end: 2024-01-28 00:00:00
period: 15m
basePeriod: 5m
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/
// © HeWhoMustNotBeNamed

//@version=4
strategy("Relative Returns Strategy", overlay=false, initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, commission_type = strategy.commission.percent, pyramiding = 1, commission_value = 0.01, calc_on_order_fills = true)

index_ticker=input("BTC_USDT:swap")
Loopback = input(40, step=20)
useStopAndIndexReturns = input(true)
useStopAndIndexReturnsMa = input(true)

useDifference = not useStopAndIndexReturns

MAType = input(title="Moving Average Type", defval="sma", options=["ema", "sma", "hma", "rma", "vwma", "wma"])
MALength = input(10, minval=10,step=10)

i_startTime = input(defval = timestamp("01 Jan 2010 00:00 +0000"), title = "Backtest Start Time", type = input.time)
i_endTime = input(defval = timestamp("01 Jan 2099 00:00 +0000"), title = "Backtest End Time", type = input.time)
inDateRange = true

f_secureSecurity(_symbol, _res, _src, _offset) => security(_symbol, _res, _src[_offset], lookahead = barmerge.lookahead_on)
f_getMovingAverage(source, MAType, length)=>
    ma = sma(source, length)
    if(MAType == "ema")
        ma := ema(source,length)
    if(MAType == "hma")
        ma := hma(source,length)
    if(MAType == "rma")
        ma := rma(source,length)
    if(MAType == "vwma")
        ma := vwma(source,length)
    if(MAType == "wma")
        ma := wma(source,length)
    ma

index = f_secureSecurity(index_ticker, '1D', close, 0)
stock_return = (close - close[Loopback])*100/close
index_return = (index - index[Loopback])*100/index

stock_return_ma = f_getMovingAverage(stock_return, MAType, MALength)
index_return_ma = f_getMovingAverage(index_return, MAType, MALength)
relativeReturns = stock_return - index_return
relativeReturns_ma = f_getMovingAverage(relativeReturns, MAType, MALength)

plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma : stock_return : na, title="StockReturn", color=color.green, linewidth=1)
plot(useStopAndIndexReturns ? useStopAndIndexReturnsMa ? index_return_ma : index_return : na, title="IndexReturn", color=color.red, linewidth=1)

plot(useDifference?relativeReturns:na, title="Relative-Returns", color=color.blue, linewidth=1)
plot(useDifference?relativeReturns_ma:na, title="MA", color=color.red, linewidth=1)

buyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma > index_return_ma : stock_return > index_return : relativeReturns > relativeReturns_ma)
closeBuyCondition = (useStopAndIndexReturns ? useStopAndIndexReturnsMa ? stock_return_ma < index_return_ma : stock_return < index_return : relativeReturns < relativeReturns_ma)
strategy.entry("Buy", strategy.long, when=buyCondition and inDateRange, oca_name="oca")
strategy.close("Buy", when=closeBuyCondition)

Lebih lanjut