Strategi momentum berdasarkan purata bergerak


Tarikh penciptaan: 2024-01-23 10:38:18 Akhirnya diubah suai: 2024-01-23 10:38:18
Salin: 0 Bilangan klik: 519
1
fokus pada
1617
Pengikut

Strategi momentum berdasarkan purata bergerak

Gambaran keseluruhan

Strategi ini adalah strategi kuantitatif berdasarkan purata bergerak. Ia menghasilkan isyarat dagangan dengan mengira purata bergerak sederhana dari pelbagai tempoh dan membandingkan keadaan silang mereka. Khususnya, ia menghasilkan isyarat beli apabila rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang; ia menghasilkan isyarat jual apabila rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang.

Prinsip Strategi

Logik teras strategi ini adalah berdasarkan kesan kuantiti bergerak, iaitu kesinambungan trend harga saham. Rata-rata bergerak dapat mencerminkan trend perubahan harga saham dengan berkesan. Apabila rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang, harga saham mula memasuki trend naik; sebaliknya, apabila rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang, harga saham mula memasuki trend menurun.

Khususnya, strategi ini mendefinisikan purata bergerak sederhana 13 hari dan purata bergerak sederhana 34 hari. Setelah menghitung kedua-dua purata bergerak setiap hari pada harga penutupan, bandingkan nilai mereka dengan hubungan besar. Jika 13 hari melintasi 34 hari, ia akan menghasilkan isyarat beli yang menunjukkan bahawa harga saham memasuki trend naik, dan anda harus membina kedudukan berbilang kepala; jika 13 hari melintasi 34 hari, ia akan menghasilkan isyarat jual yang menunjukkan bahawa harga saham memasuki trend menurun, dan anda harus menjual.

Kelebihan Strategik

Kelebihan terbesar strategi ini adalah mudah difahami dan mudah dilaksanakan. Rata-rata bergerak adalah salah satu petunjuk teknikal yang paling asas dan paling biasa digunakan, prinsipnya mudah dan mudah difahami dan diterapkan.

Di samping itu, parameter strategi ini boleh disesuaikan mengikut varieti dan keadaan pasaran. Sebagai contoh, parameter kitaran rata-rata bergerak boleh diubah untuk menyesuaikan kepekaan strategi. Ini memberikan ruang untuk pengoptimuman dan penyesuaian strategi.

Analisis risiko

Risiko terbesar dalam strategi ini adalah kemungkinan terdapat lebih banyak isyarat salah dan diletakkan di pasaran yang bergolak. Apabila harga mengalami golak yang besar, purata bergerak mungkin menghasilkan persilangan yang kerap, yang menyebabkan munculnya isyarat salah. Pada masa ini perlu menyesuaikan parameter kitaran purata bergerak untuk menyaring beberapa bunyi.

Di samping itu, apabila terdapat perubahan besar dalam pasaran, titik-titik penangguhan strategi mungkin akan ditembusi, menyebabkan kerugian yang lebih besar. Ini memerlukan pengoptimuman strategi penangguhan kerugian, dan kelonggaran yang sesuai untuk menghentikan kerugian.

Arah pengoptimuman

Strategi ini boleh dioptimumkan dalam beberapa aspek:

  1. Mengoptimumkan parameter kitaran rata-rata bergerak untuk mencari kombinasi optimum parameter dalam pelbagai jenis dan keadaan pasaran

  2. Menambah penapis untuk petunjuk teknikal lain seperti MACD, KD dan lain-lain untuk mengelakkan isyarat salah dalam keadaan gegaran

  3. Mengoptimumkan dan secara dinamik menyesuaikan strategi hentikan kerugian, sambil memastikan hentikan kerugian, mengelakkan titik hentikan kerugian terlalu dekat, kemungkinan besar akan ditembusi

  4. Menambah mekanisme pengurusan kedudukan, seperti jumlah tetap yang dimasukkan, peratusan kedudukan dan sebagainya, untuk mengawal risiko perdagangan tunggal

ringkaskan

Strategi ini adalah strategi persilangan rata-rata bergerak yang sangat klasik, menghasilkan isyarat beli dan jual dengan mengira dan membandingkan hubungan rata-rata bergerak jangka pendek dan jangka panjang. Kelebihan strategi ini adalah mudah difahami, parameternya fleksibel, sesuai untuk pelajar pemula; Kelemahannya adalah isyarat mungkin tidak cukup stabil, mudah ditarik dalam pasaran yang bergolak. Dengan pengoptimuman yang sesuai, ia masih boleh menjadi strategi kuantitatif yang sangat praktikal.

Kod sumber strategi
/*backtest
start: 2023-01-16 00:00:00
end: 2024-01-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
// TODO: update strategy name
strategy("{STRATEGY NAME}", overlay=true)

// === TA LOGIC ===

//
//
// TODO: PUT YOUR TA LOGIC HERE
LONG_SIGNAL_BOOLEAN = crossover(sma(close, 13), sma(close, 34))
SHORT_SIGNAL_BOOLEAN = crossunder(sma(close, 12), sma(close, 21))

// === INPUT BACKTEST DATE RANGE ===
enableShorts = input(false, title="Enable short entries?")

FromMonth = input(defval = 5, title = "From Month", minval = 1, maxval = 12)
FromDay   = input(defval = 18, title = "From Day", minval = 1, maxval = 31)
FromYear  = input(defval = 2018, title = "From Year", minval = 2017)
ToMonth   = input(defval = 9, title = "To Month", minval = 1, maxval = 12)
ToDay     = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear    = input(defval = 2018, title = "To Year", minval = 2017)

start     = timestamp(FromYear, FromMonth, FromDay, 00, 00)  // backtest start window
finish    = timestamp(ToYear, ToMonth, ToDay, 23, 59)        // backtest finish window
window()  => true // create function "within window of time"

// === STRATEGY BUY / SELL ENTRIES ===

// TODO: update the placeholder LONG_SIGNAL_BOOLEAN and SHORT_SIGNAL_BOOLEAN to signal
// long and short entries
buy() => window() and LONG_SIGNAL_BOOLEAN
sell() => window() and SHORT_SIGNAL_BOOLEAN

if buy()
    strategy.entry("Long", strategy.long, comment="Long")

if sell()
    if (enableShorts)
        strategy.entry("Short", strategy.short, comment="Short")
    else
        strategy.close("Long")

// === BACKTESTING: EXIT strategy ===
sl_inp = input(10, title='Stop Loss %', type=float)/100
tp_inp = input(30, title='Take Profit %', type=float)/100

stop_level = strategy.position_avg_price * (1 - sl_inp)
take_level = strategy.position_avg_price * (1 + tp_inp)

strategy.exit("Stop Loss/Profit", "Long", stop=stop_level, limit=take_level)