Take the high/low of chart and make the high = 1 and low =0?

I don't think what I'm looking for is compression, but it could be. I want to take the high/low of my scanner and set the high = 1 and the low =0.
If you guys know the proper term for doing this, please let me know.
I don't know if what I am trying to make is a Percentile or if its something else.I honestly don't even know if this is possible. So if it's not, please let me know.

Currently my high is 1.22 and my low is 0.57.
and I can't figure out the proper way to set my High =1, but then my active graph is based on the high and low, so if the high is set to 1 then my graph will definitely need to be compressed.
Last edited by a moderator:


Well-known member
What, explicitly, are you attempting to achieve...??? That logic doesn't sound right to me... If you have code, post it... The code, not a shared link...
So I made this code, and Its the IV Index and I'm trying to backtest it against some free scanners from another website. the #'s above are the #'s on $ROKU.
I'm trying to make a code to spit out the same stocks, but I'm having trouble with the math part of it.
I want to see how the current IV compares to both the high on the Implied_Volatility_Indicator_High and the Implied_Volatility_Indicator_Low which is what my original question is about. both these scanners are something I'm trying to create and can't figure out the math term for what a am trying to describe.

#Hint: plots the 52 week high and 52 week low Implied Volatility.
declare lower;
def high = Imp_Volatility();
def low = Imp_Volatility();
 ####Can below Changed to show longer by multiplying # of days (252) by x # of years for longer time frames. Current implied Volatility is also plotted on this chart.
#input 52 week =  Highest(high(period = AggregationPeriod.WEEK), 52)
input number_of_days = 252;
def a1 = Highest(high, number_of_days);
def barNumber1 = BarNumber();
def bar1 = if IsNaN(a1)
then Double.NaN
else BarNumber();
def ThisBar1 = HighestAll(bar1);
def Line1 = if bar1 == ThisBar1
then a1
else Double.NaN;
plot P1 = if ThisBar1
then HighestAll(Line1)
else Double.NaN;
P1.SetDefaultColor(CreateColor(255, 204, 204));
#def number_of_days = 252; is the same at the top, copy this line when creating an individual scan so the info is connected to the below data/chart.
def a2 = Lowest(low, number_of_days);
def barNumber = BarNumber();
def bar2 = if IsNaN(a2)
then Double.NaN
else BarNumber();
def ThisBar2 = HighestAll(bar2);
def Line2 = if bar2 == ThisBar2
then a2
else Double.NaN;
plot P2 = if ThisBar2
then HighestAll(Line2)
else Double.NaN;
P2.SetDefaultColor(CreateColor(204, 255, 204));
def ImpVol = imp_volatility();
###Hint:type percent as a decimal. 10% = 0.1, 13% = 0.13, 6% = 0.06, etc...
input percent = 0.06;
##ImpVoly = p = ImpVol; system wont let me put P there so its staying as ImpVoly and the Implied volatility graph will be called ImpVoly.
           #P1=    highest high of the current time frame.
           #P11=   number that is the % from the highest high as specified above.
           #P12=   actual number that is xyz % below the highest high.
           #P2=    lowest low of the current time frame.
           #P21=   number that is the % from the lowest low as specified above.
           #P22=   actual number that is xyz % above the lowest low.
def P = ImpVol;
def p11 = percent * p1;
def p21 = percent * p2;
plot p22 = p21 + P2;
P22.SetDefaultColor(CreateColor(204, 255, 204));
plot p12 = P1 - p11;
p12.SetDefaultColor(CreateColor(255, 204, 204));
def price = if IsNaN(P) then price[1] else P;
plot ImpVoly = if IsNaN(close) then Double.NaN else price;
AddCloud(p2, p22, CreateColor(204, 255, 204), CreateColor(204, 255, 204));
##AddCloud(OS, neutral, CreateColor(50, 0, 0), CreateColor(50, 0, 0));
AddCloud(p12, p1, CreateColor(255, 204, 204), CreateColor(255, 204, 204));

ImpVoly.DefineColor("The_High", GetColor());
ImpVoly.DefineColor("Normal", GetColor());
ImpVoly.DefineColor("The_Low", GetColor());
ImpVoly.assignValueColor(if ImpVoly > P12 then ImpVoly.color("The_High") else if ImpVoly < P22 then ImpVoly.color("The_Low") else ImpVoly.color("Normal"));

But now that I plug in more stocks into this equation, Im getting a very different # for the IV of stocks depending on the website I look at. Did I do something wrong on my graph? like on $FSR on the 1year:1day chart, its showing an implied volatility of 0 until 9/15. and then if I switch the time frame to 3year:1Day it doesn't even show a value until 3/3/2020. Then if you go to Home Depot you can see the IV way back into at least the 1980's. Why is the scanner doing this? Or is it something the data wasn't available for until it suddenly is the graph is made?

I already turned the above code into multiple scanners. Now that I backtest the above scanner against this, I'm having discrepancies between this and my scanner.
Like game stop is showing an Implied Volatility of 285%, but this scanner I made is showing 215%. and then the 52 week high they are showing is the IV from Friday, which seems to completely take out the IV highs from 3/16, which according to mine is 422%
When I made this I tested it against the same website when $BA showed up, my Implied Volatility was matching what the website was saying. So it seems like its hit and miss with what the IV shows on other websites versus mine.

Similar threads