
Idea teras strategi ini adalah menggabungkan garis rata-rata dua dan penunjuk MACD untuk menentukan arah trend, untuk mewujudkan perdagangan trend. Apabila garis rata-rata jangka pendek melintasi garis rata-rata jangka panjang, penilaian sebagai peluang bullish; Apabila garis rata-rata jangka pendek melintasi garis rata-rata jangka panjang, penilaian sebagai peluang bearish.
Hitung talian pantas EMA ((12 hari), talian perlahan EMA ((26 hari) dan talian isyarat EMA ((9 hari)
Hitung garis tiang MACD ((gambaran laju-gambaran perlahan) dan garis isyarat MACD ((gambaran MACD hari ke-9)).
Hitung garis 50 hari dan garis 200 hari sebagai garis rata-rata untuk menilai trend besar.
Akses 0 di atas garis MACD sebagai isyarat bullish dan akses 0 di bawah sebagai isyarat bearish.
Garis laju dipindahkan ke garisan perlahan dan garisan purata jangka pendek dipindahkan ke garisan purata jangka panjang sebagai isyarat jam tangan.
Garis laju di bawah garis perlahan dan garis purata jangka pendek di bawah garis purata jangka panjang sebagai isyarat penurunan harga.
Setiap kali arah garis purata berubah, beberapa perdagangan dibenarkan masuk, melalui Max trades after EMA cross parameter kawalan.
Selepas masuk, anda boleh menebus kedudukan dengan menghentikan kerugian.
“Saya tidak tahu apa-apa mengenai apa yang berlaku di Malaysia, tetapi saya tidak tahu apa yang berlaku di Malaysia”, katanya.
MACD menentukan titik jual beli dan menangkap perubahan trend tepat pada masanya.
Gabungan antara garis dua rata-rata dan MACD dapat menangkap masa masuk yang lebih baik dalam trend.
Tetapkan jumlah dagangan maksimum untuk mengelakkan kejatuhan.
Pengendalian risiko mekanisme penghalang kerosakan.
Kombinasi parameter yang lebih baik boleh dicapai dengan mengoptimumkan parameter.
Kesalahan penilaian trend utama menyebabkan kerugian perdagangan yang berlawanan. Keperluan untuk jurang garis rata-rata boleh dikurangkan dengan sewajarnya untuk memastikan trend utama ditangkap.
Sinyal beli dan jual MACD terlewat, yang boleh menyebabkan kemasukan terlalu awal atau terlalu lewat. Parameter MACD boleh disesuaikan, dan juga boleh digabungkan dengan isyarat penapis indikator lain.
Penangguhan hentikan yang tidak betul, mungkin terlalu longgar atau terlalu ketat, menyebabkan kehilangan hentikan yang terlalu banyak atau hentikan yang tidak mencukupi. Ujian pengoptimuman parameter perlu dilakukan untuk pelbagai jenis.
Kesukaran untuk mengoptimumkan parameter, pelbagai jenis dan tempoh masa memerlukan kombinasi parameter yang berbeza, memerlukan banyak ujian pra-percubaan.
Cubalah dengan penunjuk garis rata lain untuk menentukan trend besar, seperti penunjuk KD.
Cuba menggabungkan isyarat penapisan MACD dengan penunjuk lain, seperti Brinband, ATR Stop.
Mengoptimumkan parameter penghentian kerosakan, mencari kombinasi parameter yang terbaik untuk ujian berasingan untuk pelbagai jenis.
Menggunakan kaedah pengoptimuman langkah demi langkah dan pengoptimuman rawak untuk mencari kombinasi parameter yang lebih baik.
Menambah mekanisme untuk mengurangkan frekuensi transaksi, seperti menetapkan kawasan larangan berdagang di sekitar sumbu sifar MACD.
Pengoptimuman parameter dan pengoptimuman gabungan secara automatik untuk pelbagai jenis.
Strategi ini menggabungkan penggunaan dua garis rata untuk menentukan trend besar dan MACD untuk menentukan titik jual beli, membentuk strategi pengesanan trend yang lebih kuat. Dengan pengoptimuman parameter dan kombinasi indikator, prestasi strategi dapat ditingkatkan lagi. Secara keseluruhan, strategi ini mempunyai kemampuan tahan risiko dan ruang keuntungan yang kuat, yang patut dipertimbangkan dalam aplikasi lapangan.
/*backtest
start: 2023-10-02 00:00:00
end: 2023-11-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy(title="ComiCo - Joel on Crypto - MACD Scalping", shorttitle="ComiCo - Joel on Crypto - MACD Scalping")
// Getting inputs
slow_length1 = input(title="EMA Trend 1", defval=50)
slow_length2 = input(title="EMA Trend 2 ", defval=200)
fast_length = input(title="MACD Fast Length", defval=12)
slow_length = input(title="MACD Slow Length", defval=26)
signal_length = input.int(title="MACD Signal Smoothing", minval = 1, maxval = 50, defval = 9)
src = input(title="MACD Source", defval=close)
i_switch = input.string(title="Tick Highlight", defval="Moving average" ,options=["Moving average","Fixed value" ])
i_switch2 = input.string(title="Tick Source", defval="Highest bar" ,options=["Highest bar","Average","Last bar"])
signal_lengthup = input.int(title="Upticks Avg. Length", minval = 1, maxval = 5000, defval = 72)
signal_lengthdown = input.int(title="Downticks Avg. Length", minval = 1, maxval = 5000, defval = 72)
signal_lengthMA = input.float(title="Ticks Avg. Multiplier", minval = 0, maxval = 5000, defval = 2, step = 0.1)
sma_source = "EMA"
sma_signal = "EMA"
// Plot colors
col_grow_above = #26A69A
col_fall_above =#B2DFDB
col_grow_below = #FFCDD2
col_fall_below = #FF5252
// Calculating
fast_ma = sma_source == "SMA" ? ta.sma(src, fast_length) : ta.ema(src, fast_length)
slow_ma = sma_source == "SMA" ? ta.sma(src, slow_length) : ta.ema(src, slow_length)
time_macd=timeframe.period=="1"?"1": timeframe.period=="3"?"1": timeframe.period=="5"?"1": timeframe.period=="15"?"3":timeframe.period=="30"?"5":timeframe.period=="60"?"15":timeframe.period=="120"?"30":timeframe.period=="240"?"60":timeframe.period=="D"?"240":timeframe.period=="W"?"D":timeframe.period=="M"?"W":timeframe.period=="12M"?"M":timeframe.period
macd = fast_ma - slow_ma
macd1=request.security(syminfo.tickerid, time_macd, macd)
signal = sma_signal == "SMA" ? ta.sma(macd1, signal_length) : ta.ema(macd1, signal_length)
ema50=ta.ema(close,slow_length1)
ema200=ta.ema(close ,slow_length2)
var TradeCounter = 0
MaxCount = input.int(title = "Max trades after EMA cross", minval = 0, maxval = 1000, defval = 3)
bull = ema50>ema200
if bull != bull[1]
TradeCounter := 0
hist = request.security(syminfo.tickerid, time_macd, macd1 - signal)
f() => [hist[4],hist[3],hist[2],hist[1], hist]
ss=request.security(syminfo.tickerid, time_macd, hist, barmerge.gaps_on,barmerge.lookahead_off)
[ss5,ss4,ss3,ss2,ss1]=request.security(syminfo.tickerid, time_macd, f(), barmerge.gaps_on,barmerge.lookahead_off)
a = array.from(ss5,ss4,ss3,ss2,ss1)
s3=i_switch2=="Highest bar"?(ss>0? array.max(a, 0) : array.min(a, 0)):i_switch2=="Average"?array.avg(a):i_switch2=="Last bar"?ss1:0
saa=timeframe.period == '1'? ss:s3
saa2=timeframe.period == '1'? ss:s3*signal_lengthMA
colorss=(s3>=0 ? (s3[1] < s3 ? col_grow_above : col_fall_above) : (s3[1] < s3 ? col_grow_below : col_fall_below))
saadown = saa2
saaup = saa2
saadown:=saa>=0? saa2:saadown[1]
saaup:=saa<0? saa2:saaup[1]
verr=ta.ema(saadown,signal_lengthup)
dowww=ta.ema(saaup,signal_lengthdown)
ss22=plot(verr, title="Avg. Cloud Upper 1", color=color.new(color.white, 100))
ss33=plot(dowww, title="Avg. Cloud Lower 1", color=color.new(color.white, 100))
fill(ss22, ss33, color.new(color.white, 93), title="Avg. Cloud Background")
fixeduptick = input(title="Fixed Uptick Value", defval=30)
fixeddowntick = input(title="Fixed Downtick Value", defval=-30)
minl = i_switch=="Fixed value"? fixeduptick : verr
maxl = i_switch=="Fixed value"? fixeddowntick : dowww
plot(minl, title="Avg. Cloud Upper 2", color=color.new(color.white, 81))
plot(maxl, title="Avg. Cloud Lower 2", color=color.new(color.white, 81))
colors2= s3<=minl and s3>=maxl ? #2a2e39 : colorss
coro2=s3>0? ema50>ema200 ? #2a2e39 : colors2 : ema50<ema200 ? #2a2e39: colors2
plot(saa, title="Histogram", style=plot.style_columns, color=coro2)
LimitDiff = input.float(title="Limit Price Difference", minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
TP = input.float(title="Take Profit", minval = 0, maxval = 0.1, defval = 0.005, step = 0.0005)
SL = input.float(title="Stop Loss", minval = 0, maxval = 0.1, defval = 0.004, step = 0.0005)
minEMAdiff = input.float(title = "Min EMA difference", defval = 100, step = 10)
if #2a2e39 != coro2
a22 = 0
if ema50<ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
LimitPrice = close * (1 + LimitDiff)
strategy.entry("enter short", strategy.short, limit = LimitPrice)
strategy.exit("exit short", "enter short", limit = LimitPrice * (1 - TP), stop = LimitPrice * (1 + SL))
TradeCounter := TradeCounter + 1
if ema50>ema200 and TradeCounter < MaxCount and math.abs(ema50-ema200) > minEMAdiff
LimitPrice = close * (1 - LimitDiff)
strategy.entry("enter long", strategy.long, limit = LimitPrice)
strategy.exit("exit long", "enter long", limit = LimitPrice * (1 + TP), stop = LimitPrice * (1 - SL))
TradeCounter := TradeCounter + 1
//alertcondition(#2a2e39 != coro2 , title='MACD Tick Alert', message='Joel on Crypto - MACD Tick Alert')