Strategi ini menghasilkan sinyal perdagangan berdasarkan crossover dan crossunder garis EMA cepat dan lambat, yang termasuk dalam strategi trend following.
Logika inti dari strategi ini terutama mencakup bagian-bagian berikut:
Menghitung EMA cepat dan lambat: Gunakan ta.ema() untuk menghitung EMA cepat dari panjang fastInput dan EMA lambat dari panjang slowInput.
Set backtest time range: Gunakan useDateFilter untuk mengatur apakah akan menyaring backtest time range, dan gunakan backtestStartDate dan backtestEndDate untuk mengatur waktu awal dan akhir.
Menghasilkan sinyal perdagangan: Gunakan ta.crossover() dan ta.crossunder() untuk membandingkan EMA cepat dan lambat, menghasilkan sinyal beli ketika EMA cepat melintasi EMA lambat, dan sinyal jual ketika EMA cepat melintasi EMA lambat.
Menangani pesanan di luar rentang waktu: Batalkan pesanan yang belum dipenuhi di luar rentang waktu backtest, dan rata semua posisi.
Grafik garis EMA: Grafik garis EMA cepat dan lambat pada grafik.
Ini adalah tren yang sangat sederhana mengikuti strategi, dengan keuntungan berikut:
Logika sederhana, mudah dipahami dan diterapkan.
EMA meluruskan data harga dan mengurangi kebisingan perdagangan.
Periode EMA yang dapat disesuaikan, dapat disesuaikan dengan lingkungan pasar yang berbeda.
Jangka waktu backtest yang fleksibel untuk menguji periode waktu tertentu.
Kondisi masuk dan keluar yang dapat dioptimalkan, dapat dikombinasikan dengan indikator lain.
Strategi ini juga memiliki beberapa risiko:
Strategi EMA ganda bersifat kasar, tidak mampu beradaptasi secara fleksibel dengan perubahan pasar.
Risiko perdagangan sering dan perdagangan berulang.
Parameter EMA yang tidak tepat dapat menyebabkan sinyal perdagangan yang salah.
Jangka waktu backtest yang tidak wajar dapat menyebabkan overfit.
Risiko penarikan dan kerugian yang tak terelakkan.
Risiko dapat dikelola melalui optimasi parameter, penyaringan fluktuasi, stop loss, dll.
Strategi ini dapat dioptimalkan dalam aspek berikut:
Mengoptimalkan periode EMA untuk menemukan kombinasi parameter terbaik.
Tambahkan indikator lain untuk menyaring transaksi yang tidak perlu.
Tambahkan stop loss untuk mengendalikan kerugian perdagangan tunggal.
Menggabungkan tren, volatilitas filter untuk mengurangi frekuensi perdagangan.
Cobalah berbagai produk untuk menemukan yang paling cocok.
Gunakan slippage, komisi untuk backtest yang lebih realistis.
Singkatnya, ini adalah strategi crossover EMA ganda yang sangat sederhana dengan logika yang jelas dengan membandingkan EMA cepat dan lambat. Keuntungannya adalah implementasi yang sederhana, tetapi juga memiliki masalah seperti perdagangan yang sering, overfit. Langkah selanjutnya adalah meningkatkan optimasi parameter, manajemen risiko untuk strategi yang lebih kuat.
/*backtest start: 2022-11-06 00:00:00 end: 2023-11-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy("MollyETF_EMA_Crossover", overlay = true, initial_capital = 100000, default_qty_value=100, default_qty_type=strategy.percent_of_equity) fastInput = input( 10, "Fast EMA") slowInput = input( 21, "Slow EMA") // Calculate two moving averages with different lengths. float fastMA = ta.ema(close, fastInput) float slowMA = ta.ema(close, slowInput) // STEP 1. Create inputs that configure the backtest's date range useDateFilter = input.bool(true, title="Filter Date Range of Backtest", group="Backtest Time Period") backtestStartDate = input(timestamp("1 Jan 2018"), title="Start Date", group="Backtest Time Period", tooltip="This start date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") backtestEndDate = input(timestamp("7 Sep 2023"), title="End Date", group="Backtest Time Period", tooltip="This end date is in the time zone of the exchange " + "where the chart's instrument trades. It doesn't use the time " + "zone of the chart or of your computer.") // STEP 2. See if current bar falls inside the date range inTradeWindow = true // STEP 3. Include the date filter with the entry order conditions // Enter a long position when `fastMA` crosses over `slowMA`. if inTradeWindow and ta.crossover(fastMA, slowMA) strategy.entry("buy", strategy.long) // Enter a short position when `fastMA` crosses under `slowMA`. if inTradeWindow and ta.crossunder(fastMA, slowMA) strategy.close_all(comment="sell") // STEP 4. With the backtest date range over, exit all open // trades and cancel all unfilled pending orders if not inTradeWindow and inTradeWindow[1] strategy.cancel_all() strategy.close_all(comment="Date Range Exit") // Plot the moving averages. plot(fastMA, "Fast MA", color.aqua) plot(slowMA, "Slow MA", color.orange)