Strategi Kuantitatif MACD Crossover Purata Bergerak Berganda

Penulis:ChaoZhang, Tarikh: 2024-02-22 15:32:42
Tag:

img

Ringkasan

Strategi ini menjana penunjuk MACD dengan mengira perbezaan antara garis purata bergerak pantas dan perlahan, dan menilai trend dan kawasan overbought / oversold pasaran kewangan bersama-sama dengan garis isyarat.

Logika Strategi

Logik asasnya adalah menggunakan penunjuk MACD yang dihasilkan dari perbezaan MA cepat dan perlahan untuk menentukan arah trend pasaran, dan garis isyarat untuk menilai tahap overbought / oversold. Apabila MACD dan garis isyarat membentuk salib emas, ia adalah isyarat panjang untuk pergi lama. Apabila membentuk salib mati, ia adalah isyarat pendek untuk pergi pendek. Sementara itu, ia menggunakan hubungan harga dengan MA 200 hari untuk menapis isyarat, hanya mengambil isyarat panjang apabila harga di atas MA 200 hari dan isyarat pendek apabila harga di bawah MA 200 hari, untuk mengelakkan whipsaws semasa trend yang kuat.

Kaedah pengiraan khusus ialah:

  1. Purata Bergerak Cepat (EMA 12 hari) dikurangkan Purata Bergerak Perlahan (EMA 26 hari) untuk mendapatkan MACD
  2. EMA 9 hari MACD untuk mendapatkan garis isyarat
  3. MACD tolak garis isyarat untuk mendapatkan histogram MACD

Apabila MACD melintasi di atas garis isyarat sementara kedua-duanya di bawah 0, ia adalah isyarat panjang salib emas. Apabila MACD melintasi di bawah garis isyarat sementara kedua-duanya di atas 0, ia adalah isyarat pendek salib mati. Sementara itu, hanya mengambil masa yang lama apabila harga di atas 200 hari MA, dan pendek apabila harga di bawah 200 hari MA.

Kelebihan

  1. Menggunakan sistem penunjuk berganda mengelakkan batasan penunjuk tunggal dan meningkatkan ketepatan
  2. Menggabungkan tindakan harga dan penapis ganda MA mengelakkan whipsaws semasa trend yang kuat
  3. Ruang pengoptimuman parameter yang besar untuk menyesuaikan diri dengan persekitaran pasaran yang berbeza
  4. Tetapan parameter konservatif membawa kepada isyarat yang kurang tetapi berkualiti tinggi
  5. Logik strategi yang mudah dan mudah dilaksanakan

Risiko

  1. Volatiliti pasaran boleh menyebabkan kesilapan dalam penilaian penunjuk
  2. Sifat keterlambatan PEM mempengaruhi ketepatan masa strategi
  3. Lebih sedikit isyarat mungkin terlepas peluang trend
  4. Risiko pengoptimuman berlebihan apabila mengoptimumkan parameter
  5. Kekurangan kawalan pengambilan dan mekanisme berhenti kerugian

Boleh mengurangkan risiko dengan memendekkan tempoh MA, menambah penunjuk lain, dan menambah stop loss.

Arahan pengoptimuman

1.Diuji pada jangka masa yang berbeza dari 15m hingga 1D, hasil yang optimum pada 4H dalam pulangan yang disesuaikan dengan risiko

2.Optimize MA pantas dan perlahan supaya MACD menangkap kitaran, 7-21 baik untuk 15m

3.Hull MA untuk MACD memberikan hasil yang baik

4.Penghentian kerugian menyempurnakan pengurusan risiko

Kesimpulan

Ini secara keseluruhan adalah strategi yang sangat mudah dan praktikal, menghasilkan isyarat perdagangan kebarangkalian tinggi melalui sistem penunjuk berganda dan penapisan harga. Ia mempunyai margin keuntungan yang agak tinggi, menggunakan kombinasi parameter MACD klasik untuk mengelakkan pengoptimuman berlebihan. Masih ada ruang yang besar untuk pengoptimuman dengan menyesuaikan parameter MA, menambahkan penunjuk lain dan mekanisme hentian kerugian untuk meningkatkan prestasi. Secara keseluruhan, ini adalah strategi kuantitatif biasa berdasarkan asas.


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