
Strategi perdagangan dengan crossover rata-rata bergerak ganda adalah strategi perdagangan kuantitatif yang menggunakan crossover rata-rata dan crossover rata-rata untuk menilai masuk dan keluar. Strategi ini menggabungkan garis rata dari periode yang berbeda, membentuk filter berlapis, yang dapat secara efektif mengurangi sinyal palsu dan meningkatkan keandalan sinyal perdagangan.
Logika inti dari strategi ini adalah untuk melacak 2 rata-rata bergerak dalam 3 periode waktu (gambar: 180 menit, 60 menit, 120 menit) (gambar: 10 hari dan 200 hari). Ketika garis cepat melintasi garis lambat dari arah bawah, menghasilkan sinyal golden fork, yang berarti bahwa varietas masuk ke dalam gerakan multihead; ketika garis cepat melintasi garis lambat dari arah atas, menghasilkan sinyal dead fork, yang berarti bahwa varietas masuk ke dalam gerakan kosong.
Strategi pertama menghitung garis 10 hari dan garis 200 hari pada siklus 180 menit dan 60 menit. Ketika garis 10 hari 180 menit melintasi garis 200 hari dari arah bawah, menghasilkan sinyal Gold Fork; Ketika melintasi dari arah atas ke bawah, menghasilkan sinyal Dead Fork. Ini setara dengan sinyal perdagangan dengan siklus cepat.
Kemudian, strategi memperkenalkan garis 200 hari dalam siklus 120 menit sebagai garis kontrol. Hanya ketika garpu emas atau garpu mati terjadi, keputusan untuk memulai perdagangan dilakukan dengan menilai apakah garis 200 hari dalam siklus 60 menit lebih tinggi atau lebih rendah dari garis 200 hari dalam siklus 120 menit untuk menyingkirkan beberapa sinyal palsu.
Sebagai contoh, ketika 180 menit menghasilkan garpu emas, jika garis hari 200 60 menit lebih tinggi dari garis hari 200 120 menit, Anda akan melihat lebih banyak; hanya dalam kondisi ini, Anda akan membuka lebih banyak. Sebaliknya, jika garis hari 200 60 menit lebih rendah dari garis hari 200 120 menit, Anda tidak akan melihat lebih banyak dan tidak akan membuka posisi.
Singkatnya, strategi ini membentuk beberapa lapisan penyaringan dengan membandingkan hubungan rata-rata periode waktu yang berbeda, sehingga meningkatkan keandalan sinyal, dan merupakan strategi perdagangan berjenis filter yang umum.
Konfirmasi multi-siklus, meningkatkan akurasi sinyal. Dibandingkan dengan penilaian satu siklus, strategi ini menggunakan hubungan rata-rata tiga siklus 180 menit, 60 menit dan 120 menit untuk konfirmasi, yang dapat mengurangi sinyal palsu dan meningkatkan kualitas sinyal perdagangan.
Operasi frekuensi sedang. Strategi ini memiliki frekuensi perdagangan yang lebih rendah dibandingkan dengan strategi perdagangan frekuensi tinggi. Strategi ini tidak memerlukan operasi yang lebih sering dan lebih cocok untuk pengendalian manual.
Implementasi sederhana, mudah dipahami. Strategi ini hanya menggunakan indikator rata-rata, tidak ada logika yang rumit, sangat mudah untuk memahami implementasi, ambang batas rendah, cocok untuk pemula dan praktisi.
Periode rata-rata dan jenis dalam strategi ini dapat disesuaikan, dan kombinasi parameter yang sesuai dengan varietas dan lingkungan pasar dapat dipelajari.
Sistem linier terlambat dan tidak dapat menangkap pembalikan cepat tepat waktu. Strategi ini terutama bergantung pada hubungan linier, dan memiliki keterlambatan dalam menanggapi perubahan harga, mudah untuk melewatkan pembalikan cepat.
Ketika pasar bergejolak besar, hubungan rata-rata mungkin sering berpotongan, menyebabkan sering membuka posisi dan berhenti. Ini meningkatkan biaya transaksi dan risiko kerugian.
Terlalu bergantung pada optimasi parameter, mudah terlalu cocok. Strategi ini terutama melalui optimasi parameter untuk mendapatkan alpha, yang bergantung pada hasil dari satu set data dapat menyebabkan masalah optimasi berlebihan dan overmatching.
Solusi untuk menghadapi risiko adalah sebagai berikut:
Parameter garis rata-rata dipersingkat dengan tepat untuk mempercepat reaksi.
Meningkatkan kondisi penyaringan untuk menghindari seringnya membuka posisi di pasar yang bergejolak.
Uji data dari berbagai varietas dan periode waktu untuk menilai parameter stabilitas.
Strategi ini masih bisa dioptimalkan lebih jauh:
Cobalah kombinasi siklus yang berbeda dan parameter rata-rata untuk mencari parameter yang lebih baik. Kombinasi parameter yang lebih baik dapat ditemukan melalui optimasi usaha kecil dan metode pembelajaran mesin.
Menambahkan volume dan pengesahan indikator tren tingkat besar. Ini dapat lebih memfilter sinyal palsu, misalnya tidak membuka posisi ketika volume tidak cukup.
Menggunakan model pembelajaran mendalam seperti RNN untuk memprediksi harga di masa depan, untuk membantu pengambilan keputusan.
Menggunakan garis rata-rata adaptif, memperbaiki logika penyaringan. Ketika pasar memasuki keadaan goyah, secara dinamis menyesuaikan panjang garis rata-rata, mengurangi frekuensi pembukaan posisi.
Strategi perdagangan dengan algoritma bi-linear gold-fork-dead-fork dengan membandingkan hubungan linear dari periode waktu yang berbeda, membangun beberapa lapisan filter, dapat secara efektif meningkatkan kualitas sinyal perdagangan, adalah strategi perdagangan dengan algoritma filter yang lebih umum. Strategi ini mudah diterapkan, cocok untuk pemula, juga dapat diperluas dan dioptimalkan secara multidimensi, layak untuk penelitian dan aplikasi yang lebih dalam.
/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-28 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=3
strategy(shorttitle = "ALGO 3-1-2", title="ALGO 3h, 1h, 2h", overlay=true)
bool startLONGBOTandDEAL = false
bool stopLONGBOTandDEAL = false
bool openLONG = false
bool closeLONG = false
bool startSHORTBOTandDEAL = false
bool stopSHORTBOTandDEAL = false
bool openSHORT = false
bool closeSHORT = false
MA1Period = ema(close, 10)
MA2Period = ema(close, 200)
MA3Period = ema(close, 200)
MA1 = security(syminfo.tickerid, "180", MA1Period)
MA2 = security(syminfo.tickerid, "60", MA2Period)
MA3 = security(syminfo.tickerid, "120", MA3Period)
MA12Crossover = crossover(MA1, MA2)
MA12Crossunder = crossunder(MA1, MA2)
MA23Crossover = crossover(MA2, MA3)
MA23Crossunder = crossunder(MA2, MA3)
if MA23Crossover
startLONGBOTandDEAL := true //stop shortBOT and DEAL code in the TV alert as well, probably stop first w/ a delay on startlong
lblBull = label.new(bar_index, na, ' BULL Time Open LONG', color=color.blue, textcolor=color.black, style=label.style_label_up, size=size.small)
label.set_y(lblBull, MA2)
strategy.close("go Short")
strategy.entry("go Long", strategy.long, comment="go Long")
if MA23Crossunder
//not sure if i should set alert for stop and start each bot, or just put start appropriate bot and stop its opposite in the same alert.
startSHORTBOTandDEAL := true
lblBull = label.new(bar_index, na, ' BEAR Time - Open SHORT', color=color.orange, textcolor=color.black, style=label.style_label_down, size=size.small)
label.set_y(lblBull, MA2)
strategy.close("go Long")
strategy.entry("go Short", strategy.short, comment="go Short")
if MA12Crossover
if MA2 >= MA3
openLONG := true
lup1 = label.new(bar_index, na, ' OPEN LONG ', color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
strategy.entry("go Long", strategy.long, comment="go Long")
if MA2 <= MA3
closeSHORT := true
lup1 = label.new(bar_index, na, ' CLOSE SHORT ', color=color.gray, textcolor=color.black, style=label.style_label_up, size=size.small, yloc=yloc.belowbar)
strategy.close("go Short")
if MA12Crossunder
if MA2 >= MA3
closeLONG := true
lun1 = label.new(bar_index, na, ' CLOSE LONG ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
strategy.close("go Long")
if MA2 <= MA3
openSHORT := true
lun1 = label.new(bar_index, na, ' OPEN SHORT ', color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small, yloc=yloc.abovebar)
strategy.entry("go Short", strategy.short, comment="go Short")
plot(MA1, color=color.green, linewidth=2, title="MA1")
plot(MA2, color=color.yellow, linewidth=3, title="MA2")
plot(MA3, color=color.red, linewidth=4, title="MA3")
alertcondition(startLONGBOTandDEAL, title="Start LONG BOT and DEAL", message="Start Long Bot and Deal")
alertcondition(stopLONGBOTandDEAL, title="Stop LONG BOT and DEAL", message="Stop Long Bot and Deal")
alertcondition(openLONG, title="Open LONG DEAL", message="Open Long Deal")
alertcondition(closeLONG, title="Close LONG DEAL", message="Close Long Deal")
alertcondition(stopSHORTBOTandDEAL, title="Stop SHORT BOT and DEAL", message="Stop Short Bot and Deal")
alertcondition(openSHORT, title="Open SHORT DEAL", message="Open Short Deal")
alertcondition(closeSHORT, title="Close SHORT DEAL", message="Close Short Deal")