
Gagasan inti dari strategi ini adalah kombinasi antara garis rata-rata ganda dan indikator MACD untuk menentukan arah tren, untuk memungkinkan perdagangan pelacakan tren. Ketika garis rata-rata jangka pendek melewati garis rata-rata jangka panjang, penilaian sebagai peluang bullish; Ketika garis rata-rata jangka pendek melewati garis rata-rata jangka panjang, penilaian sebagai peluang bearish. Indikator MACD digunakan untuk menentukan titik jual beli, ketika pilar MACD melewati 0 pilar bullish, saat melewati turun turun.
Hitung garis cepat EMA (garis ke-12), garis lambat EMA (garis ke-26) dan garis sinyal EMA (garis ke-9).
Hitung garis MACD pilar ((jalur cepat-jalur lambat) dan garis sinyal MACD ((jalur MACD hari ke-9)).
Hitung garis 50 dan 200 sebagai garis rata-rata untuk menentukan tren besar.
Akses 0 di atas garis MACD sebagai sinyal bullish, akses 0 di bawah sebagai sinyal bearish.
Garis cepat melewati garis lambat dan garis rata-rata jangka pendek melewati garis rata-rata jangka panjang sebagai sinyal bullish.
Garis cepat melewati garis lambat dan garis rata-rata jangka pendek melewati garis rata-rata jangka panjang sebagai sinyal bearish.
Setiap kali arah garis rata-rata berubah, memungkinkan beberapa perdagangan masuk, dengan Max trades after EMA cross parameter kontrol.
Setelah masuk ke dalam, stop loss akan meluruskan posisi.
Perdagangan Forex di Indonesia adalah salah satu cara yang paling efektif untuk mengevaluasi tren dan menghindari perdagangan negatif.
MACD menentukan titik jual beli dan dapat menangkap perubahan tren tepat waktu.
Kombinasi dengan Garis Dua Persamaan dan MACD, dapat menangkap waktu masuk yang lebih baik dalam tren.
Setel jumlah maksimum transaksi untuk menghindari kebocoran.
Pengendalian risiko dari mekanisme penghentian kerusakan.
Parameter yang lebih baik dapat diperoleh dengan mengoptimalkan parameter.
Kesalahan penilaian tren besar menyebabkan kerugian perdagangan yang berlawanan. Persyaratan kesenjangan garis rata-rata dapat dilepaskan secara tepat untuk memastikan penangkapan tren besar.
Sinyal jual beli MACD terlambat, yang dapat menyebabkan masuk terlalu dini atau terlalu terlambat. Parameter MACD dapat disesuaikan, atau dapat digabungkan dengan sinyal penyaringan indikator lainnya.
Stop loss yang tidak tepat, mungkin terlalu longgar atau terlalu ketat, menyebabkan terlalu banyak atau tidak cukup stop loss. Perlu dilakukan pengujian optimasi parameter untuk varietas yang berbeda.
Optimasi parameter sulit, karena kombinasi parameter yang berbeda diperlukan untuk varietas dan periode waktu yang berbeda, yang memerlukan banyak pengujian pra-pengujian.
Cobalah indikator lain untuk menilai tren besar, seperti indikator KD.
Cobalah untuk menggabungkan sinyal penyaringan MACD dengan indikator lain, seperti Brinband, ATR Stop.
Mengoptimalkan parameter stop-loss untuk menemukan kombinasi parameter yang optimal untuk tes yang berbeda untuk setiap varietas.
Menggunakan metode optimasi progresif dan optimasi acak untuk mencari kombinasi parameter yang lebih baik.
Menambahkan mekanisme untuk mengurangi frekuensi transaksi, seperti pengaturan zona terlarang di dekat sumbu nol MACD.
Optimasi parameter dan kombinasi secara otomatis untuk berbagai varietas.
Strategi ini menggabungkan penggunaan dua garis rata untuk menentukan tren besar dan MACD untuk menentukan titik jual beli, membentuk strategi pelacakan tren yang lebih kuat. Dengan optimasi parameter dan kombinasi indikator, kinerja strategi dapat ditingkatkan lebih lanjut. Secara keseluruhan, strategi ini memiliki kemampuan tahan risiko dan ruang keuntungan yang kuat, layak untuk dipertimbangkan di 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')