
Strategi penangkapan dan penyaringan sinyal tren MACD ganda adalah strategi perdagangan kuantitatif yang didasarkan pada indikator dispersi rata-rata bergerak (MACD) pada dua frame waktu yang berbeda. Strategi ini menangkap peluang perdagangan pasar dengan menggabungkan sinyal tren jangka pendek dan jangka panjang, secara efektif menyaring kebisingan pasar, meningkatkan akurasi sinyal perdagangan. Strategi ini diimplementasikan di platform TradingView, independen dari lapisan grafik harga, dan berlaku untuk berbagai pasar keuangan, termasuk saham, futures, dan forex.
Inti dari strategi ini adalah menggunakan dua indikator MACD: MACD1 (untuk jangka pendek) dan MACD2 (untuk jangka panjang). MACD1 memiliki panjang cepat default 34, panjang lambat 144, sinyal rata 9, untuk mendeteksi perubahan tren jangka pendek; MACD2 memiliki panjang cepat default 100, panjang lambat 200, dan sinyal rata 50, untuk menilai arah tren jangka panjang.
Prinsip inti dari strategi MACD ganda adalah untuk mengidentifikasi tren pasar dan menghasilkan sinyal perdagangan melalui indikator MACD dari dua frame waktu yang berbeda. Kode strategi pertama kali menghitung dua indikator MACD dan parameter terkait:
MACD1 (indikator jangka pendek):
MACD2 (indikator jangka panjang):
Logika transaksi dirancang dengan jelas dan ketat:
Ada beberapa syarat:
Kondisi untuk mengosongkan:
Strategi ini juga mencakup langkah-langkah manajemen risiko, pengaturan parameter stop loss dan stop loss yang dapat disesuaikan, stop loss default adalah 1% (minimal 0,1%), stop loss adalah 1,5% (minimal 0,1%), berdasarkan dinamika harga masuk. Perdagangan diproses pada saat penutupan K-line untuk memastikan stabilitas sinyal.
Strategi MACD ganda ini menunjukkan beberapa keuntungan dari analisis kode yang mendalam:
Mekanisme konfirmasi tren ganda: Dengan menggabungkan MACD jangka pendek dan MACD jangka panjang, strategi dapat secara efektif menyaring kebisingan pasar, mengurangi sinyal palsu, dan meningkatkan akurasi perdagangan. Strategi hanya akan menghasilkan sinyal perdagangan jika sinyal jangka pendek dan jangka panjang konsisten.
Fleksibilitas pengaturan parameter: kebijakan memungkinkan pengguna untuk menyesuaikan parameter MACD (panjang cepat, panjang lambat dan kehalusan sinyal) dan metode perhitungan (SMA atau EMA), sehingga kebijakan dapat beradaptasi dengan lingkungan pasar yang berbeda dan preferensi pengguna.
Intuitif visual umpan balik: Strategi ini menunjukkan kekuatan tren secara intuitif dengan perubahan warna yang dinamis (tren naik menjadi hijau tua, tren turun menjadi merah tua), membantu pedagang untuk lebih memahami kondisi pasar.
Manajemen risiko yang baik: parameter stop loss dan stop loss yang dapat disesuaikan, melindungi keamanan dana dan mengunci keuntungan. Parameter ini dapat disesuaikan dengan volatilitas pasar dan toleransi risiko pribadi.
Fungsi peringatan real-time: Strategi menyediakan peringatan sinyal masuk over and under untuk memfasilitasi pemantauan dan otomatisasi perdagangan secara real-time, sehingga pedagang dapat menangkap peluang pasar tepat waktu.
Kebolehgunaan yang luas: Strategi ini dapat diterapkan di berbagai pasar keuangan, termasuk saham, futures, dan forex, menjadikannya alat praktis untuk berbagai skenario perdagangan.
Meskipun strategi MACD ganda dirancang dengan baik, masih ada beberapa risiko potensial:
Risiko Trend Reversal: Dalam pasar yang sangat berfluktuasi, tren dapat berbalik dengan cepat, menyebabkan strategi menghasilkan kerugian. Bahkan dengan pengaturan stop loss, harga stop loss yang sebenarnya dapat tergelincir secara serius dalam kondisi pasar yang ekstrem.
Sensitivitas parameter: Kinerja strategi sangat bergantung pada pengaturan parameter MACD. Parameter yang tidak tepat dapat menyebabkan terlalu banyak sinyal palsu atau kehilangan peluang perdagangan yang penting. Pengguna perlu mengoptimalkan parameter dengan hati-hati sesuai dengan pasar dan kerangka waktu tertentu.
Masalah keterlambatan: MACD pada dasarnya merupakan indikator keterlambatan, yang dihitung berdasarkan data harga historis. Dalam pasar yang berubah dengan cepat, sinyal mungkin datang terlambat, melewatkan titik masuk terbaik, atau menyebabkan kerugian yang tidak perlu.
Performa buruk di pasar horizontal: Strategi ini bekerja paling baik di pasar tren yang kuat, tetapi dapat menghasilkan sinyal palsu yang sering terjadi di pasar horizontal atau tanpa arah, yang menyebabkan kerugian kecil berturut-turut.
Manajemen risiko dana: Setelan default untuk menggunakan 100% dana akun untuk berdagang, yang dapat menyebabkan kelebihan leverage dan manajemen dana yang tidak tepat. Pedagang harus mempertimbangkan untuk mengurangi proporsi dana per transaksi untuk mengelola risiko dengan lebih baik.
Untuk mengurangi risiko ini, pedagang harus mempertimbangkan: melakukan verifikasi silang dengan indikator teknis lainnya; secara teratur memantau dan mengoptimalkan parameter strategi; menyesuaikan alokasi dana sesuai dengan kondisi pasar; intervensi manual dalam kondisi pasar yang ekstrim; dan menetapkan rasio risiko / imbalan yang wajar.
Ini adalah beberapa cara untuk mengoptimalkan kode dengan analisis mendalam:
Menambahkan kondisi penyaringan: Anda dapat menambahkan indikator teknis tambahan (seperti RSI Relatif Lemah atau Brinks) sebagai filter untuk mengurangi sinyal palsu. Misalnya, hanya berdagang jika RSI menunjukkan pasar tidak overbought / oversold.
Parameter adaptasi: Mengimplementasikan penyesuaian adaptasi dari parameter MACD, menyesuaikan secara otomatis sesuai dengan volatilitas pasar. Dalam pasar yang berfluktuasi tinggi, panjang kecepatan cepat dan lambat dapat ditingkatkan untuk mengurangi kebisingan; Dalam pasar yang berfluktuasi rendah, parameter dapat dikurangi untuk meningkatkan sensitivitas.
Meningkatkan strategi stop loss: Membuat stop loss yang dinamis berdasarkan volatilitas, seperti stop loss yang didasarkan pada ATR (true average volatility), bukan persentase tetap. Ini akan membuat stop loss lebih sesuai dengan kondisi pasar saat ini.
Menambahkan mekanisme penutupan sebagian: memungkinkan penutupan sebagian saat mencapai target keuntungan tertentu, mengunci sebagian keuntungan sambil membiarkan posisi yang tersisa tetap menguntungkan.
Penyaringan waktu perdagangan: Tambahkan filter waktu perdagangan untuk menghindari perdagangan pada saat volatilitas tinggi atau saat likuiditas rendah, seperti saat pasar terbuka / ditutup.
Pengelolaan dana yang dioptimalkan: Mengimplementasikan pengelolaan dana berdasarkan Kelley atau model risiko proporsi tetap, menyesuaikan ukuran posisi secara dinamis sesuai dengan probabilitas kemenangan dan rasio risiko / imbalan.
Kombinasi beberapa periode waktu: Selain dua MACD saat ini, pertimbangkan untuk menambahkan MACD ketiga yang lebih panjang untuk memberikan perspektif pasar yang lebih komprehensif.
Klasifikasi kondisi pasar: Tambahkan logika klasifikasi kondisi pasar (seperti pasar tren vs pasar horizontal) dan menyesuaikan strategi dan parameter perdagangan sesuai dengan kondisi pasar yang berbeda.
Pengoptimalan ini dapat meningkatkan kehandalan dan adaptasi strategi sehingga dapat mempertahankan kinerja yang baik dalam berbagai kondisi pasar.
Strategi penangkapan sinyal tren MACD ganda dan penyaringan kuantitatif menciptakan sistem pelacakan tren yang kuat dengan kombinasi yang cerdik dari indikator MACD jangka pendek dan jangka panjang. Keunggulan inti dari strategi ini adalah mekanisme konfirmasi ganda yang ketat, yang secara efektif mengurangi sinyal palsu dan meningkatkan akurasi perdagangan.
Meskipun ada risiko seperti pembalikan tren, sensitivitas parameter, dan kinerja pasar horizontal yang buruk, risiko ini dapat dikendalikan secara efektif dengan langkah-langkah manajemen risiko dan strategi optimasi yang tepat. Arah optimasi di masa depan dapat mencakup penambahan kondisi filter tambahan, mencapai parameter adaptasi, meningkatkan strategi stop loss, dan mengoptimalkan manajemen modal.
Secara keseluruhan, strategi MACD ganda memberikan kerangka kerja yang solid untuk pedagang kuantitatif, terutama untuk pedagang tren jangka pendek dan menengah. Dengan menggabungkan alat analisis teknis klasik dengan aturan perdagangan yang fleksibel, strategi ini memberikan sistem perdagangan yang solid untuk pedagang yang mengejar pengembalian 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")