Strategi Pengesanan Purata Bergerak Ganda MACD

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

img

Ringkasan

Strategi ini dinamakanStrategi Pengesanan Purata Bergerak Ganda MACDIa menggunakan indikator MACD's golden cross dan death cross dari purata bergerak berganda sebagai isyarat perdagangan, digabungkan dengan harga terendah hari sebelumnya sebagai titik stop loss untuk mengesan pergerakan harga jangka pendek.

Logika Strategi

  1. Mengira EMA pantas ((dekat,5), EMA perlahan ((dekat,8) dan isyarat SMA ((MACD,3)
  2. Menentukan isyarat panjang: apabila MA pantas melintasi atas MA perlahan
  3. Mendefinisikan isyarat pendek: apabila MA cepat melintasi di bawah MA perlahan atau harga penutupan lebih rendah daripada harga terendah hari sebelumnya
  4. Saiz kedudukan adalah modal awal 2000 USD dibahagikan dengan harga penutupan
  5. Gunakan isyarat pendek untuk menutup kedudukan panjang sebagai stop loss

Analisis Kelebihan

  1. Menggunakan penunjuk MACD untuk menentukan zon overbought dan oversold, dengan dua MA untuk membentuk isyarat perdagangan, mengelakkan pecah palsu
  2. Mengesan trend jangka pendek, stop loss tepat pada masanya
  3. Penyesuaian dinamik saiz kedudukan mengelakkan kerugian tunggal yang terlalu besar

Analisis Risiko

  1. Indikator MACD mempunyai kesan kelewatan, mungkin terlepas peluang jangka pendek
  2. Isyarat dagangan MA berganda boleh menghasilkan isyarat palsu
  3. Titik kehilangan berhenti terlalu agresif, dengan kekerapan yang tinggi dihentikan

Arahan pengoptimuman

  1. Mengoptimumkan kombinasi parameter MACD untuk meningkatkan kepekaan penunjuk
  2. Tambah penilaian trend untuk mengelakkan isyarat palsu daripada penyatuan pasaran
  3. Gabungkan dengan Indeks Volatiliti untuk menilai turun naik pasaran, sesuaikan titik stop loss

Ringkasan

Strategi ini menggunakan penunjuk gabungan purata bergerak ganda MACD klasik untuk menentukan zon overbought dan oversold, menjana isyarat perdagangan, sambil memperkenalkan saiz kedudukan dinamik dan harga terendah hari sebelumnya sebagai reka bentuk titik stop loss untuk menangkap turun naik harga jangka pendek. Logik strategi keseluruhan jelas dan mudah difahami, bernilai ujian dan pengoptimuman lanjut.


/*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 lanjut