Strategi Dagangan Kuantitatif Berdasarkan Crossover EMA Berganda

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

img

Ringkasan

Strategi ini menghasilkan isyarat perdagangan dengan mengira persilangan antara dua garis EMA tempoh yang berbeza untuk menentukan trend pasaran. Ia akan membuka kedudukan panjang apabila EMA tempoh yang lebih pendek melintasi EMA tempoh yang lebih lama, menunjukkan aliran menaik, dan ia akan menutup kedudukan apabila EMA tempoh yang lebih pendek melintasi di bawah EMA tempoh yang lebih lama, menunjukkan aliran menurun.

Prinsip-prinsip

Strategi ini terutamanya menggunakan teori salib emas dan salib kematian garis EMA berganda. Garis EMA berganda terdiri daripada EMA panjang dan EMA pendek. Parameter EMA pendek ditetapkan kepada 10 hari dan parameter EMA panjang ditetapkan kepada 21 hari.

Apabila EMA pendek melintasi EMA panjang, isyarat beli dihasilkan. Apabila EMA pendek melintasi di bawah EMA panjang, isyarat jual dihasilkan. Strategi ini juga menetapkan ambang kadar pertumbuhan, membuka kedudukan panjang hanya apabila pertumbuhan melebihi ambang positif dan menutup kedudukan hanya apabila penurunan melebihi ambang negatif.

Khususnya, syarat beli adalah apabila EMA pendek lebih tinggi daripada EMA panjang dan kadar pertumbuhan stok melebihi ambang positif.

Kelebihan

  • Menggunakan teori salib emas dan salib kematian garis EMA berganda untuk kesederhanaan dan kebolehpercayaan
  • Menambah ambang kadar pertumbuhan untuk mengelakkan perdagangan yang salah semasa pertumbuhan yang lemah
  • Boleh mengawal secara ketat nisbah kerugian maksimum
  • Parameter tempoh EMA boleh diselaraskan secara fleksibel untuk kitaran yang berbeza

Analisis Risiko

  • Garis EMA mempunyai kesan kelewatan, mungkin kehilangan titik pembalikan harga
  • Persalinan garis mempunyai beberapa kelewatan, mungkin kehilangan titik masuk terbaik
  • Bergantung pada pengoptimuman parameter, tetapan yang tidak betul boleh menyebabkan overtrading atau isyarat yang tidak mencukupi

Arahan pengoptimuman

  • Gabungkan dengan penunjuk lain seperti MACD, KD dll untuk meningkatkan ketepatan isyarat
  • Tambah strategi stop loss seperti trailing stop loss untuk memaksimumkan keuntungan
  • Mengoptimumkan parameter tempoh EMA untuk tetapan terbaik di seluruh produk yang berbeza
  • Menggabungkan data masa nyata dan kaedah pembelajaran mesin untuk pelarasan parameter dinamik dan pengoptimuman

Ringkasan

Strategi keseluruhan adalah agak mudah dan boleh dipercayai, menggunakan silang EMA berganda untuk menentukan trend harga dan menetapkan ambang kadar pertumbuhan untuk menghasilkan isyarat perdagangan. Berbanding dengan silang garis tunggal, ia boleh menapis beberapa isyarat palsu. Tetapi garis EMA sendiri mempunyai masalah yang tertinggal. Menggabungkan penunjuk lain atau pelarasan parameter dinamik dapat meningkatkan prestasi 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 lanjut