Strategi ini menggabungkan beberapa indikator teknis, termasuk Moving Average EMA, Moving Average Convergence Spread MACD, SuperTrend, Average Directional Index (ADX) dan Average True Range (ATR), untuk menilai tren pasar, volatilitas, dan sinyal perdagangan melalui kombinasi indikator ini untuk mendapatkan hasil yang baik dalam perdagangan cryptocurrency. Strategi ini memanfaatkan keunggulan dari berbagai indikator untuk menyeimbangkan penilaian tren, penilaian getaran, dan pengendalian risiko, sehingga memberikan sinyal perdagangan yang andal bagi pedagang.
EMA-MACD-SuperTrend-ADX-ATR multi-indikator strategi sinyal perdagangan adalah strategi perdagangan kuantitatif yang menggunakan beberapa indikator teknis secara komprehensif. Melalui kombinasi indikator seperti EMA, MACD, ADX dan ATR, strategi dapat menganalisis pasar dari beberapa dimensi seperti tren, getaran, dan kontrol risiko, memberikan sinyal perdagangan yang andal bagi pedagang. Keunggulan strategi ini terletak pada kombinasi multi-indikator, penilaian tren, kontrol risiko, dan mekanisme stop loss, tetapi juga ada risiko seperti optimasi parameter, adaptasi pasar, biaya perdagangan, dan pengukuran batas kembali.
/*backtest
start: 2023-03-23 00:00:00
end: 2024-03-28 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("EMA-MACD-SuperTrend-ADX-ATR Strategy",
overlay = true,
initial_capital = 1000,
default_qty_type = strategy.percent_of_equity,
default_qty_value = 70)
//MACD
[macdLine, signalLine, hist] = ta.macd(close, 12, 26, 9)
//Plot Candlesticks
candlestickscolor = (hist >= 0 ? (hist[1] < hist ? #26A69A : #B2DFDB) : (hist[1] < hist ? #FFCDD2 : #FF5252))
plotcandle(open, high, low, close,
color = candlestickscolor,
bordercolor = candlestickscolor)
//EMA
ema12 = ta.ema(close, 12)
ema26 = ta.ema(close, 26)
//Plot EMA
plot(ema26, color= #EE6969, linewidth = 2)
plot(ema12, color= #B4CBF0, linewidth = 2)
//Average Directional Index (ADX) Calculation
trueRange = ta.rma(ta.tr, 14)
plusDM = ta.rma(math.max(high - high[1], 0), 14)
minusDM = ta.rma(math.max(low[1] - low, 0), 14)
plusDI = 100 * ta.rma(plusDM / trueRange, 14)
minusDI = 100 * ta.rma(minusDM / trueRange, 14)
adxValue = 100 *ta.rma(math.abs(plusDI - minusDI) / (plusDI + minusDI), 14)
//Trend Confirmation (ADX)
trending = adxValue > 15
//Volatility Filter (ATR)
atrValue = ta.atr(14)
volatility = atrValue > 0.5 * ta.atr(20)
//SuperTrend
atrlength = input.int(10, "ATR Length", step = 1)
factor = input.float(3, "Factor", step = 0.1)
[supertrend, direction] = ta.supertrend(factor, atrlength)
supertrend := barstate.isfirst ? na : supertrend
//Plot SuperTrend
uptrend = plot(direction < 0 ? supertrend : na,
"Up Trend", color = color.green, style = plot.style_linebr, linewidth = 1)
downtrend = plot(direction > 0 ? supertrend : na,
"Down Trend", color = color.red, style = plot.style_linebr, linewidth = 1)
bodymiddle = plot(barstate.isfirst ? na : (open + close)/2, "Body Middle", display = display.none)
fill(bodymiddle, uptrend, color.new(color.green, 90), fillgaps = false)
fill(bodymiddle, downtrend, color.new(color.red, 90), fillgaps = false)
//Entry Conditions
longCondition = ta.crossover(ema12, ema26) and trending and volatility and hist > 0
shortCondition = ta.crossunder(ema12, ema26) and trending and volatility and hist < 0
long_SL_Con = ta.crossunder(close, supertrend)
short_SL_Con = ta.crossover(close, supertrend)
//Plot Signal
plotshape(longCondition,
title='Buy', text='Buy',
location= location.belowbar,
style=shape.labelup, size=size.tiny,
color=color.green, textcolor=color.new(color.white, 0))
plotshape(shortCondition,
title='Sell', text='Sell',
location= location.abovebar,
style=shape.labeldown, size=size.tiny,
color=color.red, textcolor=color.new(color.white, 0))
//Backtest
start = timestamp(2020, 1, 1, 0, 0, 0)
end = timestamp(2024, 1, 1, 0, 0, 0)
backtestperiod = time >= start and time <= end
if longCondition and backtestperiod
strategy.entry("Buy", strategy.long)
if long_SL_Con and backtestperiod
strategy.close("Buy")
if shortCondition and backtestperiod
strategy.entry("Sell", strategy.short)
if short_SL_Con and backtestperiod
strategy.close("Sell")