Strategi ini menggunakan golden cross dan death cross dari indikator MACD untuk menentukan arah tren, dan menggunakan indikator ATR untuk stop loss dan take profit untuk menerapkan tren setelah perdagangan.
Ketika garis MACD melintasi di atas garis Sinyal dari bawah dan menjadi positif, sinyal beli dihasilkan, yang disebut sinyal salib emas, yang menunjukkan tren kenaikan harga saham.
Strategi ini hanya berjalan panjang pada salib emas dan berjalan pendek pada salib kematian untuk mengikuti tren. Pada saat yang sama, strategi ini juga memperkenalkan indikator ATR untuk menghitung stop loss dan mengambil tingkat keuntungan untuk membangun sistem perdagangan.
Secara khusus, strategi ini pertama kali menghitung rata-rata bergerak cepat, rata-rata bergerak lambat, perbedaan MACD, garis sinyal dan indikator MACD standar lainnya. Kemudian, berdasarkan salah satu dari lima jenis sinyal yang dipilih (sinyal kelanjutan, sinyal pembalikan, sinyal histogram, silang nol MACD, silang nol garis sinyal), salib emas dan salib kematian ditentukan. Akhirnya, stop loss dan take profit ditetapkan berdasarkan indikator ATR untuk menyelesaikan logika masuk dan keluar.
Strategi ini memiliki keuntungan berikut:
Menggunakan indikator MACD untuk menentukan arah tren adalah akurat dan dapat diandalkan. Indikator MACD telah tampil menonjol dalam penentuan tren selama bertahun-tahun.
Pengaturan stop loss dan take profit berdasarkan indikator ATR dapat secara efektif mengendalikan rasio risiko-manfaat dari perdagangan tunggal dan mengurangi kemungkinan kerugian.
Menyediakan lima jenis sinyal opsional memungkinkan untuk menggunakan sinyal yang paling sesuai untuk pasar yang berbeda, meningkatkan kemampuan adaptasi strategi.
Ada banyak parameter input yang dapat disesuaikan yang dapat dioptimalkan untuk kinerja perdagangan yang lebih baik.
Ada juga beberapa risiko dengan strategi ini:
Indikator MACD dapat dengan mudah menghasilkan sinyal palsu dan menyebabkan kerugian yang tidak perlu. Indikator lain dapat digunakan untuk menyaring sinyal.
Indikator ATR hanya memodelkan fluktuasi periode terakhir dan tidak dapat secara akurat menghentikan kerugian dalam kondisi pasar yang ekstrem.
Kinerja sinyal yang dipilih mungkin tidak stabil. pengujian backtesting yang luas diperlukan untuk menentukan parameter yang optimal.
Parameter sinyal dan parameter manajemen risiko harus dioptimalkan bersama, jika tidak sulit untuk menemukan hasil yang optimal secara global.
Strategi ini juga dapat dioptimalkan dalam aspek berikut:
Coba rata-rata bergerak lainnya seperti TMA, Hull MA dll untuk menyaring sinyal MACD.
Cobalah mekanisme berhenti dinamis yang dapat lebih baik menangani fluktuasi dalam kondisi pasar yang ekstrim.
Mengoptimalkan secara komprehensif parameter MACD tradisional untuk menemukan kombinasi yang lebih baik.
Menggunakan metode pembelajaran mesin untuk menemukan kelipatan ATR optimal untuk manajemen risiko yang lebih baik.
Backtest masing-masing dari lima jenis sinyal secara terpisah untuk menentukan sinyal yang optimal.
Latih jaringan saraf untuk menilai kualitas sinyal dan menemukan sinyal baru berdasarkan MACD.
Strategi berikut tren MACD menggunakan indikator MACD untuk menentukan arah tren dan menetapkan stop loss dan take profit dengan indikator ATR, yang dapat secara efektif menangkap peluang perdagangan tren. Strategi ini memiliki banyak keuntungan seperti parameter yang dapat disetel, mekanisme stop lengkap dan jenis sinyal opsional. Langkah selanjutnya adalah meningkatkan kualitas sinyal, mekanisme stop loss dan optimasi pemilihan parameter untuk mendapatkan hasil backtest dan live yang lebih baik.
/*backtest start: 2023-11-21 00:00:00 end: 2023-12-21 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // © vuagnouxb //@version=4 strategy("BV's MACD SIGNAL TESTER", overlay=true) //------------------------------------------------------------------------ //---------- Confirmation Calculation ------------ INPUT //------------------------------------------------------------------------ // 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 // 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) // -- Trade entry signals signalChoice = input(title = "Choose your signal", defval = "Continuation", options = ["Continuation", "Reversal", "Histogram", "MACD Line ZC", "Signal Line ZC"]) continuationSignalLong = signalChoice == "Continuation" ? crossover(macd, signal) and macd > 0 : signalChoice == "Reversal" ? crossover(macd, signal) and macd < 0 : signalChoice == "Histogram" ? crossover(hist, 0) : signalChoice == "MACD Line ZC" ? crossover(macd, 0) : signalChoice == "Signal Line ZC" ? crossover(signal, 0) : false continuationSignalShort = signalChoice == "Continuation" ? crossunder(macd, signal) and macd < 0 : signalChoice == "Reversal" ? crossover(signal, macd) and macd > 0 : signalChoice == "Histogram" ? crossunder(hist, 0) : signalChoice == "MACD Line ZC" ? crossunder(macd, 0) : signalChoice == "Signal Line ZC" ? crossunder(signal, 0) : false longCondition = continuationSignalLong shortCondition = continuationSignalShort //------------------------------------------------------------------------ //---------- ATR MONEY MANAGEMENT ------------ //------------------------------------------------------------------------ SLmultiplier = 1.5 TPmultiplier = 1 JPYPair = input(type = input.bool, title = "JPY Pair ?", defval = false) pipAdjuster = JPYPair ? 1000 : 100000 ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000 SL = ATR * SLmultiplier TP = ATR * TPmultiplier //------------------------------------------------------------------------ //---------- TIME FILTER ------------ //------------------------------------------------------------------------ YearOfTesting = input(title = "How many years of testing ?" , type = input.integer, defval = 3) _time = 2020 - YearOfTesting timeFilter = (year > _time) //------------------------------------------------------------------------ //--------- ENTRY FUNCTIONS ----------- INPUT //------------------------------------------------------------------------ if (longCondition and timeFilter) strategy.entry("Long", strategy.long) if (shortCondition and timeFilter) strategy.entry("Short", strategy.short) //------------------------------------------------------------------------ //--------- EXIT FUNCTIONS ----------- //------------------------------------------------------------------------ strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL) strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)