Strategi Perdagangan Kuantitatif Berdasarkan Crossover EMA Ganda

Penulis:ChaoZhang, Tanggal: 2023-11-21 11:41:40
Tag:

img

Gambaran umum

Strategi ini menghasilkan sinyal perdagangan dengan menghitung persilangan antara dua garis EMA periode yang berbeda untuk menentukan tren pasar. Ini akan membuka posisi panjang ketika EMA periode yang lebih pendek melintasi EMA periode yang lebih lama, menunjukkan tren naik, dan menutup posisi ketika EMA periode yang lebih pendek melintasi di bawah EMA periode yang lebih lama, menunjukkan tren menurun.

Prinsip-prinsip

Strategi ini terutama menerapkan teori salib emas dan salib kematian dari garis EMA ganda. Garis EMA ganda terdiri dari EMA panjang dan EMA pendek. Parameter EMA pendek ditetapkan menjadi 10 hari dan parameter EMA panjang ditetapkan menjadi 21 hari.

Ketika EMA pendek melintasi EMA panjang, sinyal beli dihasilkan. Ketika EMA pendek melintasi di bawah EMA panjang, sinyal jual dihasilkan. Strategi ini juga menetapkan ambang pertumbuhan, membuka posisi panjang hanya ketika pertumbuhan melebihi ambang positif dan menutup posisi hanya ketika penurunan melebihi ambang negatif.

Secara khusus, kondisi pembelian adalah ketika EMA pendek lebih tinggi dari EMA panjang dan tingkat pertumbuhan saham melebihi ambang positif. Kondisi posisi dekat adalah ketika EMA pendek lebih rendah dari EMA panjang dan tingkat pertumbuhan saham turun di bawah ambang negatif.

Keuntungan

  • Menggunakan teori salib emas dan salib kematian garis EMA ganda untuk kesederhanaan dan keandalan
  • Menambahkan ambang tingkat pertumbuhan untuk menghindari perdagangan yang salah selama pertumbuhan yang lemah
  • Dapat secara ketat mengontrol rasio kerugian maksimum
  • Parameter periode EMA dapat disesuaikan secara fleksibel untuk siklus yang berbeda

Analisis Risiko

  • Garis EMA memiliki efek keterlambatan, mungkin kehilangan titik pembalikan harga
  • Perpindahan jalur memiliki beberapa keterlambatan, mungkin kehilangan titik masuk terbaik
  • Bergantung pada optimasi parameter, pengaturan yang tidak tepat dapat menyebabkan overtrading atau sinyal yang tidak cukup

Arahan Optimasi

  • Gabungkan dengan indikator lain seperti MACD, KD dll untuk meningkatkan akurasi sinyal
  • Tambahkan strategi stop loss seperti trailing stop loss untuk memaksimalkan keuntungan
  • Mengoptimalkan parameter periode EMA untuk pengaturan terbaik di berbagai produk
  • Mengintegrasikan data real-time dan metode pembelajaran mesin untuk penyesuaian dan optimalisasi parameter dinamis

Ringkasan

Strategi keseluruhan relatif sederhana dan dapat diandalkan, menggunakan crossover EMA ganda untuk menentukan tren harga dan menetapkan ambang batas tingkat pertumbuhan untuk menghasilkan sinyal perdagangan. Dibandingkan dengan crossover garis tunggal, ini dapat menyaring beberapa sinyal palsu. Tetapi garis EMA sendiri memiliki masalah keterlambatan. Menggabungkan indikator lain atau penyesuaian parameter dinamis dapat lebih meningkatkan kinerja strategi.


/*backtest
start: 2022-11-14 00:00:00
end: 2023-11-20 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="ema(ema10-21)", overlay=true, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, initial_capital = 15000, commission_type = strategy.commission.percent, commission_value = 0.2)

useTimeLimit    = input(defval = false, title = "Use Start Time Limiter?")
startYear       = input(defval = 2016, title = "Start From Year",  minval = 0, step = 1)
startMonth      = input(defval = 05, title = "Start From Month",  minval = 0,step = 1)
startDay        = input(defval = 01, title = "Start From Day",  minval = 0,step = 1)
startHour       = input(defval = 00, title = "Start From Hour",  minval = 0,step = 1)
startMinute     = input(defval = 00, title = "Start From Minute",  minval = 0,step = 1)

startTimeOk() => true

lenght0 = input(10)
lenght1 = input(21)

source = close

EmaShort = ema(ema(source, lenght0), lenght0)
EmaLong = ema(ema(source, lenght1),lenght1)
plot(EmaShort, color=red)
plot(EmaLong, color=purple)

growth = ((EmaShort-EmaLong)*100)/((EmaShort+EmaLong)/2)
thresholdUp = input(defval=0.05, title="Threshold Up", type=float, step=0.01)
thresholdDown = input(defval=-0.165, title="Threshold Down", type=float, step=0.001)

if( startTimeOk() )
    buy_condition = EmaShort > EmaLong and growth > thresholdUp
    buy_exit_condition = EmaShort < EmaLong and growth < thresholdDown
    strategy.entry("buy", strategy.long, comment="buy", when=buy_condition)
    strategy.close(id='buy', when=buy_exit_condition)

Lebih banyak