Strategi Pelacakan Rata-rata Bergerak Ganda MACD

Penulis:ChaoZhang, Tanggal: 2023-12-18 12:25:13
Tag:

img

Gambaran umum

Strategi ini disebutStrategi Pelacakan Rata-rata Bergerak Ganda MACDIni menggunakan indikator MACD golden cross dan death cross dari moving average ganda sebagai sinyal perdagangan, dikombinasikan dengan harga terendah hari sebelumnya sebagai titik stop loss untuk melacak pergerakan harga jangka pendek.

Logika Strategi

  1. Menghitung EMA cepat ((dekat,5), EMA lambat ((dekat,8) dan sinyal SMA ((MACD,3)
  2. Mendefinisikan sinyal panjang: ketika MA cepat melintasi di atas MA lambat
  3. Mendefinisikan sinyal pendek: ketika MA cepat melintasi di bawah MA lambat atau harga penutupan lebih rendah dari harga terendah hari sebelumnya
  4. Ukuran posisi adalah modal awal 2000 USD dibagi dengan harga penutupan
  5. Gunakan sinyal pendek untuk menutup posisi panjang sebagai stop loss

Analisis Keuntungan

  1. Menggunakan indikator MACD untuk menentukan zona overbought dan oversold, dengan MAs ganda untuk membentuk sinyal perdagangan, menghindari pecah palsu
  2. Melacak tren jangka pendek, stop loss tepat waktu
  3. Penyesuaian dinamis ukuran posisi menghindari kerugian tunggal yang terlalu besar

Analisis Risiko

  1. Indikator MACD memiliki efek keterlambatan, mungkin kehilangan peluang jangka pendek
  2. Sinyal perdagangan MA ganda dapat menghasilkan sinyal palsu
  3. Stop loss point terlalu agresif, dengan frekuensi tinggi yang dihentikan

Arahan Optimasi

  1. Mengoptimalkan kombinasi parameter MACD untuk meningkatkan sensitivitas indikator
  2. Tambahkan penilaian tren untuk menghindari sinyal palsu dari konsolidasi pasar
  3. Menggabungkan dengan Volatility Index untuk menilai volatilitas pasar, menyesuaikan titik stop loss

Ringkasan

Strategi ini menggunakan indikator kombinasi rata-rata pergerakan ganda MACD klasik untuk menentukan zona overbought dan oversold, menghasilkan sinyal perdagangan, sambil memperkenalkan ukuran posisi dinamis dan harga terendah hari sebelumnya sebagai desain titik stop loss untuk menangkap fluktuasi harga jangka pendek.


/*backtest
start: 2023-12-10 00:00:00
end: 2023-12-13 02:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2
// macd/cam v1 strategizing Chris Moody Macd indicator https://www.tradingview.com/script/OQx7vju0-MacD-Custom-Indicator-Multiple-Time-Frame-All-Available-Options/
// macd/cam v2 changing to macd 5,8,3
// macd/cam v2.1 
//      Sell when lower than previous day low. 
//      Initial capital of $2k. Buy/sell quantity of initial capital / close price
//      Quitar short action
//      Note: custom 1-week resolution seems to put AMD at 80% profitable

strategy(title="MACD/CAM 2.1", shorttitle="MACD/CAM 2.1") //
source = close
//get inputs from options
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", defval="60")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")
venderLowerPrev = input(true,title="Vender cuando closing price < previous day low?")

res = useCurrentRes ? timeframe.period : resCustom

fastLength = input(5, minval=1), slowLength=input(8,minval=1)
signalLength=input(3,minval=1)

// find exponential moving average of price as x and fastLength var as y
fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)

macd = fastMA - slowMA
// simple moving average
signal = sma(macd, signalLength)
hist = macd - signal

outMacD = request.security(syminfo.tickerid, res, macd)
outSignal = request.security(syminfo.tickerid, res, signal)
outHist = request.security(syminfo.tickerid, res, hist)

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

plot_color = hist_colorChange ? histA_IsUp ? aqua : histA_IsDown ? blue : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? lime : red : red
signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=4)
plot(smd and outSignal ? outSignal : na, title="Signal Line", color=signal_color, style=line ,linewidth=2)
plot(sh and outHist ? outHist : na, title="Histogram", color=plot_color, style=histogram, linewidth=4)

circleCondition = sd and cross(outMacD, outSignal)

// Determine long and short conditions
longCondition  = circleCondition and macd_color == lime

redCircle = circleCondition and macd_color == red
redCirclePrevLow = redCircle or low<low[1]
shortCondition = redCircle
if (venderLowerPrev)
    shortCondition = redCirclePrevLow

strategy.initial_capital = 20000
// Set quantity to initial capital / closing price
cantidad = strategy.initial_capital/close

// Submit orders
strategy.entry(id="long", long=true, qty=cantidad, when=longCondition)
strategy.close(id="long", when=shortCondition)
plot(circleCondition ? circleYPosition : na, title="Cross", style=cross, linewidth=10, color=macd_color)
// hline(0, '0 Line', linestyle=solid, linewidth=2, color=white)

Lebih banyak