study("ADX and DI With Coloured Histogram BUY/SELL")
len = input(title="Length", type=integer, defval=14)
TrueRange = max(max(high-low, abs(high-nz(close[1]))), abs(low-nz(close[1])))
DirectionalMovementPlus = high-nz(high[1]) > nz(low[1])-low ? max(high-nz(high[1]), 0): 0
DirectionalMovementMinus = nz(low[1])-low > high-nz(high[1]) ? max(nz(low[1])-low, 0): 0
SmoothedTrueRange = nz(SmoothedTrueRange[1]) - (nz(SmoothedTrueRange[1])/len) + TrueRange
SmoothedDirectionalMovementPlus = nz(SmoothedDirectionalMovementPlus[1]) - (nz(SmoothedDirectionalMovementPlus[1])/len) + DirectionalMovementPlus
SmoothedDirectionalMovementMinus = nz(SmoothedDirectionalMovementMinus[1]) - (nz(SmoothedDirectionalMovementMinus[1])/len) + DirectionalMovementMinus
DIPlus = SmoothedDirectionalMovementPlus / SmoothedTrueRange * 100
DIMinus = SmoothedDirectionalMovementMinus / SmoothedTrueRange * 100
DX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
ADX = sma(DX, len)
ColorBuy=color(green,0)
ColorSell=color(red,0)
ColorDoNothing=color(white,100)
plot(DIPlus, color=green, title="DI+",linewidth=3,style=line)
plot(DIMinus, color=red, title="DI-",linewidth=3,style=line)
plot(ADX, color=(ADX>DIMinus and DIPlus>DIMinus and ADX > ADX[1]? ColorBuy : (ADX>DIPlus and DIMinus>DIPlus and ADX > ADX[1] ? ColorSell:ColorDoNothing)),title="ADX",style=columns)