Strategi Dagangan Kuantitatif Crossover Eksponensial Moving Average

Penulis:ChaoZhang, Tarikh: 2024-03-29 10:59:57
Tag:

img

Ringkasan

Strategi ini menggunakan persilangan dua purata bergerak eksponensial (EMA) sebagai isyarat beli dan jual. Apabila EMA tempoh pendek melintasi di atas EMA tempoh panjang dari bawah, ia menghasilkan isyarat beli; sebaliknya, apabila EMA tempoh pendek melintasi di bawah EMA tempoh panjang dari atas, ia menghasilkan isyarat jual. Di samping itu, strategi menentukan sama ada titik persilangan adalah harga tertinggi atau terendah dalam 10 tempoh perdagangan terakhir untuk mengesahkan kekuatan trend. Jika titik persilangan adalah harga tertinggi, latar belakang akan berwarna hijau; jika ia adalah harga terendah, ia akan berwarna merah.

Prinsip Strategi

  1. Mengira dua EMA dengan tempoh yang berbeza, dengan tempoh lalai 5 dan 10.
  2. Tentukan sama ada kedua-dua EMA menyeberang. Jika EMA jangka pendek menyeberang di atas EMA jangka panjang dari bawah, ia menghasilkan isyarat beli; jika EMA jangka pendek menyeberang di bawah EMA jangka panjang dari atas, ia menghasilkan isyarat jual.
  3. Apabila isyarat crossover berlaku, tentukan sama ada titik crossover semasa adalah harga tertinggi atau terendah dalam 10 tempoh dagangan terakhir.
  4. Jika isyarat beli dihasilkan dan tidak ada kedudukan semasa, buka kedudukan panjang; jika isyarat jual dihasilkan dan tidak ada kedudukan semasa, buka kedudukan pendek.
  5. Jika kedudukan panjang dipegang dan EMA jangka pendek melintasi di bawah EMA jangka panjang dari atas, tutup kedudukan panjang; jika kedudukan pendek dipegang dan EMA jangka pendek melintasi di atas EMA jangka panjang dari bawah, tutup kedudukan pendek.

Kelebihan Strategi

  1. Purata bergerak eksponen bertindak balas lebih cepat terhadap perubahan harga berbanding dengan purata bergerak mudah, sehingga menghasilkan isyarat perdagangan yang lebih tepat pada masanya.
  2. Dengan menentukan sama ada titik persimpangan adalah harga tertinggi atau terendah baru-baru ini, ia boleh menapis peluang perdagangan dengan kekuatan trend yang lebih besar dan meningkatkan keuntungan strategi.
  3. Menandakan harga titik silang pada carta memberikan peniaga dengan rujukan perdagangan yang lebih intuitif.
  4. Logik kod adalah jelas dan mudah difahami dan dilaksanakan.

Risiko Strategi

  1. Isyarat yang dihasilkan oleh persimpangan EMA mungkin mempunyai kelewatan, yang menyebabkan peluang perdagangan terbaik hilang.
  2. Dalam pasaran yang berfluktuasi, persilangan EMA boleh berlaku dengan kerap, mengakibatkan kekerapan dagangan yang berlebihan dan peningkatan kos dagangan.
  3. Strategi ini tidak mempunyai langkah-langkah stop-loss, jadi jika pertimbangan itu salah, ia mungkin menghadapi risiko pengeluaran yang lebih besar.

Arahan Pengoptimuman Strategi

  1. Memperkenalkan lebih banyak penunjuk teknikal, seperti RSI, MACD, dan lain-lain, untuk membantu menilai kekuatan trend dan arah, dan meningkatkan ketepatan isyarat.
  2. Menetapkan paras stop-loss dan mengambil keuntungan yang munasabah untuk mengawal risiko perdagangan tunggal.
  3. Mengoptimumkan parameter dagangan, seperti tempoh EMA dan tetingkap masa pengesahan silang, untuk meningkatkan kesesuaian strategi.
  4. Gabungkan penunjuk sentimen pasaran, seperti VIX, untuk menapis isyarat perdagangan dan mengurangkan isyarat palsu.
  5. Pertimbangkan untuk menambah modul pengurusan kedudukan dan pengurusan modal untuk menyesuaikan jumlah dana secara dinamik untuk setiap perdagangan dan meningkatkan kecekapan penggunaan modal.

Ringkasan

Strategi ini menggunakan persimpangan purata bergerak eksponensial sebagai logik utamanya, sambil juga mempertimbangkan kedudukan relatif harga titik persimpangan dalam tempoh baru-baru ini untuk menentukan kekuatan trend. Secara keseluruhan, logik strategi jelas, dan kelebihan jelas, tetapi ia juga mempunyai batasan dan risiko tertentu. Dengan memperkenalkan lebih banyak penunjuk penilaian tambahan, menetapkan langkah kawalan risiko yang munasabah, dan mengoptimumkan parameter utama, kestabilan dan keuntungan strategi ini dapat ditingkatkan lagi.


/*backtest
start: 2024-02-01 00:00:00
end: 2024-02-29 23:59:59
period: 1h
basePeriod: 15m
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
// @version=5
strategy("ema giao nhau", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// Get user input
emaLength1 = input.int(title="EMA #1 Length", defval=5)
emaLength2 = input.int(title="EMA #2 Length", defval=10)

// Get MAs
ema1 = ta.ema(close, emaLength1)
ema2 = ta.ema(close, emaLength2)

// Draw MAs
plot(ema1, color=color.blue, title="EMA 1")
plot(ema2, color=color.red, title="EMA 2")

// Detect crossovers
bool crossOver = ta.crossover(ema1, ema2)
bool crossUnder = ta.crossunder(ema1, ema2)
bool cross = crossOver or crossUnder
//float crossPrice = ta.valuewhen(cross, close, 0)
float crossPrice = cross ? close : na

// Check if the crossover price is the highest price over the past 10 bars
bool highestPrice = crossOver
for i = 1 to 10
    if crossPrice <= close[i]
        highestPrice := false
        break

// Check if the crossover price is the lowest price over the past 10 bars
bool lowestPrice = crossUnder
for i = 1 to 10
    if crossPrice >= close[i]
        lowestPrice := false
        break

// Flag the bar if it is a high/low close
bgcolor(highestPrice ? color.new(color.green, 50) : na)
bgcolor(lowestPrice ? color.new(color.red, 50) : na)

// Display crossover price
if cross
    highestEmaPrice = ema1 > ema2 ? ema1 : ema2
    label myLabel = label.new(bar_index, highestEmaPrice, "CrossPrice=" + str.tostring(crossPrice), color=color.white)
    if highestPrice and strategy.position_size == 0
        strategy.entry(id="Buy", direction=strategy.long)
    if lowestPrice and strategy.position_size == 0
        strategy.entry(id="Sell", direction=strategy.short)

// Exit trades when short-term EMA is breached
if strategy.position_size > 0 and crossUnder
    strategy.close("Buy")
if strategy.position_size < 0 and crossOver
    strategy.close("Sell")

Lebih lanjut