Strategi Breakout Indikator Momentum Ganda


Tanggal Pembuatan: 2023-11-16 17:00:54 Akhirnya memodifikasi: 2023-12-01 14:59:44
menyalin: 1 Jumlah klik: 648
1
fokus pada
1617
Pengikut

Strategi Breakout Indikator Momentum Ganda

Ringkasan

Strategi ini adalah strategi penembusan indikator dinamis ganda. Strategi ini menggunakan indikator dinamis dengan dua pengaturan parameter yang berbeda untuk menghasilkan sinyal perdagangan ketika kedua indikator dinamis menembus sumbu nol. Strategi ini hanya melakukan entri multihead, dan kepala kosong hanya digunakan untuk posisi kosong.

Prinsip Strategi

Kode pertama mengatur atribut kebijakan, seperti mode delegasi, mode biaya, dan lain-lain. Kemudian ia menghitung dua indikator dinamis:

// 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, panjangnya adalah i_len, sumber datanya adalah i_src, apakah menghitung persentase ditentukan oleh i_percent.

mom1 adalah indikator momentum dengan mom0 sebagai sumber data dan panjangnya adalah 1.

mom2 adalah indikator momentum dengan panjang 1 dari data i_src asli.

Indikator momentum yang digunakan akhirnya adalah momX. Secara default, mom1 digunakan, dan mom2 dapat dipilih.

Bila mom0 dan momX berada di atas 0 maka melakukan over; bila mom0 dan momX berada di bawah 0 maka melakukan flat position.

Keunggulan Strategis

  1. Penggunaan indikator volume ganda yang dikombinasikan dengan pengaturan parameter yang berbeda dapat meningkatkan keandalan sinyal perdagangan, dan double confirmation mengurangi sinyal palsu.

  2. Hanya melakukan entry multihead, head kosong hanya digunakan untuk posisi kosong, dapat mengurangi frekuensi transaksi, mengurangi biaya transaksi.

  3. Parameter indikator momentum dapat disesuaikan dengan kondisi pasar yang berbeda.

  4. Struktur kodenya jelas, mudah dipahami dan dimodifikasi.

  5. Setelan pesan transaksi ditambahkan, yang dapat digunakan dengan sistem perdagangan otomatis.

Risiko Strategis

  1. Indikator kuantitas ganda dapat mengurangi sinyal palsu, tetapi juga dapat melewatkan sinyal tren yang lebih lemah.

  2. Jika Anda hanya melakukan perdagangan multihead, Anda mungkin kehilangan peluang perdagangan kosong.

  3. Penetapan parameter indikator momentum yang tidak tepat dapat menyebabkan transaksi yang terlalu sering atau terlalu lambat.

  4. Data yang tidak memadai dapat menyebabkan parameter yang terlalu cocok.

  5. Double Confirmation dapat mengurangi sinyal palsu, tetapi tidak dapat sepenuhnya dihindari.

Arah optimasi strategi

  1. Kombinasi parameter dengan panjang yang berbeda dapat diuji dan apakah peratusan dihitung untuk menemukan parameter terbaik.

  2. Anda dapat mempertimbangkan untuk menambahkan sinyal perdagangan kosong setelah tren dikonfirmasi untuk menangkap lebih banyak peluang perdagangan.

  3. Anda dapat menguji berbagai metode penghitungan indikator momentum, seperti ROC, RSI, dan lain-lain, untuk mendapatkan hasil yang lebih baik.

  4. Anda dapat mengintegrasikan filter tren untuk menghindari perdagangan di tengah kondisi yang bergejolak.

  5. Anda dapat mengoptimalkan strategi stop loss dan mengontrol risiko sambil memaksimalkan keuntungan.

Meringkaskan

Strategi ini adalah strategi penembusan indikator dinamis ganda yang khas. Ini menggunakan konfirmasi ganda untuk mengurangi sinyal palsu dan hanya melakukan entri multihead untuk mengurangi frekuensi perdagangan. Keuntungan dari strategi ini adalah sederhana, mudah diterapkan, dan ada banyak ruang untuk perbaikan dalam pengoptimalan parameter dan pengendalian risiko. Secara keseluruhan, strategi ini dapat digunakan sebagai kerangka dasar untuk strategi penembusan dinamis, tetapi perlu dilakukan penyesuaian yang dioptimalkan untuk pasar tertentu agar dapat menghasilkan keuntungan yang stabil di pasar nyata.

Kode Sumber Strategi
/*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")