Dual Momentum Breakout Strategi

Penulis:ChaoZhang, Tarikh: 2023-11-16 17:00:54
Tag:

img

Ringkasan

Ini adalah strategi pecah momentum berganda. Ia menggunakan dua penunjuk momentum dengan tetapan parameter yang berbeza dan menghasilkan isyarat perdagangan apabila kedua-dua penunjuk momentum memecahkan garis sifar. Strategi ini hanya mengambil entri panjang dan pendek hanya digunakan untuk keluar kedudukan.

Logika Strategi

Kod pertama menetapkan sifat strategi seperti jenis pesanan, skim komisen dan sebagainya Kemudian ia mengira dua penunjuk momentum:

// Momentum settings
****
i_len           = input(defval = 12, title = "Length", minval = 1)
i_src           = input(defval = close, title = "Source")  
i_percent       = input(defval = true, title = "Percent?")
i_mom           = input(defval = "MOM2", title = "MOM Choice", options = ["MOM1", "MOM2"])

// Momentum code 

mom0 = momentum(i_src, i_len, i_percent)
mom1 = momentum(mom0, 1, i_percent) 
mom2 = momentum(i_src, 1, i_percent)

momX = mom1   

if i_mom == "MOM2"
    momX := mom2

mom0 adalah penunjuk momentum asas dengan panjang i_len, sumber data i_src, sama ada untuk mengira peratusan diputuskan oleh i_peratusan.

mom1 adalah penunjuk momentum dengan mom0 sebagai sumber data dan panjang 1.

mom2 adalah penunjuk momentum dengan data asal i_src sebagai sumber dan panjang 1.

Indikator momentum akhir momX lalai kepada mom1, juga boleh memilih mom2.

Apabila ibu0 dan ibuX kedua-duanya melanggar di atas garis 0, pergi panjang.

Kelebihan Strategi

  1. Menggunakan penunjuk momentum berganda dengan tetapan yang berbeza meningkatkan kebolehpercayaan isyarat dengan pengesahan berganda dan lebih sedikit isyarat palsu.

  2. Hanya mengambil entri panjang dan menggunakan pendek untuk keluar mengurangkan kekerapan perdagangan dan mengurangkan kos transaksi.

  3. Penyesuaian parameter momentum yang fleksibel sesuai dengan persekitaran pasaran yang berbeza.

  4. Struktur kod yang bersih, mudah difahami dan diubah suai.

  5. Mesej perdagangan diaktifkan, mengintegrasikan dengan baik dengan sistem perdagangan automatik.

Risiko Strategi

  1. Momentum berganda mungkin terlepas isyarat trend yang lebih lemah sambil mengurangkan isyarat palsu.

  2. Melewatkan peluang perdagangan pendek dengan hanya entri panjang.

  3. Tetapan parameter momentum yang tidak betul membawa kepada perdagangan berlebihan atau isyarat tertunda.

  4. Data backtest yang tidak mencukupi menyebabkan parameter overfit.

  5. Pengesahan berganda mengurangkan tetapi tidak menghapuskan isyarat palsu, perlu melihat keabsahan dalam perdagangan langsung.

Arahan pengoptimuman

  1. Uji kombinasi parameter panjang dan peratusan untuk mencari yang optimum.

  2. Pertimbangkan untuk menambah isyarat perdagangan pendek selepas pengesahan trend untuk menangkap lebih banyak perdagangan.

  3. Uji pengiraan momentum yang berbeza seperti ROC, RSI dan lain-lain untuk hasil yang lebih baik.

  4. Tambah penapisan trend untuk mengelakkan pasaran whipsaw.

  5. Mengoptimumkan stop loss untuk keuntungan maksimum dalam had risiko.

Kesimpulan

Ini adalah strategi pecah momentum berganda yang biasa. Ia menggunakan pengesahan berganda untuk mengurangkan isyarat palsu dan hanya entri panjang untuk mengurangkan kekerapan perdagangan. Kelebihannya adalah kesederhanaan dan kemudahan pelaksanaan, dengan banyak ruang untuk penambahbaikan dalam pengoptimuman parameter dan kawalan risiko. Secara keseluruhan ia berfungsi sebagai rangka kerja pecah momentum yang munasabah tetapi memerlukan penyesuaian dan pengoptimuman khusus pasaran untuk perdagangan langsung yang menguntungkan.


/*backtest
start: 2023-10-16 00:00:00
end: 2023-11-15 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Momentum Long Strategy", overlay = false, precision = 2, initial_capital = 10000, default_qty_value = 10000, default_qty_type = strategy.cash, commission_type = strategy.commission.percent, commission_value = 0, calc_on_every_tick = true)

// There will be no short entries, only exits from long.
strategy.risk.allow_entry_in(strategy.direction.long)

// Calculate start/end date and time condition
startDate  = input(timestamp("2021-01-02T00:00:00"), title = "Start Date", type = input.time)
finishDate = input(timestamp("2021-12-31T00:00:00"), title = "End Date",type = input.time)
 
time_cond  =true

// Momentum settings

i_len           =       input(defval = 12,      title = "Length",       minval = 1)
i_src           =       input(defval = close,   title = "Source")
i_percent       =       input(defval = true,    title = "Percent?")
i_mom           =       input(defval = "MOM2",  title = "MOM Choice",   options = ["MOM1", "MOM2"])

// Messages for buy and sell
message_buy  = input("{{strategy.order.alert_message}}", title="Buy message")
message_sell = input("{{strategy.order.alert_message}}", title="Sell message")

// Momentum code

momentum(seria, length, percent) =>
	_mom        =       percent ? ( (seria / seria[length]) - 1) * 100 : seria - seria[length]
	_mom

mom0        =       momentum(i_src, i_len, i_percent)
mom1        =       momentum(mom0, 1, i_percent)
mom2        =       momentum(i_src, 1, i_percent)

momX        =       mom1

if i_mom == "MOM2"
    momX    :=     mom2
    
// Strategy Alerts    

if (mom0 > 0 and momX > 0 and time_cond)
    strategy.entry("MomLE", strategy.long, stop = high + syminfo.mintick, comment = "MomLE", alert_message = message_buy)
else
	strategy.cancel("MomLE")
if (mom0 < 0 and momX < 0 and time_cond)
	strategy.entry("MomExit", strategy.short, stop = low - syminfo.mintick, comment = "MomSE", alert_message = message_sell)
else
	strategy.cancel("MomExit")
	
// Plotting

plot(0, color = #5d606b, title = "ZERO")
plot(mom0, color = #00bcd4, title = "MOM")
plot(mom1, color = #00FF00, title = "MOM1", display = display.none)
plot(mom2, color = #00FF00, title = "MOM2")

Lebih lanjut