Strategi Perdagangan Kuantitatif EMA

Penulis:ChaoZhang, Tarikh: 2024-01-29 15:56:56
Tag:

img

Ringkasan

Ini adalah strategi perdagangan kuantitatif silang EMA. Ia menggunakan dua EMA dengan tempoh yang berbeza sebagai isyarat perdagangan, pergi lama apabila EMA tempoh yang lebih pendek melintasi EMA tempoh yang lebih lama dan pergi pendek apabila EMA tempoh yang lebih pendek melintasi di bawah EMA tempoh yang lebih lama.

Logika Strategi

Strategi ini menggunakan salib emas dan salib kematian EMA sebagai isyarat dagangan. Secara khusus, ia mengira EMA tempoh pendek dan EMA tempoh panjang masing-masing. Apabila EMA tempoh pendek melintasi EMA tempoh panjang, ia menghasilkan isyarat beli untuk pergi lama. Apabila EMA tempoh pendek melintasi di bawah EMA tempoh panjang, ia menghasilkan isyarat jual untuk pergi pendek. Oleh itu, trend bergerak EMA menentukan arah dagangan.

Selepas memasuki kedudukan, strategi ini juga menetapkan stop loss dan mengambil keuntungan secara serentak. Stop loss adalah peratusan tertentu daripada harga kemasukan sebagai garisan stop loss. Jika harga menyentuh garisan stop loss, ia akan keluar dari kedudukan untuk stop loss. Take profit adalah peratusan tertentu daripada harga kemasukan sebagai garisan mengambil keuntungan. Jika harga menyentuh garisan mengambil keuntungan, ia akan keluar dari kedudukan untuk mengambil keuntungan.

Strategi ini juga membolehkan memilih hanya perdagangan intraday atau perdagangan kedudukan yang panjang, hanya pendek.

Analisis Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Menggunakan penunjuk EMA untuk menapis bunyi bising dan menangkap trend pertengahan jangka panjang dengan lancar.

  2. Mengambil crossover EMA antara tempoh yang lebih pendek dan lebih lama sebagai isyarat perdagangan untuk mengelakkan perdagangan berlebihan.

  3. Menetapkan stop loss dan mengambil keuntungan untuk mengawal nisbah risiko-balasan setiap perdagangan, yang baik untuk pengurusan wang.

  4. Membolehkan hanya perdagangan panjang, hanya pendek, intraday dan kedudukan sesuai dengan jenis peniaga yang berbeza.

  5. Menyokong pelbagai aset perdagangan seperti saham, forex, cryptocurrency dan lain-lain

Analisis Risiko

Strategi ini juga mempunyai beberapa risiko berpotensi:

  1. Penunjuk EMA mempunyai kesan kelewatan dan mungkin terlepas beberapa titik perubahan trend jangka pendek.

  2. Pilihan yang tidak sesuai untuk tempoh EMA yang lebih pendek dan lebih lama boleh menyebabkan isyarat perdagangan yang berantakan.

  3. Memegang kedudukan terlalu lama boleh mengambil fluktuasi pasaran yang lebih besar.

  4. Stop loss mekanikal dan mengambil keuntungan boleh keluar dari kedudukan terlalu awal atau mengurangkan keuntungan lebih awal.

Pengukuran pengurusan risiko yang sepadan:

  1. Mengoptimumkan parameter EMA untuk mencari kombinasi tempoh terbaik.

  2. Tambahkan penunjuk lain sebagai penilaian tambahan.

  3. Sesuaikan stop loss dan ambil keuntungan secara dinamik.

  4. Manual campur tangan keadaan pasaran yang luar biasa.

Arahan pengoptimuman

Strategi ini boleh dioptimumkan dalam aspek berikut:

  1. Pengoptimuman terbaik parameter EMA untuk mencari kombinasi jangka pendek dan jangka panjang yang sesuai untuk aset dagangan yang berbeza.

  2. Tambah penunjuk lain seperti MACD, KD untuk sinergi pelbagai penunjuk.

  3. Tambah model pembelajaran mesin untuk menjana stop loss dinamik dan mengambil keuntungan.

  4. Sambungkan penunjuk RISK yang lebih maju untuk kejuruteraan ciri.

  5. Tambah komponen perdagangan adaptif untuk parameter pengoptimuman diri.

Ringkasan

Ringkasnya, ini adalah trend yang sangat baik mengikuti templat strategi. Kekuatannya terletak pada menggunakan penunjuk EMA untuk menapis bunyi bising dan mencapai keuntungan yang stabil, sambil memiliki pengurusan risiko-balasan yang komprehensif. Melalui pengoptimuman berterusan, strategi ini boleh menjadi strategi kuantitatif sejagat di seluruh pasaran dan berbaloi bagi peniaga untuk belajar dan berlatih.


/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMA Crossover Strategy by Vikrant Singh", overlay=true)


// Input for EMA Lengths
var bool runningPOS = false
var float stopLossLevel = na
var float targetLevel = na
shortLength = input(11, title="Short EMA Length")
longLength = input(21, title="Long EMA Length")

// Input for Stop-Loss and Target
stopLossPct = input(1, title="Stop-Loss (%)")
targetPct = input(3, title="Target (%)")
longOnly = input(true, title="Long Only")
intraDay = input(true, title="intraday?")


// Calculate EMAs
emaShort = ta.ema(close, shortLength)
emaLong = ta.ema(close, longLength)

// Calculate crossover conditions
crossoverCondition = ta.crossover(emaShort, emaLong)
crossunderCondition = ta.crossunder(emaShort, emaLong)

// Entry condition (long position just before crossover)
if crossoverCondition and not runningPOS and longOnly and (hour <= 15)
    strategy.entry("Long", strategy.long)
    runningPOS := true
    stopLossLevel := close * (1 - stopLossPct / 100)
    targetLevel := close * (1 + targetPct / 100)

//Entry condition (short position just before crossover)
if crossunderCondition and not runningPOS and not longOnly and (hour <= 15)
    strategy.entry("Short", strategy.short)
    runningPOS := true
    stopLossLevel := close * (1 + stopLossPct / 100)
    targetLevel := close * (1 - targetPct / 100)

// Exit conditions (square off on reverse crossover)
//Exit long
if (crossunderCondition or (low < stopLossLevel) or (high > targetLevel) ) and longOnly and runningPOS
    strategy.close("Long",comment = "Exit long")// ("Long", from_entry="Long",stop=stopLossLevel, limit=targetLevel)
    runningPOS := false

//Exit short
if (crossoverCondition or (high > stopLossLevel) or (low < targetLevel) ) and not longOnly and runningPOS
    strategy.close("Short", comment = "Exit Short")
    runningPOS := false

if intraDay and runningPOS
    if (hour >= 15)
        strategy.close_all(comment = "Intraday square off")
        //strategy.close("Long",comment = "intraday square off")
        runningPOS := false


// Plot EMAs
plot(emaShort, color=color.blue, title="Short EMA")
plot(emaLong, color=color.red, title="Long EMA")

Lebih lanjut