Berdasarkan strategi momentum relatif


Tarikh penciptaan: 2024-01-29 08:38:04 Akhirnya diubah suai: 2024-01-29 08:38:04
Salin: 0 Bilangan klik: 722
1
fokus pada
1617
Pengikut

Berdasarkan strategi momentum relatif

Gambaran keseluruhan

Strategi momentum relatif membandingkan pergerakan saham dan indeks untuk menilai kekuatan saham berbanding pasaran besar. Beli apabila pergerakan saham lebih tinggi daripada pasaran besar, dan jual apabila pergerakan saham lebih rendah daripada pasaran besar, untuk menangkap puncak pertumbuhan saham.

Prinsip Strategi

Strategi ini bertumpu kepada penilaian kekuatan dan kelemahan saham berbanding pasaran utama, dengan logik berikut:

  1. Mengira kadar pulangan saham dalam jangka masa tertentu sebagai momentum saham
  2. Indeks mengira kadar pulangan dalam tempoh yang sama sebagai dinamika indeks
  3. Pengolahan rata-rata bergerak untuk mengira pergerakan saham dan indeks
  4. Apabila pergerakan purata indeks bergerak pada purata bergerak jumlah saham, menganggap pergerakan saham individu lebih kuat daripada keseluruhan indeks, menjadi isyarat beli
  5. Apabila pergerakan saham di bawah purata pergerakan purata pergerakan indeks, menganggap pergerakan saham individu lebih lemah daripada keseluruhan indeks, menjadi isyarat menjual

Dengan logik seperti itu, kita boleh membeli saham pada masa pertumbuhan yang tinggi dan menjual pada masa yang tepat apabila momentum pertumbuhannya menurun, mengunci keuntungan tambahan pada masa puncak pertumbuhannya.

Analisis kelebihan

Strategi momentum relatif mempunyai kelebihan utama:

  1. Anda boleh membeli saham yang tumbuh lebih cepat daripada pasaran yang lebih besar, tanpa mengambil kira keadaan sebenar.
  2. Pemprosesan purata bergerak untuk menyaring gangguan turun naik jangka pendek dan meningkatkan kebolehpercayaan isyarat
  3. Syarat beli dan jual yang mudah dan mudah difahami
  4. Parameter masa yang boleh ditetapkan secara bebas untuk mengira momentum relatif, strategi pengoptimuman

Analisis risiko

Strategi dinamika relatif juga mempunyai risiko:

  1. Kemungkinan penyesuaian penyesuaian selepas kemuncak pertumbuhan saham individu, risiko kekurangan penghalang
  2. Indeks Relatif Dinamika mungkin memberi isyarat yang salah, puncak pertumbuhan yang dikenal pasti bukan puncak sebenar
  3. Tetapkan Stop Loss untuk mengawal kerugian maksimum

Risiko-risiko ini boleh dikawal dengan cara-cara seperti stop loss yang munasabah, parameter yang diselaraskan dengan betul.

Arah pengoptimuman

Strategi dinamika relatif boleh dioptimumkan dalam beberapa aspek:

  1. Uji parameter masa yang berbeza untuk mencari parameter terbaik
  2. Uji rata-rata bergerak pelbagai jenis dan panjang untuk mencari parameter yang optimum
  3. Menambah penapis untuk penunjuk kuantiti untuk mengelakkan penembusan palsu yang kurang
  4. Pengesahan masa pembelian bersama-sama dengan petunjuk teknikal lain

ringkaskan

Strategi dinamika relatif dapat memperoleh keuntungan tambahan dengan menangkap puncak pertumbuhan saham yang relatif besar. Strategi ini mempunyai kelebihan logik jual beli yang mudah dan jelas, mudah dikendalikan, dan dapat mencapai hasil yang lebih baik melalui pengoptimuman parameter dan kawalan risiko.

Kod sumber strategi
/*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)