Strategi ini menghasilkan isyarat beli dan jual berdasarkan persilangan dua purata bergerak dengan tetapan parameter yang berbeza. Apabila purata bergerak tempoh yang lebih pendek melintasi di atas purata bergerak tempoh yang lebih lama dari bawah, isyarat beli dihasilkan. Apabila purata bergerak tempoh yang lebih pendek melintasi di bawah purata bergerak tempoh yang lebih lama dari atas, isyarat jual dihasilkan.
Strategi ini ditulis dalam skrip Pine. Ia pertama menentukan dua purata bergerak, yang dinamakan p1 dan p2, dengan jenis, panjang dan sumber harga yang boleh disesuaikan melalui input. Di sini p1 mewakili MA tempoh yang lebih pendek dan p2 mewakili MA tempoh yang lebih lama.
Fungsi crossover dan crossunder digunakan untuk mengesan crossover antara dua MA. Apabila p1 melintasi p2 dari bawah, isyarat beli dihasilkan. Apabila p1 melintasi di bawah p2 dari atas, isyarat jual dihasilkan.
Untuk melaksanakan perdagangan, strategi memasuki kedudukan panjang atau pendek menggunakan strategi.entry apabila isyarat dicetuskan. Jika input ShortOnly diaktifkan, hanya isyarat jual yang akan didagangkan.
Kelebihan strategi ini termasuk:
Terdapat juga beberapa risiko dengan strategi ini:
Risiko boleh dikurangkan dengan menyesuaikan panjang MA, menambah keadaan penapis dan lain-lain. Penunjuk trend juga boleh ditambahkan untuk menentukan bias pasaran.
Strategi ini boleh ditingkatkan dari aspek berikut:
Gunakan VWAP atau harga biasa sebagai sumber harga untuk menjadikan isyarat silang lebih boleh dipercayai.
Tambah tempoh pengesahan untuk mengelakkan persilangan yang salah jangka pendek.
Menggabungkan hentian ATR berdasarkan kerugian maksimum yang boleh diterima mengikut turun naik pasaran.
Pengoptimuman parameter melalui pemasangan lengkung untuk mencari kombinasi yang optimum.
Pertimbangkan hanya isyarat di sepanjang arah trend jangka masa yang lebih tinggi.
Strategi crossover MA berganda mudah difahami dan dilaksanakan, menghasilkan isyarat perdagangan dari dua crossover MA dengan penyesuaian yang tinggi. tetapi ia juga boleh menghasilkan isyarat yang tidak sah yang berlebihan semasa pasaran yang bergolak. risiko dapat dikurangkan melalui parameter dan pengoptimuman logik dengan banyak peluang peningkatan, bernilai penyelidikan 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)