Strategi Crossover Rata-rata Bergerak Dual adalah strategi perdagangan kuantitatif yang relatif sederhana. Strategi ini menghitung harga penutupan rata-rata 7 lilin dan harga penutupan rata-rata 20 lilin. Ketika rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang dari bawah, itu menandakan posisi panjang. Ketika rata-rata bergerak jangka pendek melintasi di bawah rata-rata bergerak jangka panjang, itu menandakan posisi pendek. Ini memungkinkan strategi untuk menangkap titik infleksi dalam tren jangka menengah pasar.
Logika inti dari strategi ini adalah untuk menghitung harga penutupan rata-rata 7 lilin terbaru (tidak termasuk lilin saat ini) sebagai rata-rata bergerak jangka pendek, dan harga penutupan rata-rata 20 lilin (tidak termasuk 7 lilin terbaru) sebagai rata-rata bergerak jangka panjang. Ketika rata-rata bergerak jangka pendek melintasi rata-rata bergerak jangka panjang dari bawah, itu menunjukkan pasar berubah dari penurunan ke kenaikan, menandakan posisi panjang. Ketika rata-rata bergerak jangka pendek melintasi di bawah rata-rata bergerak jangka panjang dari atas, itu menunjukkan pasar berubah dari kenaikan ke penurunan, menandakan posisi pendek.
Pada sinyal panjang, posisi panjang akan dibuka menggunakan seluruh modal akun. Pada sinyal pendek, posisi panjang yang ada akan ditutup terlebih dahulu sebelum membuka posisi pendek menggunakan jumlah yang sama. Setiap posisi yang dibuka akan dipegang selama 20-25 lilin. Selama periode ini, jika terjadi kerugian, 50% dari posisi akan dihentikan kerugian. Jika terjadi keuntungan yang cukup, 50% dari posisi akan diambil keuntungan.
Keuntungan dari strategi crossover rata-rata bergerak ganda sederhana ini adalah:
Sebagai tren sederhana mengikuti strategi, ia juga menghadapi beberapa potensi risiko:
Optimasi untuk mengatasi risiko ini adalah:
Sebagai strategi crossover rata-rata bergerak ganda yang sederhana, optimasi utama adalah:
Mengoptimalkan parameter MA, menguji kombinasi MA jangka pendek dan jangka panjang yang berbeda untuk parameter terbaik;
Tambahkan indikator filter lainnya seperti volume, indeks volatilitas dll untuk menghindari sinyal yang salah di pasar yang bergolak;
Mengoptimalkan strategi stop loss dan mengambil keuntungan, menguji rasio yang berbeda untuk menemukan yang optimal;
Uji efektivitas di berbagai siklus pasar dan optimalkan periode penyimpanan;
Tambahkan algoritma pembelajaran mesin, terus mengoptimalkan parameter melalui back-testing untuk lebih kuat.
Singkatnya, ini adalah strategi crossover rata-rata bergerak ganda yang sederhana, menggunakan MA crossover di berbagai periode untuk menentukan titik infleksi tren jangka menengah. Ini memiliki kepraktisan yang tinggi dan mudah dioperasikan. Tetapi juga memiliki keterbatasan dalam menentukan titik pembalikan pasar yang sebenarnya secara efektif. Optimasi lebih lanjut pada penambahan filter, penyesuaian parameter, pembelajaran mesin dll diperlukan untuk membuatnya lebih kuat di berbagai kondisi pasar untuk alfa yang konsisten.
/*backtest start: 2024-01-05 00:00:00 end: 2024-02-04 00:00:00 period: 2h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © nrathi2211 //@version=5 strategy("Closing Prices", overlay=true) //variables closingB7 = ta.highest(close, 7)[7] closingB14 = ta.highest(close, 7)[20] highB14 = ta.highest(low, 50)[7] capital = 50000 //functions qty_find(float price) => capital / int(price) profit_take() => profit = strategy.opentrades.profit(strategy.opentrades - 1) profit*.95 if(closingB7 < closingB14) if(ta.crossover(close, closingB7)) strategy.entry("long_buy", strategy.long, qty_find(close)) current_profit = strategy.opentrades.profit(strategy.opentrades - 1) if(current_profit < 0) strategy.close("Exit long_buy SL", "long_buy", qty_percent = 50) else if(current_profit < profit_take()) strategy.close("Exit long_buy TP", "long_buy", qty_percent = 50) if(ta.crossunder(close, closingB7)) strategy.exit("long_sell", from_entry = "long_buy", stop = closingB7) plot(closingB7, "cl", color.green, 2) //plot(closingB14, "cl", color.red, 2) plot(highB14, "cl", color.purple, 2)