
Strategi ini berdagang berdasarkan sinyal silang dari dua indeks moving average (EMA). Apabila EMA jangka pendek melewati EMA jangka panjang, posisi terbuka lebih banyak; Jika EMA jangka pendek melewati EMA jangka panjang, posisi kosong. Strategi ini juga memperkenalkan mekanisme stop loss dan filter waktu perdagangan untuk mengontrol risiko dan mengoptimalkan kinerja strategi.
Strategi ini menggunakan EMA dari dua periode yang berbeda sebagai dasar untuk menilai tren. EMA lebih cepat bereaksi terhadap perubahan harga dibandingkan dengan rata-rata bergerak sederhana (SMA), dan distribusi bobotnya lebih rasional. Ketika harga mungkin membentuk tren naik di EMA jangka pendek, maka posisi terbuka lebih banyak; sebaliknya, ketika EMA jangka pendek di bawah EMA jangka panjang, berarti tren naik mungkin berakhir, maka posisi kosong.
Selain sinyal persimpangan rata-rata, strategi ini juga memperkenalkan mekanisme stop loss. Di satu sisi, pengaturan stop loss persentase tetap, yaitu ketika harga relatif harga pembukaan posisi turun lebih dari persentase tertentu, penutupan paksa untuk mengendalikan kerugian; Di sisi lain, juga dapat memilih untuk menetap ketika harga penutupan harga lebih rendah dari sebelumnya K garis penutupan harga.
Selain itu, kebijakan ini juga memperkenalkan filter waktu transaksi. Pengguna dapat mengatur sendiri waktu awal dan akhir perdagangan yang diizinkan, sehingga menghindari perdagangan pada periode waktu tertentu (seperti liburan, waktu tidak berdagang, dll.).
Sederhana dan mudah digunakan: Strategi ini memiliki logika yang jelas, hanya menggunakan dua EMA sebagai sinyal perdagangan, sehingga mudah dipahami dan diterapkan.
Pelacakan tren: EMA mampu merespons perubahan harga dengan cepat, sehingga strategi dapat menangkap pembentukan dan berakhirnya tren tepat waktu, sehingga mendapatkan keuntungan dari pelacakan tren.
Pengendalian risiko: Mengenaikan stop loss persentase tetap dan stop loss berdasarkan harga penutupan K-line sebelumnya, yang dapat secara efektif mengontrol kerugian dan penarikan dari satu transaksi.
Fleksibilitas parameter: pengguna dapat menyesuaikan siklus EMA, persentase stop loss, apakah menggunakan stop loss harga penutupan K-line sebelumnya, periode waktu perdagangan, dan parameter lainnya sesuai dengan kebutuhan mereka sendiri, sehingga dapat mengoptimalkan kinerja strategi.
Risiko Optimasi Parameter: Kinerja strategi ini bergantung pada pilihan parameter seperti siklus EMA, persentase stop loss, dan parameter yang tidak tepat dapat menyebabkan kinerja strategi yang buruk. Oleh karena itu, perlu dilakukan optimasi dan pengujian parameter pada data historis untuk memilih parameter yang optimal.
Risiko pasar: Strategi ini terutama berlaku untuk pasar yang sedang tren, dan perdagangan yang sering dapat menyebabkan penarikan yang lebih besar ketika pasar bergoyang atau tren berbalik. Oleh karena itu, perlu menyesuaikan parameter strategi sesuai dengan kondisi pasar atau berhenti menggunakan strategi ini.
Risiko biaya: Strategi ini dapat menghasilkan lebih banyak transaksi, sehingga meningkatkan biaya transaksi. Oleh karena itu, perlu memilih standar dan volume transaksi yang tepat, dan mengontrol biaya per transaksi.
Masukkan lebih banyak indikator teknis: Berdasarkan sinyal silang EMA, masukkan indikator teknis lainnya seperti RSI, MACD, dan lain-lain, membentuk sinyal perdagangan multi-faktor, meningkatkan akurasi penilaian tren.
Stop loss dinamis: Berdasarkan volatilitas pasar, ATR, dan indikator lainnya, posisi stop loss disesuaikan secara dinamis, sambil mengontrol risiko, dan mengurangi kerugian pendapatan yang disebabkan oleh stop loss.
Manajemen posisi: Sesuai dengan intensitas tren pasar, harga dan tingkat penyimpangan dari garis rata-rata, ukuran posisi disesuaikan secara dinamis, meningkatkan posisi saat tren kuat, mengurangi posisi saat tren melemah atau tidak jelas.
Optimasi Pembelajaran Mesin: Menggunakan algoritma pembelajaran mesin untuk mengoptimalkan parameter strategi, secara otomatis memilih kombinasi parameter yang optimal, meningkatkan keuntungan strategi dan mengurangi risiko over-fitting.
Strategi kuantitatif silang dua garis ini menilai tren melalui sinyal silang dari dua EMA, dan pada saat yang sama memperkenalkan mekanisme stop loss dan filter waktu perdagangan, memberikan keseimbangan yang baik antara kemampuan untuk melacak tren dan pengendalian risiko. Meskipun logika strategi ini sederhana, tetapi dengan pengoptimalan parameter dan pengendalian risiko yang masuk akal, keuntungan yang stabil dapat diperoleh di pasar yang sedang tren. Strategi ini dapat disempurnakan di masa depan dengan memperkenalkan lebih banyak indikator teknis, posisi stop loss dinamis, manajemen, dan pengoptimalan pembelajaran mesin, untuk meningkatkan kinerja strategi lebih lanjut.
/*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)