Ini adalah strategi breakout momentum ganda. Ini menggunakan dua indikator momentum dengan pengaturan parameter yang berbeda dan menghasilkan sinyal perdagangan ketika kedua indikator momentum menerobos garis nol. Strategi ini hanya mengambil entri panjang dan pendek hanya digunakan untuk keluar posisi.
Kode pertama menetapkan sifat strategi seperti jenis pesanan, skema komisi dll. Kemudian menghitung dua indikator 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 indikator momentum dasar dengan panjang i_len, sumber data i_src, apakah menghitung persentase diputuskan oleh i_percent.
mom1 adalah indikator momentum dengan mom0 sebagai sumber data dan panjang 1.
mom2 adalah indikator momentum dengan data asli i_src sebagai sumber dan panjang 1.
Indikator momentum akhir momX default untuk mom1, juga dapat memilih mom2.
Ketika mom0 dan momX keduanya melanggar di atas garis 0, pergi panjang.
Menggunakan indikator momentum ganda dengan pengaturan yang berbeda meningkatkan keandalan sinyal dengan konfirmasi ganda dan lebih sedikit sinyal palsu.
Hanya mengambil entri panjang dan menggunakan pendek untuk keluar mengurangi frekuensi perdagangan dan mengurangi biaya transaksi.
Penyesuaian parameter momentum yang fleksibel sesuai dengan lingkungan pasar yang berbeda.
Struktur kode yang bersih, mudah dipahami dan dimodifikasi.
Pesan perdagangan diaktifkan, terintegrasi dengan baik dengan sistem perdagangan otomatis.
Dual momentum dapat melewatkan sinyal tren yang lebih lemah sambil mengurangi sinyal palsu.
Melewatkan peluang perdagangan pendek dengan hanya entri panjang.
Pengaturan parameter momentum yang tidak benar menyebabkan over-trading atau sinyal tertunda.
Data backtest yang tidak cukup menyebabkan parameter overfit.
Konfirmasi ganda mengurangi tetapi tidak menghilangkan sinyal palsu, perlu untuk menonton validitas dalam perdagangan langsung.
Uji kombinasi panjang dan persentase parameter untuk menemukan optimal.
Pertimbangkan untuk menambahkan sinyal perdagangan pendek setelah konfirmasi tren untuk menangkap lebih banyak perdagangan.
Uji perhitungan momentum yang berbeda seperti ROC, RSI dll untuk hasil yang lebih baik.
Tambahkan filter tren untuk menghindari pasar whipsaw.
Mengoptimalkan stop loss untuk keuntungan maksimum dalam batas risiko.
Ini adalah strategi breakout momentum ganda yang khas. Ini menggunakan konfirmasi ganda untuk mengurangi sinyal palsu dan hanya entri panjang untuk mengurangi frekuensi perdagangan. Keuntungannya adalah kesederhanaan dan kemudahan implementasi, dengan banyak ruang untuk perbaikan dalam optimasi parameter dan pengendalian risiko. Secara keseluruhan, ini berfungsi sebagai kerangka momentum breakout yang wajar tetapi membutuhkan penyesuaian dan optimalisasi khusus pasar 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")