Ini adalah strategi perdagangan kuantitatif gabungan berdasarkan penunjuk MACD. Ia menggabungkan beberapa penunjuk seperti MACD dan KDJ untuk menjana isyarat perdagangan melalui gabungan penunjuk.
Indikator utama strategi ini ialah MACD. MACD bermaksud Moving Average Convergence Divergence, yang merupakan indikator yang mengikuti trend. Ia terdiri daripada purata bergerak pantas (EMA) dan purata bergerak perlahan (EMA). Parameter lalai adalah 12 untuk garis pantas dan 26 untuk garis perlahan. Strategi ini mengira perbezaan antara dua garis EMA, yang dipanggil DIF. Kemudian EMA 9 hari dikira pada DIF untuk mendapatkan penunjuk DEA. Apabila DIF melintasi di atas DEA, isyarat beli dihasilkan. Apabila melintasi di bawah, isyarat jual dihasilkan.
Strategi ini juga menggabungkan penunjuk KDJ. Penunjuk KDJ merangkumi nilai K, nilai D, dan nilai J. Di antara mereka, nilai K merujuk kepada nilai rawak, nilai D adalah purata bergerak nilai K, dan nilai J merujuk kepada nilai deterministik. Penunjuk KDJ mencerminkan tahap overbought dan oversold di pasaran. Apabila nilai J lebih besar daripada 100, ia mewakili keadaan overbought. Apabila kurang dari 10, ia mewakili keadaan oversold. Strategi ini menggabungkan penunjuk KDJ untuk mengelakkan menghasilkan isyarat yang salah pada titik perubahan pasaran.
Strategi ini menggabungkan beberapa penunjuk seperti MACD dan KDJ, yang dapat menapis bunyi bising pasaran dengan berkesan dan mengenal pasti arah trend. Penunjuk MACD dapat menangkap perubahan harga jangka pendek dengan tepat pada masanya, sementara penunjuk KDJ dapat mengesahkan trend jangka menengah dan panjang. Gabungan keduanya dapat menyeimbangkan mengejar ketangkasan dan kestabilan.
Di samping itu, strategi itu menggabungkan pilihan julat masa, yang memberikan fleksibiliti yang lebih besar dalam menilai prestasi strategi.
Apabila pasaran turun naik untuk jangka masa yang panjang, MACD akan mempunyai beberapa isyarat palsu. Pada ketika ini, kita boleh menyesuaikan parameter garis EMA dengan betul untuk menapis beberapa bunyi bising.
Tetapan parameter KDJ yang tidak betul juga akan menjejaskan hasil.
Pemilihan kerangka masa backtest yang tidak sesuai akan terlalu besar atau terlalu rendah nilai keuntungan strategi.
Strategi ini boleh dioptimumkan dalam aspek berikut:
Tambah mekanisme stop loss. Apabila harga mencetuskan garis stop loss, ia akan memaksa keluar kedudukan untuk tujuan stop loss.
Masukkan lebih banyak penapis penunjuk, menggabungkan penunjuk seperti RSI dan Bollinger Bands untuk meningkatkan ketepatan isyarat.
Mengoptimumkan parameter penunjuk. Ubah gabungan parameter EMA dan KDJ untuk mencari tetapan yang optimum.
Gunakan teknik pembelajaran mesin untuk mengoptimumkan secara automatik. Gunakan rangkaian saraf untuk latihan parameter dan pengoptimuman.
Ini adalah strategi kuantitatif biasa yang terutamanya mengikuti trend, ditambah dengan kawalan terlalu banyak beli dan terlalu banyak jual. Ia menggabungkan kelebihan pelbagai penunjuk dan secara berkesan mengimbangi kestabilan dan kepekaan. Melalui pengoptimuman dan penyesuaian berterusan, penerapan strategi dapat diperluaskan lagi untuk mendapatkan keuntungan yang stabil dalam jangka panjang.
/*backtest start: 2022-12-06 00:00:00 end: 2023-12-12 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="New Renaissance", shorttitle="New Renaissance", overlay=true,initial_capital=10000) source = close fastlength=input(12, minval=1) slowlength=input(26,minval=1) signallength=input(9,minval=1) // === Defining the MACD oscillator fastMA=ema(source,fastlength) slowMA=ema(source,slowlength) MACD=fastMA-slowMA signal=sma(MACD,signallength) delta=MACD-signal // === Buy and Sell Signals === buy=crossover(MACD, signal) sell=crossunder(MACD, signal) // === INPUT BACKTEST RANGE === fromMonth = input(defval = 1, title = "From Month", type = input.integer, minval = 1, maxval = 12) fromDay = input(defval = 1, title = "From Day", type = input.integer, minval = 1, maxval = 31) fromYear = input(defval = 2018, title = "From Year", type = input.integer, minval = 1970) thruMonth = input(defval = 12, title = "Thru Month", type = input.integer, minval = 1, maxval = 12) thruDay = input(defval = 31, title = "Thru Day", type = input.integer, minval = 1, maxval = 31) thruYear = input(defval = 2020, title = "Thru Year", type = input.integer, minval = 1970) // === INPUT SHOW PLOT === showDate = input(defval = true, title = "Show Date Range", type = input.bool) // === FUNCTION EXAMPLE === start = timestamp(fromYear, fromMonth, fromDay, 00, 00) // backtest start window finish = timestamp(thruYear, thruMonth, thruDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // === EXECUTION === strategy.entry("L", strategy.long, when = window() and buy) // enter long when "within window of time" AND crossover strategy.close("L", when = window() and sell) // exit long when "within window of time" AND crossunder