
Strategi tangkapan dan penapisan isyarat trend MACD berganda adalah strategi perdagangan kuantitatif yang berdasarkan pada penunjuk penyebaran purata bergerak (MACD) pada dua bingkai masa yang berbeza. Strategi ini menangkap peluang perdagangan pasaran dengan menggabungkan isyarat trend jangka pendek dan jangka panjang, menapis bunyi pasaran dengan berkesan, dan meningkatkan ketepatan isyarat perdagangan.
Strategi ini berpusat pada penggunaan dua penunjuk MACD: MACD1 (pendek) dan MACD2 (panjang). MACD1 mempunyai panjang cepat default 34, panjang perlahan 144, dan isyarat lancar 9, untuk mengesan perubahan trend jangka pendek; MACD2 mempunyai panjang cepat default 100, panjang perlahan 200, dan isyarat lancar 50, untuk menilai arah trend jangka panjang. Pengguna boleh menyesuaikan laju, kelajuan dan isyarat panjang, dan dalam pengiraan memilih SMA (rata-rata bergerak sederhana) atau EMA (rata-rata bergerak indeks).
Prinsip utama strategi MACD berganda adalah untuk mengenal pasti trend pasaran dan menghasilkan isyarat perdagangan melalui indikator MACD pada dua bingkai masa yang berbeza. Kod strategi terlebih dahulu mengira dua indikator MACD dan parameter yang berkaitan:
MACD1 (indikator jangka pendek):
MACD2 (indikator jangka panjang):
Logik transaksi direka dengan jelas dan ketat:
Ada beberapa syarat:
Syarat kosong:
Strategi ini juga merangkumi langkah-langkah pengurusan risiko, menetapkan parameter berhenti dan hentian yang boleh disesuaikan, dengan stop default 1% (min 0.1%), hentian adalah 1.5% (min 0.1%), dan pengiraan berdasarkan pergerakan harga masuk. Perdagangan diproses pada penutupan K untuk memastikan kestabilan isyarat.
Dengan menganalisis kod secara mendalam, strategi MACD berganda ini menunjukkan beberapa kelebihan:
Mekanisme pengesahan trend ganda: Dengan menggabungkan MACD jangka pendek dan MACD jangka panjang, strategi dapat menyaring bunyi pasaran dengan berkesan, mengurangkan isyarat palsu, dan meningkatkan ketepatan perdagangan. Strategi hanya akan menghasilkan isyarat perdagangan apabila isyarat jangka pendek dan jangka panjang sesuai.
Tetapan parameter yang fleksibel: Dasar membolehkan pengguna menyesuaikan parameter MACD ((panjang cepat, panjang lambat dan kehalusan isyarat) dan kaedah pengiraan ((SMA atau EMA), membolehkan strategi menyesuaikan diri dengan keadaan pasaran dan pilihan pengguna yang berbeza.
Maklum balas visual yang intuitif: Strategi ini menunjukkan kekuatan trend secara intuitif dengan perubahan warna yang dinamik ((tren naik menjadi hijau gelap, tren turun menjadi merah gelap) untuk membantu peniaga memahami keadaan pasaran dengan lebih baik.
Pengurusan risiko yang baik: parameter berhenti dan berhenti yang boleh disesuaikan, melindungi keselamatan dana dan mengunci keuntungan. Parameter ini boleh disesuaikan dengan turun naik pasaran dan toleransi risiko individu.
Fungsi amaran masa nyata: Strategi menyediakan amaran isyarat masuk ke atas dan ke bawah, memudahkan pemantauan dan automasi perdagangan dalam masa nyata, membolehkan peniaga mengambil peluang pasaran tepat pada masanya.
Kebolehgunaan yang meluas: Strategi ini boleh digunakan dalam pelbagai pasaran kewangan, termasuk saham, niaga hadapan dan forex, menjadikannya alat praktikal untuk pelbagai senario perdagangan.
Walaupun reka bentuk strategi MACD berganda adalah munasabah, terdapat beberapa risiko yang berpotensi:
Risiko trend reversal: Dalam pasaran yang bergolak, trend boleh berbalik dengan cepat, menyebabkan strategi mengalami kerugian. Walaupun terdapat tetapan stop loss, dalam keadaan pasaran yang melampau, harga stop loss sebenarnya mungkin tergelincir dengan teruk.
Sensitiviti parameter: Prestasi strategi sangat bergantung pada tetapan parameter MACD. Parameter yang tidak sesuai boleh menyebabkan terlalu banyak isyarat palsu atau kehilangan peluang perdagangan penting. Pengguna perlu mengoptimumkan parameter dengan teliti mengikut pasaran dan jangka masa tertentu.
Masalah keterbelakangan: MACD pada dasarnya adalah penunjuk keterbelakangan, yang dikira berdasarkan data harga sejarah. Dalam pasaran yang berubah dengan cepat, isyarat mungkin datang terlambat, terlepas titik masuk terbaik atau menyebabkan kerugian yang tidak perlu.
Performa buruk di pasaran mendatar: Strategi ini berfungsi dengan baik di pasaran yang sedang tren yang kuat, tetapi boleh menghasilkan isyarat palsu yang kerap di pasaran mendatar atau tanpa arah, yang menyebabkan kerugian kecil berturut-turut.
Risiko Pengurusan Wang: Tetapan lalai untuk menggunakan 100% dana akaun untuk berdagang, yang boleh menyebabkan kelebihan leverage dan pengurusan wang yang tidak betul. Pedagang harus mempertimbangkan untuk mengurangkan peratusan dana setiap perdagangan untuk menguruskan risiko dengan lebih baik.
Untuk mengurangkan risiko ini, peniaga harus mempertimbangkan: cross-verifikasi dalam kombinasi dengan petunjuk teknikal lain; mengkaji semula dan mengoptimumkan parameter strategi secara berkala; menyesuaikan peruntukan dana mengikut keadaan pasaran; campur tangan secara manual dalam keadaan pasaran yang melampau; dan menetapkan nisbah risiko / pulangan yang wajar.
Dengan analisis mendalam kod, berikut adalah arah pengoptimuman yang mungkin:
Menambah syarat penapisan: Indeks teknikal tambahan (seperti RSI atau Brinks) boleh ditambah sebagai penapis untuk mengurangkan isyarat palsu. Sebagai contoh, perdagangan hanya dilakukan apabila RSI menunjukkan bahawa pasaran tidak terlalu banyak membeli / terlalu banyak dijual.
Parameter penyesuaian diri: mewujudkan penyesuaian penyesuaian diri kepada parameter MACD, menyesuaikan secara automatik mengikut turun naik pasaran. Dalam pasaran yang lebih turun naik, anda boleh meningkatkan panjang cepat dan lambat untuk mengurangkan bunyi; dalam pasaran yang kurang turun naik, anda boleh mengurangkan parameter untuk meningkatkan kepekaan.
Strategi penangguhan yang lebih baik: mencapai penangguhan dinamik berdasarkan turun naik, seperti penempatan penangguhan berdasarkan ATR (rata-rata real amplitudo turun naik) dan bukannya peratusan tetap. Ini akan menjadikan penangguhan lebih sesuai dengan keadaan pasaran semasa.
Menambah mekanisme penutupan separa: membenarkan penutupan separa apabila sasaran keuntungan tertentu dicapai, mengunci sebahagian keuntungan dan membiarkan kedudukan yang tersisa terus mendapat keuntungan.
Penapis masa dagangan: Tambah penapis masa dagangan untuk mengelakkan dagangan pada masa turun naik yang tinggi atau semasa turun naik yang rendah seperti masa pasaran terbuka / ditutup.
Pengurusan wang yang dioptimumkan: Pengurusan wang berdasarkan Kelly atau model risiko peratusan tetap, dengan saiz kedudukan yang disesuaikan secara dinamik mengikut kadar kemenangan dan nisbah risiko / pulangan.
Gabungkan beberapa tempoh masa: Selain dua MACD semasa, pertimbangkan untuk menambah MACD ketiga yang lebih lama untuk memberikan perspektif pasaran yang lebih menyeluruh.
Klasifikasi keadaan pasaran: Tambahkan logik klasifikasi keadaan pasaran (seperti pasaran trend vs pasaran setapak) dan sesuaikan strategi dan parameter perdagangan mengikut keadaan pasaran yang berbeza.
Pengoptimuman ini dapat meningkatkan kebolehan dan kebolehan beradaptasi strategi, yang membolehkan ia mengekalkan prestasi yang baik dalam pelbagai keadaan pasaran.
Strategi menangkap dan memfilterkan isyarat trend MACD berganda mencipta sistem pengesanan trend yang kuat dengan menggabungkan indikator MACD jangka pendek dan jangka panjang. Kelebihan utama strategi ini adalah mekanisme pengesahan ganda yang ketat, yang berkesan mengurangkan isyarat palsu dan meningkatkan ketepatan perdagangan.
Walaupun terdapat risiko seperti pembalikan trend, sensitiviti parameter, dan prestasi pasaran yang tidak baik, risiko ini dapat dikawal dengan berkesan dengan langkah-langkah pengurusan risiko dan strategi pengoptimuman yang sesuai. Arah pengoptimuman masa depan boleh merangkumi penambahan syarat penapis tambahan, mencapai parameter penyesuaian, meningkatkan strategi penangguhan kerugian dan pengoptimuman pengurusan wang.
Secara keseluruhannya, strategi Dual MACD menyediakan kerangka yang kukuh untuk peniaga kuantitatif, terutamanya untuk peniaga trend jangka pendek dan sederhana. Dengan menggabungkan alat analisis teknikal klasik dengan peraturan perdagangan yang fleksibel, strategi ini menyediakan sistem perdagangan yang mantap untuk peniaga yang mencari pulangan yang konsisten.
/*backtest
start: 2024-03-25 00:00:00
end: 2025-03-24 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=6
strategy(title="Dual MACD Strategy [Jason Kasei]", shorttitle="DualMACD", overlay=false, margin_long=0, margin_short=0, default_qty_type=strategy.percent_of_equity,
default_qty_value=100, process_orders_on_close=true, initial_capital=10000)
// --- 输入参数 ---
// MACD1 参数
macd1_fast_length = input.int(title="MACD1 Fast Length", defval=34)
macd1_slow_length = input.int(title="MACD1 Slow Length", defval=144)
macd1_signal_length = input.int(title="MACD1 Signal Smoothing", minval=1, maxval=50, defval=9)
macd1_sma_source = input.string(title="MACD1 Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
macd1_sma_signal = input.string(title="MACD1 Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// MACD2 参数
macd2_fast_length = input.int(title="MACD2 Fast Length", defval=100)
macd2_slow_length = input.int(title="MACD2 Slow Length", defval=200)
macd2_signal_length = input.int(title="MACD2 Signal Smoothing", minval=1, maxval=50, defval=50)
macd2_sma_source = input.string(title="MACD2 Oscillator MA Type", defval="EMA", options=["SMA", "EMA"])
macd2_sma_signal = input.string(title="MACD2 Signal Line MA Type", defval="EMA", options=["SMA", "EMA"])
// 止损止盈参数
stop_loss_pct = input.float(title="Stop Loss %", defval=1.0, minval=0.1, step=0.1)
take_profit_pct = input.float(title="Take Profit %", defval=1.5, minval=0.1, step=0.1)
// --- 计算 MACD1 ---
src = close
macd1_fast_ma = macd1_sma_source == "SMA" ? ta.sma(src, macd1_fast_length) : ta.ema(src, macd1_fast_length)
macd1_slow_ma = macd1_sma_source == "SMA" ? ta.sma(src, macd1_slow_length) : ta.ema(src, macd1_slow_length)
macd1 = macd1_fast_ma - macd1_slow_ma
macd1_signal = macd1_sma_signal == "SMA" ? ta.sma(macd1, macd1_signal_length) : ta.ema(macd1, macd1_signal_length)
macd1_hist = macd1 - macd1_signal
// --- 计算 MACD2 ---
macd2_fast_ma = macd2_sma_source == "SMA" ? ta.sma(src, macd2_fast_length) : ta.ema(src, macd2_fast_length)
macd2_slow_ma = macd2_sma_source == "SMA" ? ta.sma(src, macd2_slow_length) : ta.ema(src, macd2_slow_length)
macd2 = macd2_fast_ma - macd2_slow_ma
macd2_signal = macd2_sma_signal == "SMA" ? ta.sma(macd2, macd2_signal_length) : ta.ema(macd2, macd2_signal_length)
macd2_hist = macd2 - macd2_signal
// --- 绘制 MACD1 和 MACD2
hline(0, "Zero Line", color=color.new(#787B86, 50))
plot(macd1_hist, title="MACD1 Histogram", style=plot.style_line, color=(macd1_hist >= 0 ? (macd1_hist[1] < macd1_hist ? #26A69A : #B2DFDB) : (macd1_hist[1] < macd1_hist ? #FFCDD2 : #FF5252)))
plot(macd2_hist, title="MACD2 Histogram", style=plot.style_histogram, color=(macd2_hist >= 0 ? (macd2_hist[1] < macd2_hist ? #26A69A : #B2DFDB) : (macd2_hist[1] < macd2_hist ? #FFCDD2 : #FF5252)))
// --- 交易条件 ---
is_deep_green_macd2 = ta.cross(macd2_hist, 0) and macd2_hist > 0 and macd2_hist[1] < macd2_hist
is_deep_red_macd2 = ta.cross(macd2_hist, 0) and macd2_hist < 0 and macd2_hist[1] > macd2_hist
// 检测 MACD1 hist 穿越零轴
macd1_cross_up = macd1_hist > 0
macd1_cross_down = macd1_hist < 0
// 做多条件
long_condition = macd1_cross_up and macd2_hist > 0 and is_deep_green_macd2
// 做空条件
short_condition = macd1_cross_down and macd2_hist < 0 and is_deep_red_macd2
// --- 交易逻辑 ---
if long_condition
strategy.entry("Long", strategy.long)
stop_loss_long = strategy.position_avg_price * (1 - stop_loss_pct / 100)
take_profit_long = strategy.position_avg_price * (1 + take_profit_pct / 100)
strategy.exit("Long Exit", "Long", stop=stop_loss_long, limit=take_profit_long)
if short_condition
strategy.entry("Short", strategy.short)
stop_loss_short = strategy.position_avg_price * (1 + stop_loss_pct / 100)
take_profit_short = strategy.position_avg_price * (1 - take_profit_pct / 100)
strategy.exit("Short Exit", "Short", stop=stop_loss_short, limit=take_profit_short)
// --- 警报条件 ---
alertcondition(long_condition, title="Long Entry", message="Dual MACD Strategy: Long Entry Signal")
alertcondition(short_condition, title="Short Entry", message="Dual MACD Strategy: Short Entry Signal")