• Get $30 off VIP with code SUMMER30. Ends July 27. Happy trading!

Converting a single value bubble script to a scan


New member
I found the following free script online Implied Volatility Percentile. I wondered if it could be made into a scan. Trying to apply the normal scan wizard to it doesn't work because of the nature of the study being a single value output . Here's the script. Any help is welcome.

declare lower;

# Mark Laczynski
# 3.13.2014

# look at 1 year of history
input length = 252;
#clean up the IV data from TOS
rec clean_iv_r = if (isNaN(imp_volatility()) and !isNaN(close)) then clean_iv_r[1] else imp_volatility();

rec iv_today_r = GetValue(clean_iv_r, -length);

rec bar_number_of_todays_iv_projected_back =
if IsNaN(bar_number_of_todays_iv_projected_back[1]) then 0
else if (isNaN(iv_today_r)) then BarNumber()
else bar_number_of_todays_iv_projected_back [1];

rec iv_today_projected_back_r =
if(IsNAN(iv_today_projected_back_r[1])) then double.nan
else if(!isNaN(iv_today_r)) then iv_today_r
else if(isNaN(clean_iv_r)) then double.nan
else iv_today_projected_back_r[1];

rec is_considered_for_counting_r =
if(isNan(iv_today_projected_back_r)) then double.nan
else if (BarNumber() - bar_number_of_todays_iv_projected_back != 0) then double.nan
else 1;

rec count_is_under_iv_today_r =
if if (isNan(close)) then double.nan
else (isNan(is_considered_for_counting_r )) then 0
else if (clean_iv_r < iv_today_projected_back_r and !isNan(is_considered_for_counting_r )) then count_is_under_iv_today_r[1] + 1
else count_is_under_iv_today_r[1];

AddLabel(yes,concat("Percentile: ", round(count_is_under_iv_today_r * 100 / length,2)));

Similar threads