Dual Momentum Breakout Strategi

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

img

Gambaran umum

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.

Logika Strategi

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.

Keuntungan dari Strategi

  1. Menggunakan indikator momentum ganda dengan pengaturan yang berbeda meningkatkan keandalan sinyal dengan konfirmasi ganda dan lebih sedikit sinyal palsu.

  2. Hanya mengambil entri panjang dan menggunakan pendek untuk keluar mengurangi frekuensi perdagangan dan mengurangi biaya transaksi.

  3. Penyesuaian parameter momentum yang fleksibel sesuai dengan lingkungan pasar yang berbeda.

  4. Struktur kode yang bersih, mudah dipahami dan dimodifikasi.

  5. Pesan perdagangan diaktifkan, terintegrasi dengan baik dengan sistem perdagangan otomatis.

Risiko dari Strategi

  1. Dual momentum dapat melewatkan sinyal tren yang lebih lemah sambil mengurangi sinyal palsu.

  2. Melewatkan peluang perdagangan pendek dengan hanya entri panjang.

  3. Pengaturan parameter momentum yang tidak benar menyebabkan over-trading atau sinyal tertunda.

  4. Data backtest yang tidak cukup menyebabkan parameter overfit.

  5. Konfirmasi ganda mengurangi tetapi tidak menghilangkan sinyal palsu, perlu untuk menonton validitas dalam perdagangan langsung.

Arahan Optimasi

  1. Uji kombinasi panjang dan persentase parameter untuk menemukan optimal.

  2. Pertimbangkan untuk menambahkan sinyal perdagangan pendek setelah konfirmasi tren untuk menangkap lebih banyak perdagangan.

  3. Uji perhitungan momentum yang berbeda seperti ROC, RSI dll untuk hasil yang lebih baik.

  4. Tambahkan filter tren untuk menghindari pasar whipsaw.

  5. Mengoptimalkan stop loss untuk keuntungan maksimum dalam batas risiko.

Kesimpulan

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")

Lebih banyak