Dual Moving Average Crossover MACD Strategi Kuantitatif

Penulis:ChaoZhangTanggal: 2024-02-22 15:32:42
Tag:

img

Gambaran umum

Strategi ini menghasilkan indikator MACD dengan menghitung perbedaan antara garis rata-rata bergerak cepat dan lambat, dan menilai tren dan area overbought / oversold pasar keuangan bersama dengan garis sinyal.

Logika Strategi

Logika dasar adalah menggunakan indikator MACD yang dihasilkan dari perbedaan MA cepat dan lambat untuk menentukan arah tren pasar, dan garis sinyal untuk menilai tingkat overbought / oversold. Ketika MACD dan garis sinyal membentuk salib emas, itu adalah sinyal panjang untuk pergi panjang. Ketika membentuk salib mati, itu adalah sinyal pendek untuk pergi pendek. Sementara itu, ia menggunakan hubungan harga dengan MA 200 hari untuk menyaring sinyal, hanya mengambil sinyal panjang ketika harga di atas MA 200 hari dan sinyal pendek ketika harga di bawah MA 200 hari, sehingga menghindari whipsaws selama tren yang kuat.

Metode perhitungan spesifik adalah:

  1. Fast Moving Average (EMA 12 hari) dikurangi Slow Moving Average (EMA 26 hari) untuk mendapatkan MACD
  2. EMA 9 hari MACD untuk mendapatkan garis sinyal
  3. MACD dikurangi garis sinyal untuk mendapatkan histogram MACD

Ketika MACD melintasi di atas garis sinyal sementara keduanya berada di bawah 0, itu adalah sinyal panjang salib emas. Ketika MACD melintasi di bawah garis sinyal sementara keduanya berada di atas 0, itu adalah sinyal pendek salib mati. Sementara itu, hanya mengambil panjang ketika harga di atas 200 hari MA, dan pendek ketika harga di bawah 200 hari MA.

Keuntungan

  1. Menggunakan sistem indikator ganda menghindari keterbatasan indikator tunggal dan meningkatkan akurasi
  2. Menggabungkan aksi harga dan MA filter ganda menghindari whipsaws selama tren yang kuat
  3. Ruang pengoptimalan parameter yang besar untuk beradaptasi dengan lingkungan pasar yang berbeda
  4. Pengaturan parameter yang konservatif menghasilkan sinyal yang lebih sedikit tetapi berkualitas lebih tinggi
  5. Logika strategi yang sederhana dan mudah diterapkan

Risiko

  1. Volatilitas pasar dapat menyebabkan kesalahan dalam penilaian indikator
  2. Sifat keterlambatan AP mempengaruhi ketepatan waktu strategi
  3. Sinyal yang lebih sedikit mungkin kehilangan peluang tren
  4. Risiko optimasi berlebihan saat mengoptimalkan parameter
  5. Kurangnya kontrol penarikan dan mekanisme stop loss

Dapat mengurangi risiko dengan memperpendek periode MA, menambahkan indikator lain, dan menambahkan stop loss.

Arahan Optimasi

1.Diuji pada kerangka waktu yang berbeda dari 15m sampai 1D, hasil optimal pada 4H dalam pengembalian yang disesuaikan dengan risiko

2.Optimize MA cepat dan lambat sehingga MACD menangkap siklus, 7-21 baik untuk 15m

3.Hull MA untuk MACD memberikan hasil yang baik

4.Stoploss trailing meningkatkan manajemen risiko

Kesimpulan

Ini secara keseluruhan adalah strategi yang sangat sederhana dan praktis, menghasilkan sinyal perdagangan probabilitas tinggi melalui sistem indikator ganda dan penyaringan harga. Ini memiliki margin keuntungan yang relatif tinggi, menggunakan kombinasi parameter MACD klasik untuk menghindari over-optimasi. Masih ada ruang besar untuk optimasi dengan menyesuaikan parameter MA, menambahkan indikator lain dan mekanisme stop loss untuk meningkatkan kinerja. Secara keseluruhan ini adalah strategi kuantitatif khas berdasarkan dasar-dasar.


/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 00:00:00
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/
// © Hurmun

//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)


fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.bool, defval=false)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal


movinga2 = input(title="movinga 2", type=input.integer, defval=200)

movinga200 = sma(close, movinga2)

plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)
    
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
    
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100

longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)

shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
    
if (strategy.position_size > 0 )
    strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)






if (strategy.position_size < 0 )
    strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)

Lebih banyak