ATR Normalized Indicator for ThinkorSwim


New member
Hi there I'm new here and I'm trying to come out a thinkscript similar to the video below.

Adam Khoo uses it in combination with William R to determine market bottom. However I couldn't quite get the thinkscript portion of it, anyone is able to offer any insights that comes close to his?


New member
The thinkscript, the thinkorswim default only has ATR but not the normalized one. I tried writing but came nowhere near what he’s seeing.


Active member
I will take a look at creating one, see what I get.

declare lower;

input length = 14;
input averageType = AverageType.WILDERS;

def ATR = MovingAverage(averageType, TrueRange(high, close, low), length);

plot normal =( atr/close * 1000);

Could easily be all coded together with trigger arrows will look at that tomorrow.

I tested the idea and it has only found 2 times in 15 years it would have triggered, Tried running it on lower time frames than a weekly and it is of no value so not sure worth going any further.

What normalized atr are you using in TradingView?


New member
Hi @inthefutures,

How do you rewrite the tradingview's code below in thinkorswim? Thank you in advance for your help. I am not too familiar with thinkscript and couldn't get it to work.

study(title="ATR Percent Rank", shorttitle="ATR Normalized", overlay=false)

source = close

atrlen = input(13, minval=1, title = "ATR Length")

lookback = input(52, minval=1, title ="Percent Rank Lookback")

atrp = percentrank(atr(atrlen),lookback)

plot(atrp, color=#ff9800, transp=0)

I think I came close, but it does not like my plot statement.

study(title="ATR Percent Rank", shorttitle="ATR Normalized", overlay=false)
source = close
atrlen = 13
lookback = 52

atrp = percentrank(atr(atrlen),lookback);

plot atrp (color=#ff9800);

Only work for Year 2009.
Last edited by a moderator:


Well-known member
2019 Donor
Per the requests in this post; I've created a version of this study. I think it's quite helpful in classifying the volatility of the market:

#APTR Percentile Rank for ThinkorSwim Version 1.0
# 2020.04.11 V1.0 @diazlaz - Initial Release
#ATR PercentileRank - Great For Showing Market Bottoms.
#When Increased Volatility to the Downside Reaches Extreme Levels
#it’s Usually a Sign of a Market Bottom.
#This Indicator Takes the ATR and uses a different LookBack Period
#to calculate the Percentile Rank of ATR Which is a Great Way To
#Calculate Volatility

declare lower;

input length = 10;
input length2 = 100; #no. of Bars the PercentileRank uses to Calculate Rank
input averageType = AverageType.WILDERS;
input paintBars = yes;
input showLabels = yes;

AddLabel (showLabels, "APTR Percentile Rank for ThinkorSwim Version 1.0", COLOR.ORANGE);

def bottom = Min(close[1], low);
def tr = TrueRange(high, close, low);
def ptr = tr / (bottom + tr / 2) * 100;
def APTR = MovingAverage(averageType, ptr, length);

#Percentile Rank Calculation
def percentRankCount = fold i = 1 to length2 + 1 with count = 0
  if APTR[0] > APTR[i] then
    count + 1
def percentRank = Round( percentRankCount / length2 * 100.0, 0);

plot pATRRank = percentRank;

plot p25 = 25;
plot p50 = 50;
plot p75 = 75;




#END Of APTR Percentile Rank for ThinkorSwim Version 1.0


New member
I have the same problem. The thinkorswim platform doesn't offer a "normalized" option... Only Wilder, Simple, Exponential etc...

Is there a way to add it to the mobile app somehow? Or did anyone found a solution?

Thanks! :)


New member
@diazlaz Great job. What modifications are needed for the indicator to be used as a Custom Scan Study? Using just one of the pX's (25 or 50 or 75).

Similar threads