Strategi ini menghitung perbedaan antara EMA cepat dan EMA lambat untuk membentuk osilator MACD, dan menghitung EMA MACD itu sendiri untuk membentuk garis sinyal, sehingga membangun sistem penyaringan ganda.
Indikator inti dari strategi ini adalah osilator MACD, yang dihitung dengan mengurangi EMA lambat (biasanya 26 hari EMA) dari EMA cepat (biasanya 12 hari EMA). EMA cepat lebih sensitif dan dapat menangkap fluktuasi harga jangka pendek. EMA lambat merespons perubahan harga lebih lambat. Mengurangi keduanya membentuk osilator yang mewakili perbedaan antara siklus harga jangka pendek dan jangka menengah. EMA (biasanya 9 hari) dari osilator MACD itu sendiri kemudian dihitung untuk mendapatkan garis sinyal. Ketika sinyal MACD melintasi di atas garis sinyal dari MAC di bawah, itu menandakan bahwa momentum kenaikan tren jangka pendek lebih kuat daripada tren jangka menengah, menghasilkan sinyal beli. Ketika sinyal DD melintasi garis di atas, itu menandakan bahwa momentum penurunan tren jangka pendek lebih kuat, menghasilkan sinyal jual.
Parameter input dari strategi ini ditetapkan untuk panjang garis cepat, panjang garis lambat, sumber harga, dan periode penyelarasan garis sinyal, masing-masing. Ini dapat disesuaikan sesuai dengan pasar yang berbeda untuk menemukan kombinasi parameter yang optimal. Blok warna latar belakang menunjukkan kerangka waktu backtest. Strategi membuka posisi hanya dalam kerangka waktu ini.
Indikator MACD klasik dan mudah dipahami, secara efektif menangkap peluang pembalikan jangka pendek hingga menengah.
Konstruksi EMA ganda dari sistem MACD memiliki kelancaran yang lebih baik daripada sistem MA tunggal.
Parameter yang relatif lebih dapat disesuaikan memungkinkan optimasi di pasar yang berbeda.
Menggabungkan dengan indikator volume membantu mengidentifikasi sinyal berkualitas tinggi.
MACD dapat menghasilkan lebih banyak sinyal palsu di pasar osilasi.
Ini tidak dapat menentukan tren dan dapat menghasilkan kerugian ketika melintasi tren.
Kerangka waktu backtest yang terbatas dapat mengabaikan kondisi pasar yang ekstrem.
Penyesuaian parameter membutuhkan lebih banyak data pasar untuk menghindari overfit periode pasar tertentu.
Risiko dapat dikendalikan dengan menggabungkan indikator tren dan mekanisme stop loss. ruang lingkup backtest dan ruang sampel pasar dapat diperluas untuk optimasi parameter.
Uji sumber harga yang berbeda seperti harga dekat, median, reset, dll.
Mencari set parameter yang optimal berdasarkan data historis.
Mengintegrasikan indikator lain untuk menilai kualitas sinyal, misalnya sinyal volume.
Menggabungkan analisis tren dan siklus untuk menghindari konflik tren yang signifikan.
Strategi ini menangkap peluang pembalikan jangka pendek hingga menengah dengan membangun sistem filter EMA ganda. Ini termasuk dalam strategi waktu pasar klasik dan praktis. Risiko dapat dikendalikan melalui optimasi parameter, penyaringan sinyal dan cara stop loss. Menggabungkan alat analisis tren untuk menghindari membeli puncak dan menjual bagian bawah dapat menyebabkan keuntungan yang stabil.
/*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)