Strategi ini menghasilkan sinyal beli dan jual berdasarkan persilangan dua moving average dengan pengaturan parameter yang berbeda. Ketika moving average periode yang lebih pendek melintasi di atas moving average periode yang lebih lama dari bawah, sinyal beli dihasilkan. Ketika moving average periode yang lebih pendek melintasi di bawah moving average periode yang lebih lama dari atas, sinyal jual dihasilkan.
Strategi ini ditulis dalam skrip Pine. Pertama-tama mendefinisikan dua moving average, bernama p1 dan p2, dengan jenis, panjang dan sumber harga yang dapat disesuaikan melalui input. Di sini p1 mewakili MA periode yang lebih pendek dan p2 mewakili MA periode yang lebih lama.
Fungsi crossover dan crossunder digunakan untuk mendeteksi crossover antara dua MA. Ketika p1 melintasi p2 dari bawah, sinyal beli dihasilkan. Ketika p1 melintasi di bawah p2 dari atas, sinyal jual dihasilkan.
Untuk mengeksekusi perdagangan, strategi memasuki posisi panjang atau pendek menggunakan strategi.entry ketika sinyal dipicu. Jika input shortOnly diaktifkan, hanya sinyal jual yang akan diperdagangkan.
Keuntungan dari strategi ini meliputi:
Ada juga beberapa risiko dengan strategi ini:
Risiko dapat dikurangi dengan menyesuaikan panjang MA, menambahkan kondisi filter dll. Indikator tren juga dapat ditambahkan untuk menentukan bias pasar.
Strategi dapat ditingkatkan dari aspek berikut:
Gunakan VWAP atau harga khas sebagai sumber harga untuk membuat sinyal crossover lebih dapat diandalkan.
Tambahkan Periode Validasi untuk menghindari persilangan yang salah jangka pendek.
Menggabungkan pemberhentian ATR berdasarkan kerugian maksimum yang dapat diterima sesuai dengan volatilitas pasar.
Optimasi parameter melalui penyesuaian kurva untuk menemukan kombinasi yang optimal.
Pertimbangkan hanya sinyal di sepanjang arah tren jangka waktu yang lebih tinggi.
Strategi crossover MA ganda mudah dipahami dan diimplementasikan, menghasilkan sinyal perdagangan dari dua crossover MA dengan kustomisasi tinggi. tetapi juga dapat menghasilkan sinyal yang tidak valid yang berlebihan selama pasar bergolak. risiko dapat dikurangi melalui parameter dan optimasi logika dengan banyak peluang peningkatan, layak penelitian lebih lanjut.
/*backtest start: 2022-11-20 00:00:00 end: 2023-11-26 00:00:00 period: 1d basePeriod: 1h 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/ // © RafaelPiccolo //@version=4 strategy("Double MA Cross", overlay=true) type1 = input("SMA", "MA Type 1", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len1 = input(10, minval=1, title="Length 1") src1 = input(close, "Source 1", type=input.source) type2 = input("SMA", "MA Type 2", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "TEMA"]) len2 = input(50, minval=2, title="Length 2") src2 = input(close, "Source 2", type=input.source) shortOnly = input(false, "Short only") tema(src, len)=> ema1 = ema(src, len) ema2 = ema(ema1, len) ema3 = ema(ema2, len) return = 3 * (ema1 - ema2) + ema3 getPoint(type, len, src)=> return = type == "SMA" ? sma(src, len) : type == "EMA" ? ema(src, len) : type == "WMA" ? wma(src, len) : type == "HMA" ? hma(src, len) : type == "VWMA" ? vwma(src, len) : type == "RMA" ? rma(src, len) : tema(src, len) p1 = getPoint(type1, len1, src1) p2 = getPoint(type2, len2, src2) shortCondition = crossunder(p1, p2) longCondition = crossover(p1, p2) if (shortCondition) strategy.entry("Short", strategy.short) if (longCondition) if (shortOnly) strategy.close("Short") else strategy.entry("Long", strategy.long) plot(p1, "MA 1", p1 < p2 ? color.red : color.green) plot(p2, "MA 2", color.blue)