//PRC_Adaptive-ATR-ADX-Trend-V2 | indicator
//29.06.2017
//Nicolas @ www.prorealcode.com
//Sharing ProRealTime knowledge
//translated from tradingview code
// --- settings
atrLen = 21
m1 = 3.5 //"ATR Multiplier - ADX Rising"
m2 = 1.75 //"ATR Multiplier - ADX Falling"
adxLen = 14
adxThresh = 30 //"ADX Threshold"
aboveThresh = 1 //true, title = "ADX Above Threshold uses ATR Falling Multiplier Even if Rising?")
useHeiken = 1 //(false, title = "Use Heiken-Ashi Bars (Source will be ohlc4)")
// --- end of settings
source = MedianPrice
// DI-Pos, DI-Neg, ADX
hR = high-high[1]
lR = -(low-low[1])
if hr>lr then
dmPos=max(hr,0)
else
dmPos=0
endif
if lr>hr then
dmNeg=max(lr,0)
else
dmNeg=0
endif
sTR = (sTR[1] - sTR[1]) / adxLen + tr
sDMPos = (sDMPos[1] - sDMPos[1]) / adxLen + dmPos
sDMNeg = (sDMNeg[1] - sDMNeg[1]) / adxLen + dmNeg
DIP = sDMPos / sTR * 100
DIN = sDMNeg / sTR * 100
DX = abs(DIP - DIN) / (DIP + DIN) * 100
aadx = average[adxLen](DX)
// Heiken-Ashi
if barindex<2 then
xClose = close
xOpen = open
else
xClose = TotalPrice
xOpen = (xOpen[1] + close[1]) / 2
endif
xHigh = max(high, max(xOpen, xClose))
xLow = min(low, min(xOpen, xClose))
// Trailing ATR
v1 = abs(xHigh - xClose[1])
v2 = abs(xLow - xClose[1])
v3 = xHigh - xLow
trueRange = max(v1, max(v2, v3))
if useHeiken then
atr = WilderAverage[atrLen](trueRange)
else
atr = AverageTrueRange[atrLen]
endif
if aadx>aadx[1] and (adx < adxThresh or not aboveThresh) then
m=m1
elsif aadx<aadx[1] or (adx > adxThresh and aboveThresh) then
m=m2
else
m = m[1]
endif
if DIP >= DIN then
mUp=m
else
mUp=m2
endif
if DIN >= DIP then
mDn=m
else
mDn=m2
endif
if useHeiken then
src=xClose
c=Xclose
t=(xHigh+xLow)/2
else
src=source
c=close
t=MedianPrice
endif
up = t - mUp * atr
dn = t + mDn * atr
if max(src[1], c[1]) > TUp[1] then
TUp = max(up,TUp[1])
else
TUp = up
endif
if min(src[1], c[1]) < TDown[1] then
TDown = min(dn, TDown[1])
else
TDown = dn
endif
//trend
if min(src,min(c,close))>TDown[1] then
trend=1
elsif max(src,max(c,close))<TUp[1] then
trend=-1
else
trend=trend[1]
endif
if trend=1 then
sstop=TUp
r=0
g=255
else
sstop=TDown
r=255
g=0
endif
if trend<>trend[1] then
drawtext("•",barindex,sstop,Dialog,Standard,30) coloured(r,g,0)
endif
return sstop coloured(r,g,0) style(line,2)