Strategi perdagangan purata bergerak berganda menjana isyarat perdagangan dengan mengira purata bergerak pantas dan perlahan dan menonton salib. Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan, kedudukan panjang diambil. Apabila purata bergerak pantas melintasi di bawah purata bergerak perlahan, kedudukan pendek diambil. Strategi ini boleh digunakan untuk perdagangan trend dan perdagangan kontra-trend.
Strategi ini mula-mula menetapkan panjang purata bergerak pantas maFastLength dan purata bergerak perlahan maSlowLength. Ia kemudian mengira purata bergerak pantas fastMA dan purata bergerak perlahan slowMA. Purata bergerak pantas bertindak balas dengan lebih cepat terhadap perubahan harga dan digunakan untuk menilai trend semasa, sementara purata bergerak perlahan bertindak balas lebih perlahan dan digunakan untuk menentukan arah trend.
Apabila purata bergerak pantas melintasi di atas purata bergerak perlahan, isyarat masuk panjang goLong() dihasilkan. Apabila purata bergerak pantas melintasi di bawah purata bergerak perlahan, kedudukan panjang yang sedia ada ditutup dengan isyarat killLong().
Strategi boleh ditetapkan untuk hanya panjang, pendek sahaja, atau membenarkan kedua-dua perdagangan panjang dan pendek.
Dalam mod panjang sahaja, kedudukan panjang dimasukkan pada isyarat goLong() dan keluar pada isyarat killLong().
Dalam mod pendek sahaja, kedudukan pendek dimasukkan pada isyarat killLong() dan keluar pada isyarat goLong().
Dalam mod pertukaran, kedudukan panjang dimasukkan pada goLong ((), ditutup dan terbalik menjadi pendek pada killLong (().
Strategi ini juga merangkumi stop loss, trailing stop, mesej dan ciri pilihan lain.
Sederhana dan mudah dilaksanakan.
Fleksibiliti untuk pergi panjang, pendek atau kedua-duanya.
Fitur stop loss dan trailing stop pilihan.
Mesej yang boleh disesuaikan untuk memberi amaran perdagangan.
Sensitif terhadap perubahan trend di pasaran.
Parameter yang boleh diselaraskan menyesuaikan diri dengan pasaran yang berbeza.
Boleh menghasilkan perdagangan yang berlebihan di pasaran yang bergelora atau berkisar.
Perlahan bertindak balas terhadap berita tiba-tiba.
Pilihan parameter memberi kesan kepada prestasi strategi.
Harus mengikuti isyarat dengan ketat, mengelakkan perdagangan pertimbangan.
Kos perdagangan boleh mengikis keuntungan jika tidak dipertimbangkan.
Tambah penapis seperti RSI untuk mengelakkan isyarat palsu.
Melaksanakan pengoptimuman parameter untuk mencari tetapan terbaik.
Gunakan hentian dinamik untuk mengunci keuntungan dan menyesuaikan.
Menggabungkan pembelajaran mesin untuk membantu ramalan trend.
Mengoptimumkan mesej untuk tabiat perdagangan individu.
Strategi purata bergerak berganda adalah agak mudah dan berguna untuk menangkap trend yang kuat. Walau bagaimanapun, berhati-hatilah untuk mengelakkan whipsaws dalam persekitaran trend rendah. Parameter penyesuaian halus dan menambah penunjuk atau penambahbaikan tambahan dapat meningkatkan ketahanan dan kesesuaian.
/*backtest start: 2022-10-20 00:00:00 end: 2023-10-26 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SMA Strategy", shorttitle="SMA Strategy", overlay=true, pyramiding=0, default_qty_type=strategy.percent_of_equity, default_qty_value=100) // === Inputs === // short ma maFastSource = input(defval=close, title="Fast MA Source") maFastLength = input(defval=3, title="Fast MA Period", minval=1) // long ma maSlowSource = input(defval=close, title="Slow MA Source") maSlowLength = input(defval=9, title="Slow MA Period", minval=1) // Trade direction shorting = input(defval=false, title="Short only?") longonly = input(defval=true, title="Long only?") swapping = input(defval=false, title="Swap orders?") // risk management useStop = input(defval=false, title="Use Initial Stop Loss?") slPoints = input(defval=25, title="Initial Stop Loss Points", minval=1) useTS = input(defval=false, title="Use Trailing Stop?") tslPoints = input(defval=120, title="Trail Points", minval=1) useTSO = input(defval=false, title="Use Offset For Trailing Stop?") tslOffset = input(defval=20, title="Trail Offset Points", minval=1) // Messages for buy and sell message_long_entry = input("Long entry message", title="Long entry message") message_long_exit = input("Long exit message", title="Long exit message") message_short_entry = input("Short entry message", title="Short entry message") message_short_exit = input("Short exit message", title="Short exit message") // Calculate start/end date and time condition startDate = input(timestamp("2021-01-01T00:00:00"), type = input.time) finishDate = input(timestamp("2021-12-31T00:00:00"), type = input.time) time_cond = true // === Vars and Series === fastMA = sma(maFastSource, maFastLength) slowMA = sma(maSlowSource, maSlowLength) plot(fastMA, color=color.blue) plot(slowMA, color=color.purple) goLong() => crossover(fastMA, slowMA) killLong() => crossunder(fastMA, slowMA) // Long only if longonly strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry) strategy.close("Buy", when=killLong() and time_cond, alert_message = message_long_exit) // Short only if shorting strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry) strategy.close("Sell", when=goLong() and time_cond, alert_message = message_short_exit) // Order Swapping if swapping strategy.entry("Buy", strategy.long, when=goLong() and time_cond, alert_message = message_long_entry) strategy.entry("Sell", strategy.short, when=killLong() and time_cond, alert_message = message_short_entry) if useStop strategy.exit("XLS", from_entry="Buy", stop=strategy.position_avg_price / 1.08, alert_message = message_long_exit) strategy.exit("XSS", from_entry="Sell", stop=strategy.position_avg_price * 1.08, alert_message = message_short_exit)