MACD Golden Cross Death Cross Trend Mengikuti Strategi

Penulis:ChaoZhang, Tanggal: 2023-12-22 11:45:54
Tag:

img

Gambaran umum

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.

Logika Strategi

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.

Analisis Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menggunakan indikator MACD untuk menentukan arah tren adalah akurat dan dapat diandalkan. Indikator MACD telah tampil menonjol dalam penentuan tren selama bertahun-tahun.

  2. Pengaturan stop loss dan take profit berdasarkan indikator ATR dapat secara efektif mengendalikan rasio risiko-manfaat dari perdagangan tunggal dan mengurangi kemungkinan kerugian.

  3. Menyediakan lima jenis sinyal opsional memungkinkan untuk menggunakan sinyal yang paling sesuai untuk pasar yang berbeda, meningkatkan kemampuan adaptasi strategi.

  4. Ada banyak parameter input yang dapat disesuaikan yang dapat dioptimalkan untuk kinerja perdagangan yang lebih baik.

Risiko dan Solusi

Ada juga beberapa risiko dengan strategi ini:

  1. Indikator MACD dapat dengan mudah menghasilkan sinyal palsu dan menyebabkan kerugian yang tidak perlu. Indikator lain dapat digunakan untuk menyaring sinyal.

  2. Indikator ATR hanya memodelkan fluktuasi periode terakhir dan tidak dapat secara akurat menghentikan kerugian dalam kondisi pasar yang ekstrem.

  3. Kinerja sinyal yang dipilih mungkin tidak stabil. pengujian backtesting yang luas diperlukan untuk menentukan parameter yang optimal.

  4. Parameter sinyal dan parameter manajemen risiko harus dioptimalkan bersama, jika tidak sulit untuk menemukan hasil yang optimal secara global.

Saran Optimalisasi

Strategi ini juga dapat dioptimalkan dalam aspek berikut:

  1. Coba rata-rata bergerak lainnya seperti TMA, Hull MA dll untuk menyaring sinyal MACD.

  2. Cobalah mekanisme berhenti dinamis yang dapat lebih baik menangani fluktuasi dalam kondisi pasar yang ekstrim.

  3. Mengoptimalkan secara komprehensif parameter MACD tradisional untuk menemukan kombinasi yang lebih baik.

  4. Menggunakan metode pembelajaran mesin untuk menemukan kelipatan ATR optimal untuk manajemen risiko yang lebih baik.

  5. Backtest masing-masing dari lima jenis sinyal secara terpisah untuk menentukan sinyal yang optimal.

  6. Latih jaringan saraf untuk menilai kualitas sinyal dan menemukan sinyal baru berdasarkan MACD.

Kesimpulan

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)  

Lebih banyak