Strategi ini didasarkan pada persimpangan 21 dan 55 Moving Average untuk menghasilkan sinyal beli dan jual, dan menggabungkan indikator supertrend dengan strategi pelacakan tren untuk memfilter sinyal palsu.
Kode pertama mendefinisikan garis rata-rata bergerak dari garis 21 ((EMA1)) dan garis 55 ((EMA2) menghasilkan sinyal beli saat melewati EMA2 di atas EMA1; menghasilkan sinyal jual saat melewati EMA2 di bawah EMA1.
Untuk menyaring sinyal palsu, kode ini menambahkan indikator supertrend. Indikator supertrend didasarkan pada rata-rata amplitudo riil ATR, yang digabungkan dengan harga tertinggi dan terendah untuk menentukan arah tren.
Dengan cara ini, sinyal beli dihasilkan hanya dengan melewati EMA2 pada EMA1 saat tren naik; sinyal jual dihasilkan hanya dengan melewati EMA2 pada EMA1 saat tren turun. Dengan memfilter indikator supertrend, sinyal palsu yang dihasilkan saat tren berubah dapat dihindari.
Selain itu, kode ini menambahkan garis 200 dan 233 untuk menilai tren jangka panjang, dan hanya menghasilkan sinyal perdagangan jika arah tren jangka panjang konsisten.
Garis rata-rata bergerak ganda yang digabungkan dengan indikator tren super, dapat secara efektif mengidentifikasi arah tren, memfilter sinyal palsu.
Dengan menyesuaikan parameter moving average, sensitivitas strategi dapat disesuaikan dengan kondisi pasar yang berbeda.
Dengan menambahkan penilaian rata-rata jangka panjang, risiko ketidakkonsistenan tren jangka pendek dapat dihindari.
Peraturan yang jelas dan mudah dipahami, parameter yang mudah disesuaikan, cocok untuk transaksi kuantitatif.
Ini adalah sinyal pembelian dan penjualan yang terlihat, operasi yang jelas.
Strategi Garis Rata Bergerak Ganda mudah menghasilkan sinyal yang salah pada titik-titik perputaran tren. Perlu diperhatikan untuk mengidentifikasi perputaran potensial.
Setting parameter moving average line yang tidak tepat dapat melewatkan tren atau menghasilkan terlalu banyak sinyal yang salah. Parameter perlu disesuaikan untuk pasar yang berbeda.
Frekuensi transaksi mungkin lebih tinggi dan perlu diperhatikan pengendalian biaya transaksi.
Parameter indikator supertrend perlu dioptimalkan, jika tidak, sinyal yang benar dapat disaring atau sinyal yang salah disimpan.
Pertimbangan rata-rata jangka panjang dapat menyebabkan keterlambatan sinyal, dan waktu yang tepat untuk mengubah tren diperlukan.
Uji kombinasi rata-rata bergerak yang berbeda untuk mencari parameter optimal.
Mengoptimalkan parameter indikator supertrend, menyeimbangkan efek penyaringan dan delay.
Menambahkan indikator tambahan lainnya, seperti indikator volume transaksi, untuk lebih memvalidasi sinyal.
Adapun faktor-faktor lain yang dapat digunakan untuk menentukan titik balik potensial adalah indikator sentimen, berita, dan sebagainya.
Parameter pengoptimalan dinamis menggunakan metode pembelajaran mesin.
Strategi ini mengintegrasikan keuntungan dari indikator moving averages dan supertrends, yang dapat menemukan tren dan memfilter sinyal kesalahan. Efek strategi dapat terus ditingkatkan melalui optimasi parameter dan verifikasi indikator tambahan. Meskipun ada risiko tertentu, strategi ini dapat dikendalikan melalui manajemen risiko.
/*backtest
start: 2022-09-21 00:00:00
end: 2023-09-27 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"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/
// © bhavikmota
//@version=4
strategy("EMA & Supertrend", overlay = true)
//length = input(9, minval=1)
//ema1 = ema(close, length)
//ema2 = ema(ema1, length)
//ema3 = ema(ema2, length)
//shortest = ema(close, 20)
//short = ema(close, 50)
//longer = ema(close, 100)
//longest = ema(close, 200)
//for Ema1
len1 = input(21, minval=1)
//src1 = input(close)
ema1 = ema(close,len1)
plot(ema1, color=color.red, linewidth=1)
//for Ema2
len2 = input(55, minval=1)
//src2 = input(close)
ema2 = ema(close,len2)
plot(ema2, color=color.green, linewidth=1)
//for Ema3
len3 = input(200, minval=1)
//src3 = input(close)
ema3 = ema(close,len3)
plot(ema3, color=color.blue, linewidth=1)
//for Ema4
len4 = input(233, minval=1)
//src4 = input(close)
ema4 = ema(close,len4)
plot(ema4, color=color.black, linewidth=1)
Periods = input(title="ATR Period", type=input.integer, defval=10)
src = input(hl2, title="Source")
Multiplier = input(title="ATR Multiplier", type=input.float, step=0.1, defval=3.0)
changeATR= input(title="Change ATR Calculation Method ?", type=input.bool, defval=true)
showsignals = input(title="Show Buy/Sell Signals ?", type=input.bool, defval=true)
highlighting = input(title="Highlighter On/Off ?", type=input.bool, defval=true)
atr2 = sma(tr, Periods)
atr= changeATR ? atr(Periods) : atr2
up=src-(Multiplier*atr)
up1 = nz(up[1],up)
up := close[1] > up1 ? max(up,up1) : up
dn=src+(Multiplier*atr)
dn1 = nz(dn[1], dn)
dn := close[1] < dn1 ? min(dn, dn1) : dn
trend = 1
trend := nz(trend[1], trend)
trend := trend == -1 and close > dn1 ? 1 : trend == 1 and close < up1 ? -1 : trend
upPlot = plot(trend == 1 ? up : na, title="Up Trend", style=plot.style_linebr, linewidth=2, color=color.green)
buySignal = trend == 1 and trend[1] == -1
plotshape(buySignal ? up : na, title="UpTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.green, transp=0)
plotshape(buySignal and showsignals ? up : na, title="Buy", text="Buy", location=location.absolute, style=shape.labelup, size=size.tiny, color=color.green, textcolor=color.white, transp=0)
dnPlot = plot(trend == 1 ? na : dn, title="Down Trend", style=plot.style_linebr, linewidth=2, color=color.red)
sellSignal = trend == -1 and trend[1] == 1
plotshape(sellSignal ? dn : na, title="DownTrend Begins", location=location.absolute, style=shape.circle, size=size.tiny, color=color.red, transp=0)
plotshape(sellSignal and showsignals ? dn : na, title="Sell", text="Sell", location=location.absolute, style=shape.labeldown, size=size.tiny, color=color.red, textcolor=color.white, transp=0)
mPlot = plot(ohlc4, title="", style=plot.style_circles, linewidth=0)
longFillColor = highlighting ? (trend == 1 ? color.green : color.white) : color.white
shortFillColor = highlighting ? (trend == -1 ? color.red : color.white) : color.white
fill(mPlot, upPlot, title="UpTrend Highligter", color=longFillColor)
fill(mPlot, dnPlot, title="DownTrend Highligter", color=shortFillColor)
alertcondition(buySignal, title="SuperTrend Buy", message="SuperTrend Buy!")
alertcondition(sellSignal, title="SuperTrend Sell", message="SuperTrend Sell!")
changeCond = trend != trend[1]
alertcondition(changeCond, title="SuperTrend Direction Change", message="SuperTrend has changed direction!")
//Trading logic
Enterlong = crossover(ema1,ema2) or (close>ema1 and close>ema2 and ema1>ema2) and close>ema4// positive ema crossover
Exitlong = crossunder(close,ema2) // candle closes below supertrend
Entershort = crossunder(ema1,ema2) or (close<ema1 and close<ema2 and ema2<ema1) and close<ema4// negative ema crossover
Exitshort = crossover(close,ema2) // candle closes above supertrend
//Execution Logic - Placing Order
start = timestamp(2008,1,1,0,0)
if time>= start
strategy.entry("long", strategy.long, when=Enterlong)
strategy.close("long",when=Exitlong)
//strategy.entry("short",strategy.short,100,when=Entershort)
//strategy.close("short",when=Exitshort)