
Strategi ini membentuk oscillator MACD dengan mengira perbezaan EMA garis cepat dan EMA garis lambat, dan kemudian membentuk garis isyarat dengan mengira garis rata MACD, untuk membina sistem penyaringan ganda. Apabila garis MACD menghasilkan isyarat beli ketika melintasi garis isyarat dari bawah, apabila garis MACD menghasilkan isyarat jual ketika melintasi garis isyarat dari atas ke bawah, memanfaatkan pergerakan jangka pendek dan jangka menengah harga.
Penunjuk teras strategi ini adalah penyokong MACD, yang dikira oleh EMA garis pantas (biasanya ditetapkan pada 12 hari EMA) tolak EMA garis perlahan (biasanya ditetapkan pada 26 hari EMA). EMA garis pantas lebih sensitif dan dapat menangkap turun naik harga dalam jangka pendek; EMA garis perlahan bertindak balas lebih perlahan terhadap perubahan harga. Kedua-duanya berkurang untuk membentuk penyokong yang mewakili perbezaan nilai perubahan harga dalam jangka pendek dan jangka menengah.
Strategi ini menetapkan parameter input sebagai panjang garis cepat, panjang garis lambat, sumber harga, panjang garis isyarat dan kitaran kelancaran. Parameter boleh disesuaikan mengikut pasaran yang berbeza untuk mencari kombinasi parameter terbaik.
Indeks MACD klasik dan mudah difahami, dapat memanfaatkan peluang terbalik jangka pendek dan sederhana.
Sistem MACD yang dibina oleh dua EMA mempunyai kelancaran yang lebih baik berbanding sistem MA tunggal.
Terdapat lebih banyak parameter yang boleh disesuaikan dan boleh dioptimumkan untuk pasaran yang berbeza.
Gabungan penunjuk masa lalu dapat mengenal pasti isyarat berkualiti tinggi.
Dalam keadaan gegaran, MACD akan menghasilkan lebih banyak isyarat yang salah.
Tidak dapat menentukan trend, mungkin menyebabkan kerugian apabila bercampur dengan trend.
Penghadaman jangka masa pengesanan mungkin mengabaikan keadaan yang melampau.
Tetapan parameter memerlukan lebih banyak data pasaran untuk dioptimumkan, jika tidak, mungkin overfit segmen pasaran tertentu.
Anda boleh mengawal risiko dengan menggabungkan indikator penilaian trend, menetapkan mekanisme hentian kerugian. Anda juga boleh mengoptimumkan parameter dengan meluaskan ruang pengukuran dan ruang sampel pasaran.
Uji sumber harga yang berbeza, seperti harga penutupan, harga purata, dan harga set semula.
Untuk mencari kombinasi parameter terbaik berdasarkan lebih banyak data sejarah.
Mengintegrasikan petunjuk lain untuk menilai kualiti isyarat. Contohnya isyarat lalu lintas.
Menggabungkan trend dan penilaian gelombang untuk mengelakkan konflik besar dengan trend.
Strategi ini adalah strategi pilihan masa klasik dan praktikal dengan membina penapis EMA ganda, menangkap fenomena pembalikan kitaran garis pendek dalam harga. Risiko dapat dikendalikan melalui pengoptimuman parameter, penapisan isyarat, dan cara menghentikan kerugian.
/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="MACD Histogram Backtest", shorttitle="MACD")
// Getting inputs
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
grow = (hist[1] < hist)
fall = (hist[1] > hist) and hist >= 0
stop = (hist[1] > hist)
plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//Strategy Testing
// Component Code Start
// Example usage:
// if testPeriod()
// strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
// Component Code Stop
//Entry and Close settings
if testPeriod()
strategy.entry("grow", true, 10, when = grow, limit = close)
strategy.close("grow", when = fall)
strategy.close("grow", when = stop)
//if testPeriod()
// strategy.entry("fall", false, 1000, when = fall, limit = close)
// strategy.close("fall", when = grow)