Strategi ini didasarkan pada sinyal silang dari dua rata-rata bergerak eksponensial (EMA) untuk perdagangan. Ketika EMA jangka pendek melintasi di atas EMA jangka panjang, ia membuka posisi panjang; ketika EMA jangka pendek melintasi di bawah EMA jangka panjang, ia menutup posisi. Strategi ini juga memperkenalkan mekanisme stop-loss dan filter waktu perdagangan untuk mengontrol risiko dan mengoptimalkan kinerja strategi.
Strategi ini menggunakan dua EMA dengan periode yang berbeda sebagai dasar penilaian tren. Dibandingkan dengan moving average sederhana (SMA), EMA dapat merespons perubahan harga lebih cepat dan memiliki distribusi bobot yang lebih wajar. Ketika EMA jangka pendek melintasi di atas EMA jangka panjang, ini menunjukkan bahwa harga dapat membentuk tren naik, dan posisi panjang dibuka; sebaliknya, ketika EMA jangka pendek melintasi di bawah EMA jangka panjang, ini menunjukkan bahwa tren naik dapat berakhir, dan posisi ditutup.
Selain sinyal silang rata-rata bergerak, strategi ini juga memperkenalkan mekanisme stop-loss. Di satu sisi, stop-loss persentase tetap ditetapkan, yaitu ketika harga turun lebih dari persentase tertentu relatif terhadap harga pembukaan, posisi secara paksa ditutup untuk mengendalikan kerugian; di sisi lain, juga mungkin untuk memilih untuk menutup posisi ketika harga penutupan lebih rendah dari harga penutupan lilin sebelumnya. Dua metode stop-loss ini dapat secara efektif mengendalikan penarikan strategi.
Selain itu, strategi ini juga memperkenalkan filter waktu perdagangan. Pengguna dapat mengatur waktu awal dan akhir perdagangan yang diizinkan sendiri, sehingga menghindari perdagangan selama periode waktu tertentu (seperti hari libur, jam non-perdagangan, dll.).
Sederhana dan mudah digunakan: Logika strategi jelas dan hanya menggunakan dua EMA sebagai sinyal perdagangan, yang mudah dimengerti dan diimplementasikan.
Pelacakan tren: EMA dapat dengan cepat merespons perubahan harga, memungkinkan strategi untuk menangkap pembentukan tren dan berakhir secara tepat waktu, sehingga memperoleh keuntungan pelacakan tren.
Pengendalian risiko: Memperkenalkan stop-loss persentase tetap dan stop-loss berdasarkan harga penutupan candlestick sebelumnya dapat secara efektif mengendalikan kerugian dan penarikan transaksi tunggal.
Parameter fleksibel: Pengguna dapat menyesuaikan parameter seperti periode EMA, persentase stop-loss, apakah akan menggunakan harga penutupan lilin sebelumnya untuk stop-loss, periode waktu perdagangan, dll, sesuai dengan kebutuhan mereka sendiri, sehingga mengoptimalkan kinerja strategi.
Risiko optimasi parameter: Kinerja strategi tergantung pada pemilihan parameter seperti periode EMA dan persentase stop-loss, dan parameter yang tidak tepat dapat menyebabkan kinerja strategi yang buruk. Oleh karena itu, perlu untuk melakukan optimasi parameter dan backtesting pada data historis untuk memilih parameter optimal.
Risiko pasar: Strategi ini terutama berlaku untuk pasar tren. Dalam pasar yang tidak stabil atau pembalikan tren, perdagangan yang sering dapat menyebabkan penarikan besar. Oleh karena itu, perlu untuk menyesuaikan parameter strategi atau berhenti menggunakan strategi sesuai dengan kondisi pasar.
Risiko biaya: Strategi dapat menghasilkan sejumlah besar perdagangan, sehingga meningkatkan biaya transaksi. Oleh karena itu, perlu untuk memilih target perdagangan yang tepat dan volume, dan mengontrol biaya setiap transaksi.
Memperkenalkan lebih banyak indikator teknis: Berdasarkan sinyal silang EMA, memperkenalkan indikator teknis lainnya seperti RSI dan MACD untuk membentuk sinyal perdagangan multi-faktor dan meningkatkan akurasi penilaian tren.
Stop-loss dinamis: Sesuaikan posisi stop-loss secara dinamis sesuai dengan indikator seperti volatilitas pasar dan ATR, sambil mengendalikan risiko dan meminimalkan kerugian keuntungan yang disebabkan oleh stop-loss sebanyak mungkin.
Manajemen posisi: Sesuaikan secara dinamis ukuran posisi sesuai dengan kekuatan tren pasar, tingkat penyimpangan harga dari rata-rata bergerak, dll., Tingkatkan posisi ketika tren kuat, dan kurangi posisi ketika tren melemah atau tidak jelas.
Optimasi pembelajaran mesin: Gunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter strategi dan secara otomatis memilih kombinasi parameter optimal, meningkatkan pengembalian strategi dan mengurangi risiko overfit.
Strategi kuantitatif silang EMA ini menggunakan sinyal silang dari dua EMA untuk menilai tren, sambil memperkenalkan mekanisme stop-loss dan filter waktu perdagangan, mencapai keseimbangan yang baik antara kemampuan pelacakan tren dan pengendalian risiko. Meskipun logika strategi sederhana, itu dapat memperoleh pengembalian yang stabil di pasar tren melalui optimasi parameter yang wajar dan pengendalian risiko. Di masa depan, strategi dapat ditingkatkan dari aspek seperti memperkenalkan lebih banyak indikator teknis, stop-loss dinamis, manajemen posisi, dan optimasi pembelajaran mesin, untuk lebih meningkatkan kinerja dan ketahanan strategi. Secara umum, strategi ini adalah strategi perdagangan kuantitatif yang mudah dimengerti dan mudah diterapkan, cocok untuk para pedagang kuantitatif tingkat awal untuk belajar dan menggunakan.
/*backtest start: 2023-03-02 00:00:00 end: 2024-03-07 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/ // © ZenAndTheArtOfTrading / www.PineScriptMastery.com // @version=5 strategy("EMA strategy", overlay=true, initial_capital=50000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, // 100% of balance invested on each trade commission_type=strategy.commission.cash_per_contract, commission_value=0.005) // Interactive Brokers rate // Get user input i_ma1 = input.int(title="MA 1 Length", defval=200, step=10, group="Strategy Parameters", tooltip="Long-term MA") i_ma2 = input.int(title="MA 2 Length", defval=10, step=10, group="Strategy Parameters", tooltip="Short-term MA") i_stopPercent = input.float(title="Stop Loss Percent", defval=0.10, step=0.1, group="Strategy Parameters", tooltip="Failsafe Stop Loss Percent Decline") i_lowerClose = input.bool(title="Exit On Lower Close", defval=false, group="Strategy Parameters", tooltip="Wait for a lower-close before exiting above MA2") i_startTime = input(title="Start Filter", defval=timestamp("01 Jan 1995 13:30 +0000"), group="Time Filter", tooltip="Start date & time to begin searching for setups") i_endTime = input(title="End Filter", defval=timestamp("1 Jan 2099 19:30 +0000"), group="Time Filter", tooltip="End date & time to stop searching for setups") // Get indicator values ma1 = ta.ema(close, i_ma1) ma2 = ta.ema(close, i_ma2) // Check filter(s) f_dateFilter = true // Check buy/sell conditions var float buyPrice = 0 buyCondition = close > ma1 and strategy.position_size == 0 and f_dateFilter sellCondition = close < ma2 and strategy.position_size > 0 //and (not i_lowerClose or close < low[1]) stopDistance = strategy.position_size > 0 ? ((buyPrice - close) / close) : na stopPrice = strategy.position_size > 0 ? buyPrice - (buyPrice * i_stopPercent) : na stopCondition = strategy.position_size > 0 and stopDistance > i_stopPercent // Enter positions if buyCondition strategy.entry(id="Long", direction=strategy.long) if buyCondition[1] buyPrice := open // Exit positions if sellCondition or stopCondition strategy.close(id="Long", comment="Exit" + (stopCondition ? "SL=true" : "")) buyPrice := na // Draw pretty colors plot(buyPrice, color=color.lime, style=plot.style_linebr) plot(stopPrice, color=color.red, style=plot.style_linebr, offset=-1) plot(ma1, color=color.blue) plot(ma2, color=color.orange)