Strategi Crossover Rata-rata Bergerak Eksponensial

Penulis:ChaoZhang, Tanggal: 2023-10-17 16:55:10
Tag:

img

Gambaran umum

Ini adalah strategi perdagangan otomatis yang berjalan panjang atau pendek berdasarkan persilangan dua rata-rata bergerak eksponensial (EMA) dengan periode waktu yang berbeda.

Prinsip

Strategi ini menggunakan dua EMA, satu adalah EMA pada kerangka waktu yang lebih besar, dan yang lainnya adalah EMA pada kerangka waktu saat ini.

Secara khusus, strategi pertama mendefinisikan dua parameter EMA:

  1. tf - Kerangka waktu yang lebih besar, default harian.
  2. len - Panjang periode EMA, default 3.

Kemudian ia menghitung dua EMA:

  1. ma1 - EMA 3 hari pada kerangka waktu harian.
  2. ma2 - EMA 3 hari pada kerangka waktu saat ini.

Akhirnya, ia memasuki perdagangan berdasarkan:

  • Ketika ma2 > ma1, itu panjang.
  • Ketika ma2 < ma1, itu menjadi pendek.

Dengan menilai arah tren melalui persilangan antara dua EMA dari periode yang berbeda, itu mengotomatisasi perdagangan.

Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Prinsip sederhana, mudah dimengerti dan diterapkan, sangat cocok untuk pemula.
  2. Mengikuti tren, menaati tren, dapat menghasilkan keuntungan yang layak.
  3. Menggunakan EMA, yang lebih sensitif terhadap perubahan harga, dapat menangkap pembalikan tren tepat waktu.
  4. Kombinasi EMA dari periode yang berbeda dapat memanfaatkan kekuatan masing-masing dan meningkatkan stabilitas sistem.
  5. Tidak perlu terlalu banyak parameter, mudah untuk menguji dan mengoptimalkan, nyaman untuk perdagangan langsung.

Risiko

Strategi ini juga memiliki beberapa risiko:

  1. Trend lemah mengikuti kemampuan, dapat dihancurkan di berbagai pasar.
  2. Meninggalkan di crossover EMA ganda, mungkin kehilangan beberapa kesempatan.
  3. Tidak dapat secara efektif menyaring persilangan yang tidak teratur antara dua EMA.
  4. Bergantung hanya pada EMA sederhana, sulit untuk beradaptasi dengan pasar yang kompleks.

Risiko dapat dikurangi dengan mengatur stop loss, mengoptimalkan parameter, menambahkan indikator lain dll.

Optimalisasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Uji parameter EMA periode besar yang berbeda untuk menemukan kombinasi yang optimal.
  2. Tambahkan filter volume untuk menghindari sinyal palsu.
  3. Masukkan indikator tren untuk meningkatkan ukuran dan efisiensi posisi.
  4. Atur stop loss adaptif untuk mengontrol kerugian perdagangan tunggal.
  5. Mengoptimalkan ukuran posisi sesuai dengan kondisi pasar.
  6. Tambahkan model pembelajaran mesin untuk membuat strategi lebih cerdas.

Kesimpulan

Strategi EMA crossover menangkap tren dengan indikator sederhana, cocok untuk pemula untuk belajar dan berlatih.


/*backtest
start: 2023-09-16 00:00:00
end: 2023-10-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Noro's Singapore Strategy", shorttitle = "Singapore str", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot")
tf = input("D", title = "Big Timeframe")
len = input(3, minval = 1, title = "MA length")
src = input(close, title = "MA Source")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//MAs
ma1 = request.security(syminfo.tickerid, tf, sma(src, len))
ma2 = sma(src, len)
plot(ma1, linewidth = 2, color = blue, title = "Big TF MA")
plot(ma2, linewidth = 2, color = red, title = "MA")

//Trading
size = strategy.position_size
lot = 0.0
lot := size != size[1] ? strategy.equity / close * capital / 100 : lot[1]

if ma2 > ma1
    strategy.entry("L", strategy.long, needlong ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if ma2 < ma1
    strategy.entry("S", strategy.short, needshort ? lot : 0, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Lebih banyak