Strategi Kuantitatif EMA

Penulis:ChaoZhang, Tarikh: 2024-03-08 14:18:21
Tag:

img

Ringkasan

Strategi ini berdasarkan isyarat silang dua purata bergerak eksponensial (EMA) untuk perdagangan. Apabila EMA jangka pendek melintasi di atas EMA jangka panjang, ia membuka kedudukan panjang; apabila EMA jangka pendek melintasi di bawah EMA jangka panjang, ia menutup kedudukan. Strategi ini juga memperkenalkan mekanisme henti rugi dan penapis masa perdagangan untuk mengawal risiko dan mengoptimumkan prestasi strategi.

Prinsip Strategi

Strategi ini menggunakan dua EMA dengan tempoh yang berbeza sebagai asas untuk penilaian trend. Berbanding dengan purata bergerak mudah (SMA), EMA dapat bertindak balas terhadap perubahan harga dengan lebih cepat dan mempunyai pengedaran berat yang lebih munasabah. Apabila EMA jangka pendek melintasi di atas EMA jangka panjang, ia menunjukkan bahawa harga mungkin membentuk trend menaik, dan kedudukan panjang dibuka; sebaliknya, apabila EMA jangka pendek melintasi di bawah EMA jangka panjang, ia menunjukkan bahawa trend menaik mungkin berakhir, dan kedudukan ditutup.

Di samping isyarat silang purata bergerak, strategi ini juga memperkenalkan mekanisme stop-loss. Di satu pihak, stop-loss peratusan tetap ditetapkan, iaitu, apabila harga turun lebih daripada peratusan tertentu berbanding harga pembukaan, kedudukan ditutup secara paksa untuk mengawal kerugian; di sisi lain, juga mungkin untuk memilih untuk menutup kedudukan apabila harga penutupan lebih rendah daripada harga penutupan lilin sebelumnya. Kedua-dua kaedah stop-loss ini dapat mengawal penarikan strategi dengan berkesan.

Di samping itu, strategi ini juga memperkenalkan penapis masa dagangan. Pengguna boleh menetapkan waktu permulaan dan akhir dagangan yang dibenarkan sendiri, dengan itu mengelakkan dagangan dalam tempoh masa tertentu (seperti cuti, waktu bukan dagangan, dll.).

Analisis Kelebihan

  1. Sederhana dan mudah digunakan: Logik strategi jelas dan hanya menggunakan dua EMA sebagai isyarat perdagangan, yang mudah difahami dan dilaksanakan.

  2. Pengesanan trend: EMA boleh bertindak balas dengan cepat terhadap perubahan harga, membolehkan strategi untuk menangkap pembentukan trend dan berakhir dengan tepat pada masanya, dengan itu memperoleh keuntungan pengesanan trend.

  3. Kawalan risiko: Memperkenalkan stop-loss peratusan tetap dan stop-loss berdasarkan harga penutupan lilin sebelumnya dapat mengawal kerugian dan pengeluaran transaksi tunggal dengan berkesan.

  4. Parameter fleksibel: Pengguna boleh menyesuaikan parameter seperti tempoh EMA, peratusan stop-loss, sama ada untuk menggunakan harga penutupan lilin sebelumnya untuk stop-loss, tempoh masa perdagangan, dan lain-lain, mengikut keperluan mereka sendiri, dengan itu mengoptimumkan prestasi strategi.

Analisis Risiko

  1. Risiko pengoptimuman parameter: Prestasi strategi bergantung pada pemilihan parameter seperti tempoh EMA dan peratusan stop-loss, dan parameter yang tidak sesuai boleh menyebabkan prestasi strategi yang buruk. Oleh itu, perlu melakukan pengoptimuman parameter dan pengujian semula pada data sejarah untuk memilih parameter yang optimum.

  2. Risiko pasaran: Strategi ini terutamanya boleh digunakan untuk pasaran trend. Dalam pasaran yang tidak menentu atau pembalikan trend, perdagangan yang kerap boleh membawa kepada penarikan yang besar. Oleh itu, adalah perlu untuk menyesuaikan parameter strategi atau berhenti menggunakan strategi mengikut keadaan pasaran.

  3. Risiko kos: Strategi ini boleh menghasilkan sebilangan besar perdagangan, dengan itu meningkatkan kos transaksi. Oleh itu, adalah perlu untuk memilih sasaran perdagangan dan jumlah yang sesuai, dan mengawal kos setiap transaksi.

Arah pengoptimuman

  1. Memperkenalkan lebih banyak penunjuk teknikal: Berdasarkan isyarat silang EMA, memperkenalkan penunjuk teknikal lain seperti RSI dan MACD untuk membentuk isyarat perdagangan pelbagai faktor dan meningkatkan ketepatan penilaian trend.

  2. Stop-loss dinamik: Sesuaikan kedudukan stop-loss secara dinamik mengikut penunjuk seperti turun naik pasaran dan ATR, sambil mengawal risiko dan meminimumkan kerugian keuntungan yang disebabkan oleh stop-loss sebanyak mungkin.

  3. Pengurusan kedudukan: Sesuaikan saiz kedudukan secara dinamik mengikut kekuatan trend pasaran, tahap penyimpangan harga dari purata bergerak, dan lain-lain, meningkatkan kedudukan apabila trend kuat, dan mengurangkan kedudukan apabila trend melemah atau tidak jelas.

  4. Pengoptimuman pembelajaran mesin: Gunakan algoritma pembelajaran mesin untuk mengoptimumkan parameter strategi dan secara automatik memilih kombinasi parameter yang optimum, meningkatkan pulangan strategi dan mengurangkan risiko overfit.

Kesimpulan

Strategi kuantitatif silang EMA ini menggunakan isyarat silang dua EMA untuk menilai trend, sambil memperkenalkan mekanisme stop-loss dan penapis masa dagangan, mencapai keseimbangan yang baik antara keupayaan penjejakan trend dan kawalan risiko. Walaupun logik strategi sederhana, ia dapat memperoleh pulangan yang stabil di pasaran trend melalui pengoptimuman parameter yang munasabah dan kawalan risiko. Pada masa akan datang, strategi dapat ditingkatkan dari aspek seperti memperkenalkan lebih banyak penunjuk teknikal, stop-loss dinamik, pengurusan kedudukan, dan pengoptimuman pembelajaran mesin, untuk meningkatkan lagi prestasi dan ketahanan strategi. Secara umum, strategi ini adalah strategi perdagangan kuantitatif yang mudah difahami dan mudah dilaksanakan, sesuai untuk pedagang kuantitatif peringkat kemasukan 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)

Lebih lanjut