Strategi ini menggabungkan beberapa indikator teknis, termasuk Exponential Moving Average (EMA), Moving Average Convergence Divergence (MACD), SuperTrend, Average Directional Index (ADX), dan Average True Range (ATR), untuk menentukan tren pasar, volatilitas, dan sinyal perdagangan, bertujuan untuk mencapai pengembalian yang kuat dalam perdagangan cryptocurrency. Strategi ini memanfaatkan kekuatan indikator yang berbeda untuk menyeimbangkan identifikasi tren, penentuan osilasi, dan pengendalian risiko, memberikan sinyal perdagangan yang dapat diandalkan bagi pedagang.
EMA-MACD-SuperTrend-ADX-ATR Multi-Indicator Trading Signal Strategy adalah strategi perdagangan kuantitatif yang mengintegrasikan beberapa indikator teknis. Dengan menggabungkan indikator seperti EMA, MACD, ADX, dan ATR, strategi menganalisis pasar dari berbagai dimensi, termasuk tren, osilasi, dan kontrol risiko, memberikan sinyal perdagangan yang dapat diandalkan bagi para pedagang. Kekuatan strategi terletak pada kombinasi multi-indikator, identifikasi tren, kontrol risiko, dan mekanisme stop-loss. Namun, strategi ini juga menghadapi risiko seperti optimasi parameter, kemampuan beradaptasi pasar, biaya perdagangan, dan keterbatasan backtesting.
/*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")