이 전략은 지수 이동 평균 (EMA), 이동 평균 수렴 분산 지수 (MACD), 슈퍼 트렌드 (SuperTrend), 평균 방향 지수 (ADX) 및 평균 실제 파도 (ATR) 를 포함한 여러 기술 지표를 통합하여 시장 추세, 변동성 및 거래 신호를 판단하여 암호화폐 거래에서 좋은 수익을 얻도록합니다. 이 전략은 다른 지표의 장점을 활용하여 추세 판단, 충격 판단 및 위험 제어 등의 균형을 맞추기 위해 노력하고 있으며, 거래자에게 신뢰할 수있는 거래 신호를 제공합니다.
EMA-MACD-SuperTrend-ADX-ATR 다중 지표 거래 신호 전략은 여러 기술 지표를 통합적으로 사용하는 양적 거래 전략이다. EMA, MACD, ADX 및 ATR과 같은 지표의 조합을 통해 전략은 트렌드, 변동 및 위험 제어와 같은 여러 차원의 시장 분석을 수행하여 거래자에게 신뢰할 수있는 거래 신호를 제공합니다. 이 전략의 장점은 다중 지표 조합, 추세 판단, 위험 제어 및 손해 방지 장치와 같은 측면에 있지만, 또한 파라미터 최적화, 시장 적응성, 거래 비용 및 재 측정 등의 제한적 위험이 있습니다.
/*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")