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.
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.
Menggunakan penunjuk momentum berganda dengan tetapan yang berbeza meningkatkan kebolehpercayaan isyarat dengan pengesahan berganda dan lebih sedikit isyarat palsu.
Hanya mengambil entri panjang dan menggunakan pendek untuk keluar mengurangkan kekerapan perdagangan dan mengurangkan kos transaksi.
Penyesuaian parameter momentum yang fleksibel sesuai dengan persekitaran pasaran yang berbeza.
Struktur kod yang bersih, mudah difahami dan diubah suai.
Mesej perdagangan diaktifkan, mengintegrasikan dengan baik dengan sistem perdagangan automatik.
Momentum berganda mungkin terlepas isyarat trend yang lebih lemah sambil mengurangkan isyarat palsu.
Melewatkan peluang perdagangan pendek dengan hanya entri panjang.
Tetapan parameter momentum yang tidak betul membawa kepada perdagangan berlebihan atau isyarat tertunda.
Data backtest yang tidak mencukupi menyebabkan parameter overfit.
Pengesahan berganda mengurangkan tetapi tidak menghapuskan isyarat palsu, perlu melihat keabsahan dalam perdagangan langsung.
Uji kombinasi parameter panjang dan peratusan untuk mencari yang optimum.
Pertimbangkan untuk menambah isyarat perdagangan pendek selepas pengesahan trend untuk menangkap lebih banyak perdagangan.
Uji pengiraan momentum yang berbeza seperti ROC, RSI dan lain-lain untuk hasil yang lebih baik.
Tambah penapisan trend untuk mengelakkan pasaran whipsaw.
Mengoptimumkan stop loss untuk keuntungan maksimum dalam had risiko.
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")