Strategi perdagangan kuantitatif crossover rata-rata bergerak eksponensial

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

img

Gambaran umum

Strategi ini menggunakan persilangan dua rata-rata bergerak eksponensial (EMA) sebagai sinyal beli dan jual. Ketika EMA periode pendek melintasi di atas EMA periode panjang dari bawah, itu menghasilkan sinyal beli; sebaliknya, ketika EMA periode pendek melintasi di bawah EMA periode panjang dari atas, itu menghasilkan sinyal jual. Selain itu, strategi menentukan apakah titik persilangan adalah harga tertinggi atau terendah dalam 10 periode perdagangan terakhir untuk mengkonfirmasi kekuatan tren. Jika titik persilangan adalah harga tertinggi, latar belakang akan berwarna hijau; jika itu adalah harga terendah, itu akan berwarna merah. Selain itu, strategi menampilkan harga titik persilangan pada grafik.

Prinsip Strategi

  1. Menghitung dua EMA dengan periode yang berbeda, dengan periode default 5 dan 10.
  2. Tentukan apakah dua EMA menyeberang. Jika EMA jangka pendek menyeberang di atas EMA jangka panjang dari bawah, itu menghasilkan sinyal beli; jika EMA jangka pendek menyeberang di bawah EMA jangka panjang dari atas, itu menghasilkan sinyal jual.
  3. Ketika sinyal crossover terjadi, tentukan apakah titik crossover saat ini adalah harga tertinggi atau terendah dalam 10 periode perdagangan terakhir.
  4. Jika sinyal beli dihasilkan dan tidak ada posisi saat ini, buka posisi panjang; jika sinyal jual dihasilkan dan tidak ada posisi saat ini, buka posisi pendek.
  5. Jika posisi panjang dipegang dan EMA jangka pendek melintasi di bawah EMA jangka panjang dari atas, tutup posisi panjang; jika posisi pendek dipegang dan EMA jangka pendek melintasi di atas EMA jangka panjang dari bawah, tutup posisi pendek.

Keuntungan Strategi

  1. Rata-rata bergerak eksponensial bereaksi lebih cepat terhadap perubahan harga dibandingkan dengan rata-rata bergerak sederhana, sehingga menghasilkan sinyal perdagangan yang lebih tepat waktu.
  2. Dengan menentukan apakah titik persimpangan adalah harga tertinggi atau terendah terbaru, dapat menyaring peluang perdagangan dengan kekuatan tren yang lebih besar dan meningkatkan profitabilitas strategi.
  3. Menandai harga titik silang pada grafik memberikan pedagang referensi perdagangan yang lebih intuitif.
  4. Logika kode jelas dan mudah dipahami dan diimplementasikan.

Risiko Strategi

  1. Sinyal yang dihasilkan oleh penyeberangan EMA mungkin memiliki keterlambatan, sehingga kehilangan peluang perdagangan terbaik.
  2. Di pasar yang berfluktuasi, penyeberangan EMA dapat sering terjadi, mengakibatkan frekuensi perdagangan yang berlebihan dan peningkatan biaya perdagangan.
  3. Strategi tidak memiliki langkah-langkah stop loss, jadi jika penilaian salah, itu mungkin menghadapi risiko penarikan yang lebih besar.

Arah Optimasi Strategi

  1. Memperkenalkan lebih banyak indikator teknis, seperti RSI, MACD, dll., Untuk membantu menilai kekuatan dan arah tren, dan meningkatkan akurasi sinyal.
  2. Menetapkan tingkat stop loss dan take profit yang wajar untuk mengendalikan risiko perdagangan tunggal.
  3. Mengoptimalkan parameter perdagangan, seperti periode EMA dan jendela waktu konfirmasi silang, untuk meningkatkan kemampuan adaptasi strategi.
  4. Menggabungkan indikator sentimen pasar, seperti VIX, untuk menyaring sinyal perdagangan dan mengurangi sinyal palsu.
  5. Pertimbangkan untuk menambahkan modul manajemen posisi dan manajemen modal untuk menyesuaikan jumlah dana secara dinamis untuk setiap perdagangan dan meningkatkan efisiensi pemanfaatan modal.

Ringkasan

Strategi ini menggunakan crossover rata-rata bergerak eksponensial sebagai logika utamanya, sementara juga mempertimbangkan posisi relatif harga titik crossover dalam periode terakhir untuk menentukan kekuatan tren. Secara keseluruhan, logika strategi jelas, dan kelebihannya jelas, tetapi juga memiliki keterbatasan dan risiko tertentu. Dengan memperkenalkan lebih banyak indikator penilaian bantu, menetapkan langkah-langkah pengendalian risiko yang wajar, dan mengoptimalkan parameter kunci, stabilitas dan profitabilitas strategi ini dapat ditingkatkan lebih lanjut.


/*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 banyak