Strategi ini menggunakan salib emas dan salib kematian penunjuk MACD untuk menentukan arah trend, dan menggunakan penunjuk ATR untuk menghentikan kerugian dan mengambil keuntungan untuk melaksanakan trend selepas perdagangan.
Apabila garis MACD melintasi di atas garis Isyarat dari bawah dan menjadi positif, isyarat beli dihasilkan, yang dipanggil isyarat salib emas, yang menunjukkan trend menaik dalam harga saham. Apabila garis MACD melintasi di bawah garis Isyarat dari atas dan menjadi negatif, isyarat jual dihasilkan, yang dipanggil isyarat salib kematian, yang menunjukkan trend penurunan dalam harga saham.
Strategi ini hanya pergi panjang pada salib emas dan pergi pendek pada salib kematian untuk mengikuti trend. Pada masa yang sama, strategi ini juga memperkenalkan penunjuk ATR untuk mengira stop loss dan mengambil tahap keuntungan untuk membina sistem perdagangan.
Secara khusus, strategi ini mula-mula mengira purata bergerak pantas, purata bergerak perlahan, perbezaan MACD, garis isyarat dan penunjuk MACD standard yang lain. Kemudian, berdasarkan salah satu daripada lima jenis isyarat yang dipilih (isyarat kesinambungan, isyarat pembalikan, isyarat histogram, salib sifar MACD, salib garis sifar isyarat), salib emas dan salib kematian ditentukan. Akhirnya, stop loss dan mengambil keuntungan ditetapkan berdasarkan penunjuk ATR untuk melengkapkan logik masuk dan keluar.
Strategi ini mempunyai kelebihan berikut:
Menggunakan penunjuk MACD untuk menentukan arah trend adalah tepat dan boleh dipercayai.
Tetapan stop loss dan mengambil keuntungan berdasarkan penunjuk ATR dapat mengawal secara berkesan nisbah risiko-balasan perdagangan tunggal dan mengurangkan kebarangkalian kerugian.
Menyediakan lima jenis isyarat pilihan membolehkan menggunakan isyarat yang paling sesuai untuk pasaran yang berbeza, meningkatkan kebolehsesuaian strategi.
Terdapat banyak parameter input yang boleh disesuaikan yang boleh dioptimumkan untuk prestasi perdagangan yang lebih baik.
Terdapat juga beberapa risiko dengan strategi ini:
Indikator MACD boleh dengan mudah menghasilkan isyarat palsu dan menyebabkan kerugian yang tidak perlu.
Indikator ATR hanya memodelkan turun naik tempoh baru-baru ini dan tidak dapat menghentikan kerugian dengan tepat dalam keadaan pasaran yang melampau.
Prestasi isyarat yang dipilih mungkin tidak stabil. pengujian belakang yang luas diperlukan untuk menentukan parameter optimum.
Parameter isyarat dan parameter pengurusan risiko perlu dioptimumkan bersama, jika tidak, sukar untuk mencari hasil yang optimum secara global.
Strategi ini juga boleh dioptimumkan dalam aspek berikut:
Cuba purata bergerak lain seperti TMA, Hull MA dll untuk menapis isyarat MACD.
Cuba mekanisme berhenti dinamik yang boleh menangani lebih baik dengan turun naik dalam keadaan pasaran yang melampau.
Mengoptimumkan parameter MACD tradisional untuk mencari kombinasi yang lebih baik.
Menggunakan kaedah pembelajaran mesin untuk mencari kelipatan ATR yang optimum untuk pengurusan risiko yang lebih baik.
Uji balik setiap lima jenis isyarat secara berasingan untuk menentukan isyarat optimum.
Latih rangkaian saraf untuk menilai kualiti isyarat dan menemui isyarat baru berdasarkan MACD.
MACD golden cross death cross trend following strategy menggunakan penunjuk MACD untuk menentukan arah trend dan menetapkan stop loss dan mengambil keuntungan dengan penunjuk ATR, yang dapat menangkap peluang perdagangan trend dengan berkesan. Strategi ini mempunyai pelbagai kelebihan seperti parameter yang boleh disesuaikan, mekanisme berhenti lengkap dan jenis isyarat pilihan. Langkah seterusnya adalah untuk meningkatkan kualiti isyarat, mekanisme stop loss dan pengoptimuman pemilihan parameter untuk mendapatkan hasil backtest dan langsung 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)