Option Heatmap and OI Strikes For ThinkOrSwim

@ziongotoptions looking good Thank you!
r5gYMYo.png
how do you get the open interest profile on the right like that on the chart? when i use the study, i do not see any open interest volume profile. i even set my expansion area to 100bars
 
Are there instructions posted somewhere that explain how to interpret the OI Profile and the Heat Map?
 
Last edited by a moderator:
Thanks for the great script. I have two questions:

1. Is there a way to only display OI > 1000, for example?
2. Can I toggle the bubbles?
 
Most Recent Update
Edit: Now works for prices > 1000
Code:
#hint barLength: The number of bars used to calculate the ADX <b>(Default is 14)</b>


#hint barLength: The number of bars used to calculate the ADX <b>(Default is 14)</b>


def series = 1;

input show_label = yes;
input mode = {default AUTO, MANUAL};


def RTHopen = open(period = AggregationPeriod.DAY);
def CurrentYear = GetYear();
def CurrentMonth = GetMonth();
def CurrentDOM = GetDayOfMonth(GetYYYYMMDD());
def Day1DOW1 = GetDayOfWeek((CurrentYear * 10000) + (CurrentMonth * 100) + 1); # First DOM is this DOW
def FirstFridayDOM1 = if Day1DOW1 < 6
then 6 - Day1DOW1
else if Day1DOW1 == 6
then 7
else 6;

def SecondFridayDOM = FirstFridayDOM1 + 7;
def ThirdFridayDOM = FirstFridayDOM1 + 14;
def FourthFridayDOM = FirstFridayDOM1 + 21;
def RollDOM = FirstFridayDOM1 + 14; #changed to 21 to pick up all Fridays of the current month for weekly options
def ExpMonthA = if RollDOM > CurrentDOM #MK - expmonth1 changed to ExpmonthA
then CurrentMonth + series - 1
else CurrentMonth + series;

def ExpMonthB = if ExpMonthA > 12 #options month input -- #MK - expmonth2 changed to ExpmonthB
then ExpMonthA - 12
else ExpMonthA;

def ExpYear = if ExpMonthA > 12 #options year input
then CurrentYear + 1
else CurrentYear;


def Day1DOW = GetDayOfWeek(ExpYear * 10000 + ExpMonthB * 100 + 1); #first friday expiry calc
def FirstFridayDOM = if Day1DOW < 6
then 6 - Day1DOW
else if Day1DOW == 6
then 7
else 6;

#MK added easier input to fix date
input datefix = 0;
def ExpDOM = FirstFridayDOM + 14 + datefix;

def ExpMonth2 = ExpMonthB; #MK in case more date issues need to be fixed

#strike spacing inputs
input maxStrikeSpacing = 25;
input manualCenterStrike = 440;
input manualStrikeSpacing = 1.0;


#centerstrike
rec centerStrike = if (mode == mode.AUTO and !IsNaN(close)) then Round(close / 10.0, 0) * 10.0 else if (mode == mode.MANUAL and !IsNaN(close)) then manualcenterstrike else centerStrike[1]; #MK - imported from prev code - plot now working

#strikeSpacing
def strikeSpacingC = fold i = 1 to maxStrikeSpacing with spacing = 0 do if !IsNaN( open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", Asprice(centerStrike + (maxStrikeSpacing - i)))))) then maxStrikeSpacing - i else spacing;

rec strikeSpacing = if (mode == mode.AUTO and !IsNaN(close)) then strikeSpacingC else if (mode == mode.MANUAL and !IsNaN(close)) then manualStrikeSpacing else strikeSpacing[1];

### bar vars ###
input displayOffset = 5; # Number of bars to right of current bar for display
input barWeight = 1;
rec barOffset = if !IsNaN(close) then strikeSpacing / 10.0 else barOffset[1];
rec extBar = if IsNaN(close[displayOffset]) then extBar[1] + 1 else 0; # Number of bars of right space minus 5
input barLength = 45;

#call/put colors
DefineGlobalColor("Calls", Color.GREEN);
DefineGlobalColor("Puts", Color.RED);

#current option expiry label
#AddLabel(yes, Concat("Expiration: ", Concat(Concat(ExpYear - 2000,
        #if ExpMonth2 <= 9 then Concat("0", ExpMonth2)
            #else Concat("", ExpMonth2)),
        #if ExpDOM <= 9 then Concat("0", ExpDOM)
            #else Concat("", ExpDOM))), Color.WHITE);


AddLabel(yes, (Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM))))));
addLabel(yes, (Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike)))));


#options calculations **************

def c1_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing *0 ))));
def c2_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 1))));
def c3_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 2))));
def c4_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 3))));
def c5_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing))));
def c6_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 2))));
def c7_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 3))));

def c8_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 4))));
def c9_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 4))));
def c10_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 5))));
def c11_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 5))));
def c12_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 6))));
def c13_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 6))));
def c14_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 7))));
def c15_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 7))));
def c16_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 8))));
def c17_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 8))));
def c18_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 9))));
def c19_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 9))));
def c20_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 10))));
def c21_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 10))));
def c22_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 11))));
def c23_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 11))));
def c24_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 12))));
def c25_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 12))));
def c26_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 13))));
def c27_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 13))));
def c28_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 14))));
def c29_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 14))));
def c30_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 15))));
def c31_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 15))));
def c32_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 16))));
def c33_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 16))));
def c34_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 17))));
def c35_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 17))));
def c36_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 18))));
def c37_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 18))));
def c38_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike - strikeSpacing * 19))));
def c39_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("C", AsPrice(centerStrike + strikeSpacing * 19))));

#puts
def p1_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike))));
def p2_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing))));
def p3_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 2))));
def p4_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 3))));

def p5_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing))));
def p6_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 2))));
def p7_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 3))));

def p8_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 4))));
def p9_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 4))));
def p10_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 5))));
def p11_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 5))));
def p12_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 6))));
def p13_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 6))));
def p14_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 7))));
def p15_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 7))));
def p16_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 8))));
def p17_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 8))));
def p18_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 9))));
def p19_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 9))));
def p20_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 10))));
def p21_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 10))));
def p22_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 11))));
def p23_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 11))));
def p24_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 12))));
def p25_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 12))));
def p26_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 13))));
def p27_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 13))));
def p28_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 14))));
def p29_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 14))));
def p30_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 15))));
def p31_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 15))));
def p32_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 16))));
def p33_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 16))));
def p34_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 17))));
def p35_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 17))));
def p36_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 18))));
def p37_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 18))));
def p38_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike - strikeSpacing * 19))));
def p39_V_d = open_interest(Concat(Concat(".", Concat(GetSymbolPart(), Concat(Concat(ExpYear - 2000, if ExpMonth2 <= 9 then Concat("0", ExpMonth2) else Concat("", ExpMonth2)), if ExpDOM <= 9 then Concat("0", ExpDOM) else Concat("", ExpDOM)))), Concat("P", AsPrice(centerStrike + strikeSpacing * 19))));

def c1_V = if !IsNaN(c1_V_d) then c1_V_d else 0;
def c2_V = if !IsNaN(c2_V_d) then c2_V_d else 0;
def c3_V = if !IsNaN(c3_V_d) then c3_V_d else 0;
def c4_V = if !IsNaN(c4_V_d) then c4_V_d else 0;
def c5_V = if !IsNaN(c5_V_d) then c5_V_d else 0;
def c6_V = if !IsNaN(c6_V_d) then c6_V_d else 0;
def c7_V = if !IsNaN(c7_V_d) then c7_V_d else 0;
def c8_V = if !IsNaN(c8_V_d) then c8_V_d else 0;
def c9_V = if !IsNaN(c9_V_d) then c9_V_d else 0;
def c10_V = if !IsNaN(c10_V_d) then c10_V_d else 0;
def c11_V = if !IsNaN(c11_V_d) then c11_V_d else 0;

def c12_V = if !IsNaN(c12_V_d) then c12_V_d else 0;
def c13_V = if !IsNaN(c13_V_d) then c13_V_d else 0;
def c14_V = if !IsNaN(c14_V_d) then c14_V_d else 0;
def c15_V = if !IsNaN(c15_V_d) then c15_V_d else 0;
def c16_V = if !IsNaN(c16_V_d) then c16_V_d else 0;
def c17_V = if !IsNaN(c17_V_d) then c17_V_d else 0;
def c18_V = if !IsNaN(c18_V_d) then c18_V_d else 0;
def c19_V = if !IsNaN(c19_V_d) then c19_V_d else 0;
def c20_V = if !IsNaN(c20_V_d) then c20_V_d else 0;
def c21_V = if !IsNaN(c21_V_d) then c21_V_d else 0;
def c22_V = if !IsNaN(c22_V_d) then c22_V_d else 0;
def c23_V = if !IsNaN(c23_V_d) then c23_V_d else 0;
def c24_V = if !IsNaN(c24_V_d) then c24_V_d else 0;
def c25_V = if !IsNaN(c25_V_d) then c25_V_d else 0;
def c26_V = if !IsNaN(c26_V_d) then c26_V_d else 0;
def c27_V = if !IsNaN(c27_V_d) then c27_V_d else 0;
def c28_V = if !IsNaN(c28_V_d) then c28_V_d else 0;
def c29_V = if !IsNaN(c29_V_d) then c29_V_d else 0;
def c30_V = if !IsNaN(c30_V_d) then c30_V_d else 0;

def c31_V = if !IsNaN(c31_V_d) then c31_V_d else 0;
def c32_V = if !IsNaN(c32_V_d) then c32_V_d else 0;
def c33_V = if !IsNaN(c33_V_d) then c33_V_d else 0;
def c34_V = if !IsNaN(c34_V_d) then c34_V_d else 0;
def c35_V = if !IsNaN(c35_V_d) then c35_V_d else 0;
def c36_V = if !IsNaN(c36_V_d) then c36_V_d else 0;
def c37_V = if !IsNaN(c37_V_d) then c37_V_d else 0;
def c38_V = if !IsNaN(c38_V_d) then c38_V_d else 0;

def p1_V = if !IsNaN(p1_V_d) then p1_V_d else 0;
def p2_V = if !IsNaN(p2_V_d) then p2_V_d else 0;
def p3_V = if !IsNaN(p3_V_d) then p3_V_d else 0;
def p4_V = if !IsNaN(p4_V_d) then p4_V_d else 0;
def p5_V = if !IsNaN(p5_V_d) then p5_V_d else 0;
def p6_V = if !IsNaN(p6_V_d) then p6_V_d else 0;
def p7_V = if !IsNaN(p7_V_d) then p7_V_d else 0;
def p8_V = if !IsNaN(p8_V_d) then p8_V_d else 0;
def p9_V = if !IsNaN(p9_V_d) then p9_V_d else 0;
def p10_V = if !IsNaN(p10_V_d) then p10_V_d else 0;
def p11_V = if !IsNaN(p11_V_d) then p11_V_d else 0;

def p12_V = if !IsNaN(p12_V_d) then p12_V_d else 0;
def p13_V = if !IsNaN(p13_V_d) then p13_V_d else 0;
def p14_V = if !IsNaN(p14_V_d) then p14_V_d else 0;
def p15_V = if !IsNaN(p15_V_d) then p15_V_d else 0;
def p16_V = if !IsNaN(p16_V_d) then p16_V_d else 0;
def p17_V = if !IsNaN(p17_V_d) then p17_V_d else 0;
def p18_V = if !IsNaN(p18_V_d) then p18_V_d else 0;
def p19_V = if !IsNaN(p19_V_d) then p19_V_d else 0;
def p20_V = if !IsNaN(p20_V_d) then p20_V_d else 0;
def p21_V = if !IsNaN(p21_V_d) then p21_V_d else 0;
def p22_V = if !IsNaN(p22_V_d) then p22_V_d else 0;
def p23_V = if !IsNaN(p23_V_d) then p23_V_d else 0;
def p24_V = if !IsNaN(p24_V_d) then p24_V_d else 0;
def p25_V = if !IsNaN(p25_V_d) then p25_V_d else 0;
def p26_V = if !IsNaN(p26_V_d) then p26_V_d else 0;
def p27_V = if !IsNaN(p27_V_d) then p27_V_d else 0;
def p28_V = if !IsNaN(p28_V_d) then p28_V_d else 0;
def p29_V = if !IsNaN(p29_V_d) then p29_V_d else 0;
def p30_V = if !IsNaN(p30_V_d) then p30_V_d else 0;

def p31_V = if !IsNaN(p31_V_d) then p31_V_d else 0;
def p32_V = if !IsNaN(p32_V_d) then p32_V_d else 0;
def p33_V = if !IsNaN(p33_V_d) then p33_V_d else 0;
def p34_V = if !IsNaN(p34_V_d) then p34_V_d else 0;
def p35_V = if !IsNaN(p35_V_d) then p35_V_d else 0;
def p36_V = if !IsNaN(p36_V_d) then p36_V_d else 0;
def p37_V = if !IsNaN(p37_V_d) then p37_V_d else 0;
def p38_V = if !IsNaN(p38_V_d) then p38_V_d else 0;


def c1t = Max(Max(Max(Max(c1_V, c2_V), c3_V), c4_V), c5_V);
def c2t = Max(Max(Max(Max(Max(c6_V, c7_V), c8_V), c9_V), c10_V), c11_V);

def c3t = Max(Max(Max(Max(Max(Max(Max(c12_V, c13_V), c14_V), c15_V), c16_V), c17_V),c18_V),c19_V);
def c4t = Max(Max(Max(Max(Max(c20_V, c21_V),c22_V),c23_V),c24_V),c25_V);
def c5t = Max(Max(Max(Max(Max(Max(c26_V,c27_V),c28_v),c29_v),c30_V),c31_v),c32_v);
def c6t = Max(Max(Max(Max(Max(c33_V,c34_V),c35_v),c36_v),c37_V),c38_v);

def p1t = Max(Max(Max(Max(p1_V, p2_V), p3_V), p4_V), p5_V);
def p2t = Max(Max(Max(Max(Max(p6_V, p7_V), p8_V), p9_V), p10_V), p11_V);

def p3t = Max(Max(Max(Max(Max(Max(Max(p12_V, p13_V), p14_V), p15_V), p16_V), p17_V),p18_V),p19_V);
def p4t = Max(Max(Max(Max(Max(p20_V, p21_V),p22_V),p23_V),p24_V),p25_V);
def p5t = Max(Max(Max(Max(Max(Max(p26_V,p27_V),p28_v),p29_v),p30_V),p31_v),p32_v);
def p6t = Max(Max(Max(Max(Max(p33_V,p34_V),p35_v),p36_v),p37_V),p38_v);



def c_V_max = Max(Max(Max(Max(Max(c1t, c2t), c3t), c4t),c5t),c6t);
def p_V_max = Max(Max(Max(Max(Max(p1t, p2t), p3t), p4t),p5t),p6t);
def OI_max = Max(c_V_max, p_V_max);

def cVT = c1_V + c2_V + c3_V + c4_V + c5_V + c6_V + c7_V + c8_V + c9_V + c10_V + c11_V + c12_V + c13_V + c14_V + c15_V + c16_V + c17_V + c18_V + c19_V + c20_V + c21_V + c22_V + c23_V + c24_V + c25_V + c26_V + c27_V + c28_V + c29_V + c30_V + c31_V + c32_V + c33_V + c34_V + c35_V + c36_V + c37_V + c38_V;

def pVT = p1_V + p2_V + p3_V + p4_V + p5_V + p6_V + p7_V + p8_V + p9_V + p10_V + p11_V + p12_V + p13_V + p14_V + p15_V + p16_V + p17_V + p18_V + p19_V + p20_V + p21_V + p22_V + p23_V + p24_V + p25_V + p26_V + p27_V + p28_V + p29_V + p30_V + p31_V + p32_V + p33_V + p34_V + p35_V + p36_V + p37_V + p38_V;

AddLabel(yes, Concat("Call OI: ", cVT), GlobalColor("Calls"));
AddLabel(yes, Concat("Put OI: ", pVT), GlobalColor("Puts"));


#strike spacing
def strikespac = if mode == mode.AUTO then strikeSpacing else 1; #MK - auto pricerange option
AddLabel(show_label, Concat("Strike Spacing: ", strikespac), Color.WHITE);

rec c1_D = if IsNaN(close) then c1_D[1] else Ceil((c1_V / OI_max) * barLength);
plot C1 = if c1_D >= extBar and extBar != 0 then centerStrike + barOffset else Double.NaN;
C1.SetDefaultColor(GlobalColor("Calls") );
C1.SetLineWeight(barWeight);

rec c2_D = if IsNaN(close) then c2_D[1] else Ceil((c2_V / OI_max) * barLength);
plot C2 = if c2_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac else Double.NaN;
C2.SetDefaultColor(GlobalColor("Calls"));
C2.SetLineWeight(barWeight);

rec c3_D = if IsNaN(close) then c3_D[1] else Ceil((c3_V / OI_max) * barLength);
plot C3 = if c3_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 2 else Double.NaN;
C3.SetDefaultColor(GlobalColor("Calls"));
C3.SetLineWeight(barWeight);

rec c4_D = if IsNaN(close) then c4_D[1] else Ceil((c4_V / OI_max) * barLength);
plot C4 = if c4_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 3 else Double.NaN;
C4.SetDefaultColor(GlobalColor("Calls"));
C4.SetLineWeight(barWeight);

rec c5_D = if IsNaN(close) then c5_D[1] else Ceil((c5_V / OI_max) * barLength);
plot C5 = if c5_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac else Double.NaN;
C5.SetDefaultColor(GlobalColor("Calls"));
C5.SetLineWeight(barWeight);

rec c6_D = if IsNaN(close) then c6_D[1] else Ceil((c6_V / OI_max) * barLength);
plot C6 = if c6_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 2 else Double.NaN;
C6.SetDefaultColor(GlobalColor("Calls"));
C6.SetLineWeight(barWeight);

rec c7_D = if IsNaN(close) then c7_D[1] else Ceil((c7_V / OI_max) * barLength);
plot C7 = if c7_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 3 else Double.NaN;
C7.SetDefaultColor(GlobalColor("Calls"));
C7.SetLineWeight(barWeight);

rec c8_D = if IsNaN(close) then c8_D[1] else Ceil((c8_V / OI_max) * barLength);
plot C8 = if c8_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 4 else Double.NaN;
C8.SetDefaultColor(GlobalColor("Calls"));
C8.SetLineWeight(barWeight);

rec c9_D = if IsNaN(close) then c9_D[1] else Ceil((c9_V / OI_max) * barLength);
plot C9 = if c9_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 4 else Double.NaN;
C9.SetDefaultColor(GlobalColor("Calls"));
C9.SetLineWeight(barWeight);

rec c10_D = if IsNaN(close) then c10_D[1] else Ceil((c10_V / OI_max) * barLength);
plot C10 = if c10_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 5 else Double.NaN;
C10.SetDefaultColor(GlobalColor("Calls"));
C10.SetLineWeight(barWeight);

rec c11_D = if IsNaN(close) then c11_D[1] else Ceil((c11_V / OI_max) * barLength);
plot C11 = if c11_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 5 else Double.NaN;
C11.SetDefaultColor(GlobalColor("Calls"));
C11.SetLineWeight(barWeight);

rec c12_D = if IsNaN(close) then c12_D[1] else Ceil((c12_V / OI_max) * barLength);
plot C12 = if c12_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 6 else Double.NaN;
C12.SetDefaultColor(GlobalColor("Calls"));
C12.SetLineWeight(barWeight);

rec c13_D = if IsNaN(close) then c13_D[1] else Ceil((c13_V / OI_max) * barLength);
plot C13 = if c13_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 6 else Double.NaN;
C13.SetDefaultColor(GlobalColor("Calls"));
C13.SetLineWeight(barWeight);

rec c14_D = if IsNaN(close) then c14_D[1] else Ceil((c14_V / OI_max) * barLength);
plot C14 = if c14_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 7 else Double.NaN;
C14.SetDefaultColor(GlobalColor("Calls"));
C14.SetLineWeight(barWeight);

rec c15_D = if IsNaN(close) then c15_D[1] else Ceil((c15_V / OI_max) * barLength);
plot C15 = if c15_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 7 else Double.NaN;
C15.SetDefaultColor(GlobalColor("Calls"));
C15.SetLineWeight(barWeight);

rec c16_D = if IsNaN(close) then c16_D[1] else Ceil((c16_V / OI_max) * barLength);
plot C16 = if c16_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 8 else Double.NaN;
C16.SetDefaultColor(GlobalColor("Calls"));
C16.SetLineWeight(barWeight);

rec c17_D = if IsNaN(close) then c17_D[1] else Ceil((c17_V / OI_max) * barLength);
plot C17 = if c17_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 8 else Double.NaN;
C17.SetDefaultColor(GlobalColor("Calls"));
C17.SetLineWeight(barWeight);

rec c18_D = if IsNaN(close) then c18_D[1] else Ceil((c18_V / OI_max) * barLength);
plot C18 = if c18_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 9 else Double.NaN;
C18.SetDefaultColor(GlobalColor("Calls"));
C18.SetLineWeight(barWeight);

rec c19_D = if IsNaN(close) then c19_D[1] else Ceil((c19_V / OI_max) * barLength);
plot C19 = if c19_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 9 else Double.NaN;
C19.SetDefaultColor(GlobalColor("Calls"));
C19.SetLineWeight(barWeight);

rec c20_D = if IsNaN(close) then c20_D[1] else Ceil((c20_V / OI_max) * barLength);
plot C20 = if c20_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 10 else Double.NaN;
C20.SetDefaultColor(GlobalColor("Calls"));
C20.SetLineWeight(barWeight);

rec c21_D = if IsNaN(close) then c21_D[1] else Ceil((c21_V / OI_max) * barLength);
plot C21 = if c21_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 10 else Double.NaN;
C21.SetDefaultColor(GlobalColor("Calls"));
C21.SetLineWeight(barWeight);

rec c22_D = if IsNaN(close) then c22_D[1] else Ceil((c22_V / OI_max) * barLength);
plot C22 = if c22_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 11 else Double.NaN;
C22.SetDefaultColor(GlobalColor("Calls"));
C22.SetLineWeight(barWeight);

rec c23_D = if IsNaN(close) then c23_D[1] else Ceil((c23_V / OI_max) * barLength);
plot C23 = if c23_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 11 else Double.NaN;
C23.SetDefaultColor(GlobalColor("Calls"));
C23.SetLineWeight(barWeight);

rec c24_D = if IsNaN(close) then c24_D[1] else Ceil((c24_V / OI_max) * barLength);
plot C24 = if c24_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 12 else Double.NaN;
C24.SetDefaultColor(GlobalColor("Calls"));
C24.SetLineWeight(barWeight);

rec c25_D = if IsNaN(close) then c25_D[1] else Ceil((c25_V / OI_max) * barLength);
plot C25 = if c25_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 12 else Double.NaN;
C25.SetDefaultColor(GlobalColor("Calls"));
C25.SetLineWeight(barWeight);

rec c26_D = if IsNaN(close) then c26_D[1] else Ceil((c26_V / OI_max) * barLength);
plot C26 = if c26_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 13 else Double.NaN;
C26.SetDefaultColor(GlobalColor("Calls"));
C26.SetLineWeight(barWeight);

rec c27_D = if IsNaN(close) then c27_D[1] else Ceil((c27_V / OI_max) * barLength);
plot C27 = if c27_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 13 else Double.NaN;
C27.SetDefaultColor(GlobalColor("Calls"));
C27.SetLineWeight(barWeight);

rec c28_D = if IsNaN(close) then c28_D[1] else Ceil((c28_V / OI_max) * barLength);
plot C28 = if c28_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 14 else Double.NaN;
C28.SetDefaultColor(GlobalColor("Calls"));
C28.SetLineWeight(barWeight);

rec c29_D = if IsNaN(close) then c29_D[1] else Ceil((c29_V / OI_max) * barLength);
plot C29 = if c29_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 14 else Double.NaN;
C29.SetDefaultColor(GlobalColor("Calls"));
C29.SetLineWeight(barWeight);

rec c30_D = if IsNaN(close) then c30_D[1] else Ceil((c30_V / OI_max) * barLength);
plot C30 = if c30_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 15 else Double.NaN;
C30.SetDefaultColor(GlobalColor("Calls"));
C30.SetLineWeight(barWeight);

rec c31_D = if IsNaN(close) then c31_D[1] else Ceil((c31_V / OI_max) * barLength);
plot C31 = if c31_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 15 else Double.NaN;
C31.SetDefaultColor(GlobalColor("Calls"));
C31.SetLineWeight(barWeight);

rec c32_D = if IsNaN(close) then c32_D[1] else Ceil((c32_V / OI_max) * barLength);
plot C32 = if c32_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 16 else Double.NaN;
C32.SetDefaultColor(GlobalColor("Calls"));
C32.SetLineWeight(barWeight);

rec c33_D = if IsNaN(close) then c33_D[1] else Ceil((c33_V / OI_max) * barLength);
plot C33 = if c33_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 16 else Double.NaN;
C33.SetDefaultColor(GlobalColor("Calls"));
C33.SetLineWeight(barWeight);

rec c34_D = if IsNaN(close) then c34_D[1] else Ceil((c34_V / OI_max) * barLength);
plot C34 = if c34_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 17 else Double.NaN;
C34.SetDefaultColor(GlobalColor("Calls"));
C34.SetLineWeight(barWeight);

rec c35_D = if IsNaN(close) then c35_D[1] else Ceil((c35_V / OI_max) * barLength);
plot C35 = if c35_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 17 else Double.NaN;
C35.SetDefaultColor(GlobalColor("Calls"));
C35.SetLineWeight(barWeight);

rec c36_D = if IsNaN(close) then c36_D[1] else Ceil((c36_V / OI_max) * barLength);
plot C36 = if c36_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 18 else Double.NaN;
C36.SetDefaultColor(GlobalColor("Calls"));
C36.SetLineWeight(barWeight);

rec c37_D = if IsNaN(close) then c37_D[1] else Ceil((c37_V / OI_max) * barLength);
plot C37 = if c37_D >= extBar and extBar != 0 then centerStrike + barOffset + strikespac * 18 else Double.NaN;
C37.SetDefaultColor(GlobalColor("Calls"));
C37.SetLineWeight(barWeight);

rec c38_D = if IsNaN(close) then c38_D[1] else Ceil((c38_V / OI_max) * barLength);
plot C38 = if c38_D >= extBar and extBar != 0 then centerStrike + barOffset - strikespac * 19 else Double.NaN;
C38.SetDefaultColor(GlobalColor("Calls"));
C38.SetLineWeight(barWeight);


rec p1_D = if IsNaN(close) then p1_D[1] else Ceil((p1_V / OI_max) * barLength);
plot P1 = if p1_D >= extBar and extBar != 0 then centerStrike - barOffset else Double.NaN;
P1.SetDefaultColor(GlobalColor("Puts") );
P1.SetLineWeight(barWeight);

rec p2_D = if IsNaN(close) then p2_D[1] else Ceil((p2_V / OI_max) * barLength);
plot P2 = if p2_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac else Double.NaN;
P2.SetDefaultColor(GlobalColor("Puts"));
P2.SetLineWeight(barWeight);

rec p3_D = if IsNaN(close) then p3_D[1] else Ceil((p3_V / OI_max) * barLength);
plot P3 = if p3_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 2 else Double.NaN;
P3.SetDefaultColor(GlobalColor("Puts"));
P3.SetLineWeight(barWeight);

rec p4_D = if IsNaN(close) then p4_D[1] else Ceil((p4_V / OI_max) * barLength);
plot P4 = if p4_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 3 else Double.NaN;
P4.SetDefaultColor(GlobalColor("Puts"));
P4.SetLineWeight(barWeight);

rec p5_D = if IsNaN(close) then p5_D[1] else Ceil((p5_V / OI_max) * barLength);
plot P5 = if p5_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac else Double.NaN;
P5.SetDefaultColor(GlobalColor("Puts"));
P5.SetLineWeight(barWeight);

rec p6_D = if IsNaN(close) then p6_D[1] else Ceil((p6_V / OI_max) * barLength);
plot P6 = if p6_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 2 else Double.NaN;
P6.SetDefaultColor(GlobalColor("Puts"));
P6.SetLineWeight(barWeight);

rec p7_D = if IsNaN(close) then p7_D[1] else Ceil((p7_V / OI_max) * barLength);
plot P7 = if p7_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 3 else Double.NaN;
P7.SetDefaultColor(GlobalColor("Puts"));
P7.SetLineWeight(barWeight);

rec p8_D = if IsNaN(close) then p8_D[1] else Ceil((p8_V / OI_max) * barLength);
plot P8 = if p8_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 4 else Double.NaN;
P8.SetDefaultColor(GlobalColor("Puts"));
P8.SetLineWeight(barWeight);

rec p9_D = if IsNaN(close) then p9_D[1] else Ceil((p9_V / OI_max) * barLength);
plot P9 = if p9_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 4 else Double.NaN;
P9.SetDefaultColor(GlobalColor("Puts"));
P9.SetLineWeight(barWeight);

rec p10_D = if IsNaN(close) then p10_D[1] else Ceil((p10_V / OI_max) * barLength);
plot P10 = if p10_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 5 else Double.NaN;
P10.SetDefaultColor(GlobalColor("Puts"));
P10.SetLineWeight(barWeight);

rec p11_D = if IsNaN(close) then p11_D[1] else Ceil((p11_V / OI_max) * barLength);
plot P11 = if p11_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 5 else Double.NaN;
P11.SetDefaultColor(GlobalColor("Puts"));
P11.SetLineWeight(barWeight);

rec p12_D = if IsNaN(close) then p12_D[1] else Ceil((p12_V / OI_max) * barLength);
plot P12 = if p12_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 6 else Double.NaN;
P12.SetDefaultColor(GlobalColor("Puts"));
P12.SetLineWeight(barWeight);

rec p13_D = if IsNaN(close) then p13_D[1] else Ceil((p13_V / OI_max) * barLength);
plot P13 = if p13_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 6 else Double.NaN;
P13.SetDefaultColor(GlobalColor("Puts"));
P13.SetLineWeight(barWeight);

rec p14_D = if IsNaN(close) then p14_D[1] else Ceil((p14_V / OI_max) * barLength);
plot P14 = if p14_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 7 else Double.NaN;
P14.SetDefaultColor(GlobalColor("Puts"));
P14.SetLineWeight(barWeight);

rec p15_D = if IsNaN(close) then p15_D[1] else Ceil((p15_V / OI_max) * barLength);
plot P15 = if p15_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 7 else Double.NaN;
P15.SetDefaultColor(GlobalColor("Puts"));
P15.SetLineWeight(barWeight);

rec p16_D = if IsNaN(close) then p16_D[1] else Ceil((p16_V / OI_max) * barLength);
plot P16 = if p16_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 8 else Double.NaN;
P16.SetDefaultColor(GlobalColor("Puts"));
P16.SetLineWeight(barWeight);

rec p17_D = if IsNaN(close) then p17_D[1] else Ceil((p17_V / OI_max) * barLength);
plot P17 = if p17_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 8 else Double.NaN;
P17.SetDefaultColor(GlobalColor("Puts"));
P17.SetLineWeight(barWeight);

rec p18_D = if IsNaN(close) then p18_D[1] else Ceil((p18_V / OI_max) * barLength);
plot P18 = if p18_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 9 else Double.NaN;
P18.SetDefaultColor(GlobalColor("Puts"));
P18.SetLineWeight(barWeight);

rec p19_D = if IsNaN(close) then p19_D[1] else Ceil((p19_V / OI_max) * barLength);
plot P19 = if p19_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 9 else Double.NaN;
P19.SetDefaultColor(GlobalColor("Puts"));
P19.SetLineWeight(barWeight);

rec p20_D = if IsNaN(close) then p20_D[1] else Ceil((p20_V / OI_max) * barLength);
plot p20 = if p20_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 10 else Double.NaN;
P20.SetDefaultColor(GlobalColor("Puts"));
P20.SetLineWeight(barWeight);

rec p21_D = if IsNaN(close) then p21_D[1] else Ceil((P21_V / OI_max) * barLength);
plot P21 = if p21_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 10 else Double.NaN;
P21.SetDefaultColor(GlobalColor("Puts"));
P21.SetLineWeight(barWeight);

rec p22_D = if IsNaN(close) then p22_D[1] else Ceil((p22_V / OI_max) * barLength);
plot P22 = if p22_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 11 else Double.NaN;
P22.SetDefaultColor(GlobalColor("Puts"));
P22.SetLineWeight(barWeight);

rec p23_D = if IsNaN(close) then p23_D[1] else Ceil((p23_V / OI_max) * barLength);
plot P23 = if p23_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 11 else Double.NaN;
P23.SetDefaultColor(GlobalColor("Puts"));
P23.SetLineWeight(barWeight);

rec p24_D = if IsNaN(close) then p24_D[1] else Ceil((p24_V / OI_max) * barLength);
plot P24 = if p24_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 12 else Double.NaN;
P24.SetDefaultColor(GlobalColor("Puts"));
P24.SetLineWeight(barWeight);

rec p25_D = if IsNaN(close) then p25_D[1] else Ceil((p25_V / OI_max) * barLength);
plot P25 = if p25_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 12 else Double.NaN;
P25.SetDefaultColor(GlobalColor("Puts"));
P25.SetLineWeight(barWeight);

rec p26_D = if IsNaN(close) then p26_D[1] else Ceil((p26_V / OI_max) * barLength);
plot P26 = if p26_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 13 else Double.NaN;
P26.SetDefaultColor(GlobalColor("Puts"));
P26.SetLineWeight(barWeight);

rec p27_D = if IsNaN(close) then p27_D[1] else Ceil((p27_V / OI_max) * barLength);
plot P27 = if p27_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 13 else Double.NaN;
P27.SetDefaultColor(GlobalColor("Puts"));
P27.SetLineWeight(barWeight);

rec p28_D = if IsNaN(close) then p28_D[1] else Ceil((p28_V / OI_max) * barLength);
plot P28 = if p28_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 14 else Double.NaN;
P28.SetDefaultColor(GlobalColor("Puts"));
P28.SetLineWeight(barWeight);

rec p29_D = if IsNaN(close) then p29_D[1] else Ceil((p29_V / OI_max) * barLength);
plot P29 = if c29_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 14 else Double.NaN;
P29.SetDefaultColor(GlobalColor("Puts"));
P29.SetLineWeight(barWeight);

rec p30_D = if IsNaN(close) then p30_D[1] else Ceil((p30_V / OI_max) * barLength);
plot P30 = if p30_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 15 else Double.NaN;
P30.SetDefaultColor(GlobalColor("Puts"));
P30.SetLineWeight(barWeight);

rec p31_D = if IsNaN(close) then p31_D[1] else Ceil((p31_V / OI_max) * barLength);
plot P31 = if p31_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 15 else Double.NaN;
P31.SetDefaultColor(GlobalColor("Puts"));
P31.SetLineWeight(barWeight);

rec p32_D = if IsNaN(close) then p32_D[1] else Ceil((p32_V / OI_max) * barLength);
plot P32 = if p32_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 16 else Double.NaN;
P32.SetDefaultColor(GlobalColor("Puts"));
P32.SetLineWeight(barWeight);

rec p33_D = if IsNaN(close) then p33_D[1] else Ceil((p33_V / OI_max) * barLength);
plot P33 = if p33_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 16 else Double.NaN;
P33.SetDefaultColor(GlobalColor("Puts"));
P33.SetLineWeight(barWeight);

rec p34_D = if IsNaN(close) then p34_D[1] else Ceil((p34_V / OI_max) * barLength);
plot P34 = if p34_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 17 else Double.NaN;
P34.SetDefaultColor(GlobalColor("Puts"));
P34.SetLineWeight(barWeight);

rec p35_D = if IsNaN(close) then p35_D[1] else Ceil((p35_V / OI_max) * barLength);
plot P35 = if p35_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 17 else Double.NaN;
P35.SetDefaultColor(GlobalColor("Puts"));
P35.SetLineWeight(barWeight);

rec p36_D = if IsNaN(close) then p36_D[1] else Ceil((p36_V / OI_max) * barLength);
plot P36 = if p36_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 18 else Double.NaN;
P36.SetDefaultColor(GlobalColor("Puts"));
P36.SetLineWeight(barWeight);

rec p37_D = if IsNaN(close) then p37_D[1] else Ceil((p37_V / OI_max) * barLength);
plot P37 = if p37_D >= extBar and extBar != 0 then centerStrike - barOffset + strikespac * 18 else Double.NaN;
P37.SetDefaultColor(GlobalColor("Puts"));
P37.SetLineWeight(barWeight);

rec p38_D = if IsNaN(close) then p38_D[1] else Ceil((p38_V / OI_max) * barLength);
plot P38 = if p38_D >= extBar and extBar != 0 then centerStrike - barOffset - strikespac * 19 else Double.NaN;
P38.SetDefaultColor(GlobalColor("Puts"));
P38.SetLineWeight(barWeight);


C1.SetPaintingStrategy(PaintingStrategy.DASHES);
C2.SetPaintingStrategy(PaintingStrategy.DASHES);
C3.SetPaintingStrategy(PaintingStrategy.DASHES);
C4.SetPaintingStrategy(PaintingStrategy.DASHES);
C5.SetPaintingStrategy(PaintingStrategy.DASHES);
C6.SetPaintingStrategy(PaintingStrategy.DASHES);
C7.SetPaintingStrategy(PaintingStrategy.DASHES);
C8.SetPaintingStrategy(PaintingStrategy.DASHES);
C9.SetPaintingStrategy(PaintingStrategy.DASHES);
C10.SetPaintingStrategy(PaintingStrategy.DASHES);
C11.SetPaintingStrategy(PaintingStrategy.DASHES);

C12.SetPaintingStrategy(PaintingStrategy.DASHES);
C13.SetPaintingStrategy(PaintingStrategy.DASHES);
C14.SetPaintingStrategy(PaintingStrategy.DASHES);
C15.SetPaintingStrategy(PaintingStrategy.DASHES);
C16.SetPaintingStrategy(PaintingStrategy.DASHES);
C17.SetPaintingStrategy(PaintingStrategy.DASHES);
C18.SetPaintingStrategy(PaintingStrategy.DASHES);
C19.SetPaintingStrategy(PaintingStrategy.DASHES);
C20.SetPaintingStrategy(PaintingStrategy.DASHES);
C21.SetPaintingStrategy(PaintingStrategy.DASHES);
C22.SetPaintingStrategy(PaintingStrategy.DASHES);
C23.SetPaintingStrategy(PaintingStrategy.DASHES);
C24.SetPaintingStrategy(PaintingStrategy.DASHES);
C25.SetPaintingStrategy(PaintingStrategy.DASHES);
C26.SetPaintingStrategy(PaintingStrategy.DASHES);
C27.SetPaintingStrategy(PaintingStrategy.DASHES);
C28.SetPaintingStrategy(PaintingStrategy.DASHES);
C29.SetPaintingStrategy(PaintingStrategy.DASHES);
C30.SetPaintingStrategy(PaintingStrategy.DASHES);

C31.SetPaintingStrategy(PaintingStrategy.DASHES);
C32.SetPaintingStrategy(PaintingStrategy.DASHES);
C33.SetPaintingStrategy(PaintingStrategy.DASHES);
C34.SetPaintingStrategy(PaintingStrategy.DASHES);
C35.SetPaintingStrategy(PaintingStrategy.DASHES);
C36.SetPaintingStrategy(PaintingStrategy.DASHES);
C37.SetPaintingStrategy(PaintingStrategy.DASHES);
C38.SetPaintingStrategy(PaintingStrategy.DASHES);


P1.SetPaintingStrategy(PaintingStrategy.DASHES);
P2.SetPaintingStrategy(PaintingStrategy.DASHES);
P3.SetPaintingStrategy(PaintingStrategy.DASHES);
P4.SetPaintingStrategy(PaintingStrategy.DASHES);
P5.SetPaintingStrategy(PaintingStrategy.DASHES);
P6.SetPaintingStrategy(PaintingStrategy.DASHES);
P7.SetPaintingStrategy(PaintingStrategy.DASHES);
P8.SetPaintingStrategy(PaintingStrategy.DASHES);
P9.SetPaintingStrategy(PaintingStrategy.DASHES);
P10.SetPaintingStrategy(PaintingStrategy.DASHES);
P11.SetPaintingStrategy(PaintingStrategy.DASHES);

P12.SetPaintingStrategy(PaintingStrategy.DASHES);
P13.SetPaintingStrategy(PaintingStrategy.DASHES);
P14.SetPaintingStrategy(PaintingStrategy.DASHES);
P15.SetPaintingStrategy(PaintingStrategy.DASHES);
P16.SetPaintingStrategy(PaintingStrategy.DASHES);
P17.SetPaintingStrategy(PaintingStrategy.DASHES);
P18.SetPaintingStrategy(PaintingStrategy.DASHES);
P19.SetPaintingStrategy(PaintingStrategy.DASHES);
P20.SetPaintingStrategy(PaintingStrategy.DASHES);
P21.SetPaintingStrategy(PaintingStrategy.DASHES);
P22.SetPaintingStrategy(PaintingStrategy.DASHES);
P23.SetPaintingStrategy(PaintingStrategy.DASHES);
P24.SetPaintingStrategy(PaintingStrategy.DASHES);
P25.SetPaintingStrategy(PaintingStrategy.DASHES);
P26.SetPaintingStrategy(PaintingStrategy.DASHES);
P27.SetPaintingStrategy(PaintingStrategy.DASHES);
P28.SetPaintingStrategy(PaintingStrategy.DASHES);
P29.SetPaintingStrategy(PaintingStrategy.DASHES);
P30.SetPaintingStrategy(PaintingStrategy.DASHES);

P31.SetPaintingStrategy(PaintingStrategy.DASHES);
P32.SetPaintingStrategy(PaintingStrategy.DASHES);
P33.SetPaintingStrategy(PaintingStrategy.DASHES);
P34.SetPaintingStrategy(PaintingStrategy.DASHES);
P35.SetPaintingStrategy(PaintingStrategy.DASHES);
P36.SetPaintingStrategy(PaintingStrategy.DASHES);
P37.SetPaintingStrategy(PaintingStrategy.DASHES);
P38.SetPaintingStrategy(PaintingStrategy.DASHES);




rec c1_V_e = if IsNaN(close) and !IsNaN(close[1]) then c1_V[1] else c1_V_e[1];
rec c2_V_e = if IsNaN(close) and !IsNaN(close[1]) then c2_V[1] else c2_V_e[1];
rec c3_V_e = if IsNaN(close) and !IsNaN(close[1]) then c3_V[1] else c3_V_e[1];
rec c4_V_e = if IsNaN(close) and !IsNaN(close[1]) then c4_V[1] else c4_V_e[1];
rec c5_V_e = if IsNaN(close) and !IsNaN(close[1]) then c5_V[1] else c5_V_e[1];
rec c6_V_e = if IsNaN(close) and !IsNaN(close[1]) then c6_V[1] else c6_V_e[1];
rec c7_V_e = if IsNaN(close) and !IsNaN(close[1]) then c7_V[1] else c7_V_e[1];
rec c8_V_e = if IsNaN(close) and !IsNaN(close[1]) then c8_V[1] else c8_V_e[1];
rec c9_V_e = if IsNaN(close) and !IsNaN(close[1]) then c9_V[1] else c9_V_e[1];
rec c10_V_e = if IsNaN(close) and !IsNaN(close[1]) then c10_V[1] else c10_V_e[1];
rec c11_V_e = if IsNaN(close) and !IsNaN(close[1]) then c11_V[1] else c11_V_e[1];

rec c12_V_e = if IsNaN(close) and !IsNaN(close[1]) then c12_V[1] else c12_V_e[1];
rec c13_V_e = if IsNaN(close) and !IsNaN(close[1]) then c13_V[1] else c13_V_e[1];
rec c14_V_e = if IsNaN(close) and !IsNaN(close[1]) then c14_V[1] else c14_V_e[1];
rec c15_V_e = if IsNaN(close) and !IsNaN(close[1]) then c15_V[1] else c15_V_e[1];
rec c16_V_e = if IsNaN(close) and !IsNaN(close[1]) then c16_V[1] else c16_V_e[1];
rec c17_V_e = if IsNaN(close) and !IsNaN(close[1]) then c17_V[1] else c17_V_e[1];
rec c18_V_e = if IsNaN(close) and !IsNaN(close[1]) then c18_V[1] else c18_V_e[1];
rec c19_V_e = if IsNaN(close) and !IsNaN(close[1]) then c19_V[1] else c19_V_e[1];
rec c20_V_e = if IsNaN(close) and !IsNaN(close[1]) then c20_V[1] else c20_V_e[1];
rec c21_V_e = if IsNaN(close) and !IsNaN(close[1]) then c21_V[1] else c21_V_e[1];
rec c22_V_e = if IsNaN(close) and !IsNaN(close[1]) then c22_V[1] else c22_V_e[1];
rec c23_V_e = if IsNaN(close) and !IsNaN(close[1]) then c23_V[1] else c23_V_e[1];
rec c24_V_e = if IsNaN(close) and !IsNaN(close[1]) then c24_V[1] else c24_V_e[1];
rec c25_V_e = if IsNaN(close) and !IsNaN(close[1]) then c25_V[1] else c25_V_e[1];
rec c26_V_e = if IsNaN(close) and !IsNaN(close[1]) then c26_V[1] else c26_V_e[1];
rec c27_V_e = if IsNaN(close) and !IsNaN(close[1]) then c27_V[1] else c27_V_e[1];
rec c28_V_e = if IsNaN(close) and !IsNaN(close[1]) then c28_V[1] else c28_V_e[1];
rec c29_V_e = if IsNaN(close) and !IsNaN(close[1]) then c29_V[1] else c29_V_e[1];
rec c30_V_e = if IsNaN(close) and !IsNaN(close[1]) then c30_V[1] else c30_V_e[1];

rec c31_V_e = if IsNaN(close) and !IsNaN(close[1]) then c31_V[1] else c31_V_e[1];
rec c32_V_e = if IsNaN(close) and !IsNaN(close[1]) then c32_V[1] else c32_V_e[1];
rec c33_V_e = if IsNaN(close) and !IsNaN(close[1]) then c33_V[1] else c33_V_e[1];
rec c34_V_e = if IsNaN(close) and !IsNaN(close[1]) then c34_V[1] else c34_V_e[1];
rec c35_V_e = if IsNaN(close) and !IsNaN(close[1]) then c35_V[1] else c35_V_e[1];
rec c36_V_e = if IsNaN(close) and !IsNaN(close[1]) then c36_V[1] else c36_V_e[1];
rec c37_V_e = if IsNaN(close) and !IsNaN(close[1]) then c37_V[1] else c37_V_e[1];
rec c38_V_e = if IsNaN(close) and !IsNaN(close[1]) then c38_V[1] else c38_V_e[1];


rec p1_V_e = if IsNaN(close) and !IsNaN(close[1]) then p1_V[1] else p1_V_e[1];
rec p2_V_e = if IsNaN(close) and !IsNaN(close[1]) then p2_V[1] else p2_V_e[1];
rec p3_V_e = if IsNaN(close) and !IsNaN(close[1]) then p3_V[1] else p3_V_e[1];
rec p4_V_e = if IsNaN(close) and !IsNaN(close[1]) then p4_V[1] else p4_V_e[1];
rec p5_V_e = if IsNaN(close) and !IsNaN(close[1]) then p5_V[1] else p5_V_e[1];
rec p6_V_e = if IsNaN(close) and !IsNaN(close[1]) then p6_V[1] else p6_V_e[1];
rec p7_V_e = if IsNaN(close) and !IsNaN(close[1]) then p7_V[1] else p7_V_e[1];
rec p8_V_e = if IsNaN(close) and !IsNaN(close[1]) then p8_V[1] else p8_V_e[1];
rec p9_V_e = if IsNaN(close) and !IsNaN(close[1]) then p9_V[1] else p9_V_e[1];
rec p10_V_e = if IsNaN(close) and !IsNaN(close[1]) then p10_V[1] else p10_V_e[1];
rec p11_V_e = if IsNaN(close) and !IsNaN(close[1]) then p11_V[1] else p11_V_e[1];

rec p12_V_e = if IsNaN(close) and !IsNaN(close[1]) then p12_V[1] else p12_V_e[1];
rec p13_V_e = if IsNaN(close) and !IsNaN(close[1]) then p13_V[1] else p13_V_e[1];
rec p14_V_e = if IsNaN(close) and !IsNaN(close[1]) then p14_V[1] else p14_V_e[1];
rec p15_V_e = if IsNaN(close) and !IsNaN(close[1]) then p15_V[1] else p15_V_e[1];
rec p16_V_e = if IsNaN(close) and !IsNaN(close[1]) then p16_V[1] else p16_V_e[1];
rec p17_V_e = if IsNaN(close) and !IsNaN(close[1]) then p17_V[1] else p17_V_e[1];
rec p18_V_e = if IsNaN(close) and !IsNaN(close[1]) then p18_V[1] else p18_V_e[1];
rec p19_V_e = if IsNaN(close) and !IsNaN(close[1]) then p19_V[1] else p19_V_e[1];
rec p20_V_e = if IsNaN(close) and !IsNaN(close[1]) then p20_V[1] else p20_V_e[1];
rec p21_V_e = if IsNaN(close) and !IsNaN(close[1]) then p21_V[1] else p21_V_e[1];
rec p22_V_e = if IsNaN(close) and !IsNaN(close[1]) then p22_V[1] else p22_V_e[1];
rec p23_V_e = if IsNaN(close) and !IsNaN(close[1]) then p23_V[1] else p23_V_e[1];
rec p24_V_e = if IsNaN(close) and !IsNaN(close[1]) then p24_V[1] else p24_V_e[1];
rec p25_V_e = if IsNaN(close) and !IsNaN(close[1]) then p25_V[1] else p25_V_e[1];
rec p26_V_e = if IsNaN(close) and !IsNaN(close[1]) then p26_V[1] else p26_V_e[1];
rec p27_V_e = if IsNaN(close) and !IsNaN(close[1]) then p27_V[1] else p27_V_e[1];
rec p28_V_e = if IsNaN(close) and !IsNaN(close[1]) then p28_V[1] else p28_V_e[1];
rec p29_V_e = if IsNaN(close) and !IsNaN(close[1]) then p29_V[1] else p29_V_e[1];
rec p30_V_e = if IsNaN(close) and !IsNaN(close[1]) then p30_V[1] else p30_V_e[1];

rec p31_V_e = if IsNaN(close) and !IsNaN(close[1]) then p31_V[1] else p31_V_e[1];
rec p32_V_e = if IsNaN(close) and !IsNaN(close[1]) then p32_V[1] else p32_V_e[1];
rec p33_V_e = if IsNaN(close) and !IsNaN(close[1]) then p33_V[1] else p33_V_e[1];
rec p34_V_e = if IsNaN(close) and !IsNaN(close[1]) then p34_V[1] else p34_V_e[1];
rec p35_V_e = if IsNaN(close) and !IsNaN(close[1]) then p35_V[1] else p35_V_e[1];
rec p36_V_e = if IsNaN(close) and !IsNaN(close[1]) then p36_V[1] else p36_V_e[1];
rec p37_V_e = if IsNaN(close) and !IsNaN(close[1]) then p37_V[1] else p37_V_e[1];
rec p38_V_e = if IsNaN(close) and !IsNaN(close[1]) then p38_V[1] else p38_V_e[1];

AddChartBubble(c1_D == extBar, C1, concat("", c1_V_e), globalColor("Calls"), yes );

AddChartBubble(c2_D == extBar, C2, concat("", c2_V_e), globalColor("Calls"), yes );

AddChartBubble(c3_D == extBar, C3, concat("", c3_V_e), globalColor("Calls"), yes );

AddChartBubble(c4_D == extBar, C4, concat("", c4_V_e), globalColor("Calls"), yes );

AddChartBubble(c5_D == extBar, C5, concat("", c5_V_e), globalColor("Calls"), yes );

AddChartBubble(c6_D == extBar, C6, concat("", c6_V_e), globalColor("Calls"), yes );

AddChartBubble(c7_D == extBar, C7, concat("", c7_V_e), globalColor("Calls"), yes );

AddChartBubble(c8_D == extBar, C8, concat("", c8_V_e), globalColor("Calls"), yes );

AddChartBubble(c9_D == extBar, C9, concat("", c9_V_e), globalColor("Calls"), yes );

AddChartBubble(c10_D == extBar, C10, concat("", c10_V_e), globalColor("Calls"), yes );

AddChartBubble(c11_D == extBar, C11, concat("", c11_V_e), globalColor("Calls"), yes );



AddChartBubble(c12_D == extBar, C12, concat("", c12_V_e), globalColor("Calls"), yes );

AddChartBubble(c13_D == extBar, C13, concat("", c13_V_e), globalColor("Calls"), yes );

AddChartBubble(c14_D == extBar, C14, concat("", c14_V_e), globalColor("Calls"), yes );

AddChartBubble(c15_D == extBar, C15, concat("", c15_V_e), globalColor("Calls"), yes );

AddChartBubble(c16_D == extBar, C16, concat("", c16_V_e), globalColor("Calls"), yes );

AddChartBubble(c17_D == extBar, C17, concat("", c17_V_e), globalColor("Calls"), yes );

AddChartBubble(c18_D == extBar, C18, concat("", c18_V_e), globalColor("Calls"), yes );

AddChartBubble(c19_D == extBar, C19, concat("", c19_V_e), globalColor("Calls"), yes );

AddChartBubble(c20_D == extBar, C20, concat("", c20_V_e), globalColor("Calls"), yes );

AddChartBubble(c21_D == extBar, C21, concat("", c21_V_e), globalColor("Calls"), yes );

AddChartBubble(c22_D == extBar, C22, concat("", c22_V_e), globalColor("Calls"), yes );

AddChartBubble(c23_D == extBar, C23, concat("", c23_V_e), globalColor("Calls"), yes );

AddChartBubble(c24_D == extBar, C24, concat("", c24_V_e), globalColor("Calls"), yes );

AddChartBubble(c25_D == extBar, C25, concat("", c25_V_e), globalColor("Calls"), yes );

AddChartBubble(c26_D == extBar, C26, concat("", c26_V_e), globalColor("Calls"), yes );

AddChartBubble(c27_D == extBar, C27, concat("", c27_V_e), globalColor("Calls"), yes );

AddChartBubble(c28_D == extBar, C28, concat("", c28_V_e), globalColor("Calls"), yes );

AddChartBubble(c29_D == extBar, C29, concat("", c29_V_e), globalColor("Calls"), yes );

AddChartBubble(c30_D == extBar, C30, concat("", c30_V_e), globalColor("Calls"), yes );



AddChartBubble(c31_D == extBar, C31, concat("", c31_V_e), globalColor("Calls"), yes );

AddChartBubble(c32_D == extBar, C32, concat("", c32_V_e), globalColor("Calls"), yes );

AddChartBubble(c33_D == extBar, C33, concat("", c33_V_e), globalColor("Calls"), yes );

AddChartBubble(c34_D == extBar, C34, concat("", c34_V_e), globalColor("Calls"), yes );

AddChartBubble(c35_D == extBar, C35, concat("", c35_V_e), globalColor("Calls"), yes );

AddChartBubble(c36_D == extBar, C36, concat("", c36_V_e), globalColor("Calls"), yes );

AddChartBubble(c37_D == extBar, C37, concat("", c37_V_e), globalColor("Calls"), yes );

AddChartBubble(c38_D == extBar, C38, concat("", c38_V_e), globalColor("Calls"), yes );





AddChartBubble(p1_D == extBar, P1, concat("", p1_V_e), globalColor("Puts"), no );

AddChartBubble(p2_D == extBar, P2, concat("", p2_V_e), globalColor("Puts"), no );

AddChartBubble(p3_D == extBar, P3, concat("", p3_V_e), globalColor("Puts"), no );

AddChartBubble(p4_D == extBar, P4, concat("", p4_V_e), globalColor("Puts"), no );

AddChartBubble(p5_D == extBar, P5, concat("", p5_V_e), globalColor("Puts"), no );

AddChartBubble(p6_D == extBar, P6, concat("", p6_V_e), globalColor("Puts"), no );

AddChartBubble(p7_D == extBar, P7, concat("", p7_V_e), globalColor("Puts"), no );

AddChartBubble(p8_D == extBar, P8, concat("", p8_V_e), globalColor("Puts"), no );

AddChartBubble(p9_D == extBar, P9, concat("", p9_V_e), globalColor("Puts"), no );

AddChartBubble(p10_D == extBar, P10, concat("", p10_V_e), globalColor("Puts"), no );

AddChartBubble(p11_D == extBar, P11, concat("", p11_V_e), globalColor("Puts"), no );



AddChartBubble(p12_D == extBar, P12, concat("", p12_V_e), globalColor("Puts"), no );

AddChartBubble(p13_D == extBar, P13, concat("", p13_V_e), globalColor("Puts"), no );

AddChartBubble(p14_D == extBar, P14, concat("", p14_V_e), globalColor("Puts"), no );

AddChartBubble(p15_D == extBar, P15, concat("", p15_V_e), globalColor("Puts"), no );

AddChartBubble(p16_D == extBar, P16, concat("", p16_V_e), globalColor("Puts"), no );

AddChartBubble(p17_D == extBar, P17, concat("", p17_V_e), globalColor("Puts"), no );

AddChartBubble(p18_D == extBar, P18, concat("", p18_V_e), globalColor("Puts"), no );

AddChartBubble(p19_D == extBar, P19, concat("", p19_V_e), globalColor("Puts"), no );

AddChartBubble(p20_D == extBar, P20, concat("", P20_V_e), globalColor("Calls"), yes );

AddChartBubble(p21_D == extBar, P21, concat("", p21_V_e), globalColor("Calls"), yes );

AddChartBubble(p22_D == extBar, P22, concat("", p22_V_e), globalColor("Calls"), yes );

AddChartBubble(p23_D == extBar, P23, concat("", p23_V_e), globalColor("Calls"), yes );

AddChartBubble(p24_D == extBar, P24, concat("", p24_V_e), globalColor("Calls"), yes );

AddChartBubble(p25_D == extBar, P25, concat("", p25_V_e), globalColor("Calls"), yes );

AddChartBubble(p26_D == extBar, P26, concat("", p26_V_e), globalColor("Calls"), yes );

AddChartBubble(p27_D == extBar, P27, concat("", p27_V_e), globalColor("Calls"), yes );

AddChartBubble(p28_D == extBar, P28, concat("", p28_V_e), globalColor("Calls"), yes );

AddChartBubble(p29_D == extBar, P29, concat("", p29_V_e), globalColor("Calls"), yes );

AddChartBubble(p30_D == extBar, P30, concat("", p30_V_e), globalColor("Calls"), yes );



AddChartBubble(p31_D == extBar, P31, concat("", p31_V_e), globalColor("Calls"), yes );

AddChartBubble(p32_D == extBar, P32, concat("", p32_V_e), globalColor("Calls"), yes );

AddChartBubble(p33_D == extBar, P33, concat("", p33_V_e), globalColor("Calls"), yes );

AddChartBubble(p34_D == extBar, P34, concat("", p34_V_e), globalColor("Calls"), yes );

AddChartBubble(p35_D == extBar, P35, concat("", p35_V_e), globalColor("Calls"), yes );

AddChartBubble(p36_D == extBar, P36, concat("", p36_V_e), globalColor("Calls"), yes );

AddChartBubble(p37_D == extBar, P37, concat("", p37_V_e), globalColor("Calls"), yes );

AddChartBubble(p38_D == extBar, P38, concat("", p38_V_e), globalColor("Calls"), yes );




C1.HideBubble();
C2.HideBubble();
C3.HideBubble();
C4.HideBubble();
C5.HideBubble();
C6.HideBubble();
C7.HideBubble();
C8.HideBubble();
C9.HideBubble();
C10.HideBubble();
C11.HideBubble();

C12.HideBubble();
C13.HideBubble();
C14.HideBubble();
C15.HideBubble();
C16.HideBubble();
C17.HideBubble();
C18.HideBubble();
C19.HideBubble();
C20.HideBubble();
C21.HideBubble();
C22.HideBubble();
C23.HideBubble();
C24.HideBubble();
C25.HideBubble();
C26.HideBubble();
C27.HideBubble();
C28.HideBubble();
C29.HideBubble();
C30.HideBubble();

C31.HideBubble();
C32.HideBubble();
C33.HideBubble();
C34.HideBubble();
C35.HideBubble();
C36.HideBubble();
C37.HideBubble();
C38.HideBubble();

P1.HideBubble();
P2.HideBubble();
P3.HideBubble();
P4.HideBubble();
P5.HideBubble();
P6.HideBubble();
P7.HideBubble();
P8.HideBubble();
P9.HideBubble();
P10.HideBubble();
P11.HideBubble();

P12.HideBubble();
P13.HideBubble();
P14.HideBubble();
P15.HideBubble();
P16.HideBubble();
P17.HideBubble();
P18.HideBubble();
P19.HideBubble();
P20.HideBubble();
P21.HideBubble();
P22.HideBubble();
P23.HideBubble();
P24.HideBubble();
P25.HideBubble();
P26.HideBubble();
P27.HideBubble();
P28.HideBubble();
P29.HideBubble();
P30.HideBubble();

P31.HideBubble();
P32.HideBubble();
P33.HideBubble();
P34.HideBubble();
P35.HideBubble();
P36.HideBubble();
P37.HideBubble();
P38.HideBubble();

C1.HideTitle();
C2.HideTitle();
C3.HideTitle();
C4.HideTitle();
C5.HideTitle();
C6.HideTitle();
C7.HideTitle();
C8.HideTitle();
C9.HideTitle();
C10.HideTitle();
C11.HideTitle();

C12.HideTitle();
C13.HideTitle();
C14.HideTitle();
C15.HideTitle();
C16.HideTitle();
C17.HideTitle();
C18.HideTitle();
C19.HideTitle();
C20.HideTitle();
C21.HideTitle();
C22.HideTitle();
C23.HideTitle();
C24.HideTitle();
C25.HideTitle();
C26.HideTitle();
C27.HideTitle();
C28.HideTitle();
C29.HideTitle();
C30.HideTitle();

C31.HideTitle();
C32.HideTitle();
C33.HideTitle();
C34.HideTitle();
C35.HideTitle();
C36.HideTitle();
C37.HideTitle();
C38.HideTitle();

P1.HideTitle();
P2.HideTitle();
P3.HideTitle();
P4.HideTitle();
P5.HideTitle();
P6.HideTitle();
P7.HideTitle();
P8.HideTitle();
P9.HideTitle();
P10.HideTitle();
P11.HideTitle();

P12.HideTitle();
P13.HideTitle();
P14.HideTitle();
P15.HideTitle();
P16.HideTitle();
P17.HideTitle();
P18.HideTitle();
P19.HideTitle();
P20.HideTitle();
P21.HideTitle();
P22.HideTitle();
P23.HideTitle();
P24.HideTitle();
P25.HideTitle();
P26.HideTitle();
P27.HideTitle();
P28.HideTitle();
P29.HideTitle();
P30.HideTitle();

P31.HideTitle();
P32.HideTitle();
P33.HideTitle();
P34.HideTitle();
P35.HideTitle();
P36.HideTitle();
P37.HideTitle();
P38.HideTitle();
This is a great script. I used it to identify levels on possible support and resistance in confluence with my other indicators. Thank you. In addition, I'm making a puts only grid and a calls only grid.

As I was breaking apart the script, I noticed the "plot P29 = if c29_D" and I was wondering if that was a mistake?

 
Also I found that this script for labeling open interest which is given free every day by https://www.quanttradingapp.com/discord_pub/thinkscript_open_interest. Don't know if this helps


Code:
#
# Plot Hightest OI Levels on Chart
# Only Valid For: Friday, April 08, 2022
#
# Script Generated: 2022-04-08 08:00:12 AM
# Free Tickers Included: AAPL,AMZN,DIA,DIS,FB,GLD,GOOGL,IWM,NFLX,QQQ,SPY,TSLA,NVDA,AMD
# Total Tickers: 14
#
# Credit: Quant Trading App (c) 2021-2022
# Discord: https://quanttradingdiscord.com
#

def aggregationPeriod = AggregationPeriod.DAY;def LastPrice = close(priceType = PriceType.LAST);def total_call_premium;def total_put_premium;
plot oi_call_1;plot oi_call_2;plot oi_call_3;plot oi_call_4;plot oi_call_5;plot oi_put_1;plot oi_put_2;plot oi_put_3;plot oi_put_4;plot oi_put_5;
if (GetSymbol() == "AAPL") {total_call_premium = 382730.57;total_put_premium = 237766.65;oi_call_1 = 180;oi_call_2 = 175;oi_call_3 = 170;oi_call_4 = 177.5;oi_call_5 = 185;oi_put_1 = 170;oi_put_2 = 160;oi_put_3 = 175;oi_put_4 = 167.5;oi_put_5 = 165;}else if (GetSymbol() == "AMZN") {total_call_premium = 829120.56;total_put_premium = 3294755.32;oi_call_1 = 3300;oi_call_2 = 3400;oi_call_3 = 3500;oi_call_4 = 3200;oi_call_5 = 3600;oi_put_1 = 3000;oi_put_2 = 3100;oi_put_3 = 3015;oi_put_4 = 2950;oi_put_5 = 3490;}else if (GetSymbol() == "DIA") {total_call_premium = 38061.73;total_put_premium = 23450.76;oi_call_1 = 344;oi_call_2 = 354;oi_call_3 = 356;oi_call_4 = 349;oi_call_5 = 348;oi_put_1 = 329;oi_put_2 = 348;oi_put_3 = 315;oi_put_4 = 341;oi_put_5 = 342;}else if (GetSymbol() == "DIS") {total_call_premium = 4571.37;total_put_premium = 46655.94;oi_call_1 = 145;oi_call_2 = 144;oi_call_3 = 140;oi_call_4 = 133;oi_call_5 = 142;oi_put_1 = 128;oi_put_2 = 130;oi_put_3 = 134;oi_put_4 = 127;oi_put_5 = 129;}else if (GetSymbol() == "FB") {total_call_premium = 692845.36;total_put_premium = 102656.41;oi_call_1 = 200;oi_call_2 = 240;oi_call_3 = 250;oi_call_4 = 222.5;oi_call_5 = 230;oi_put_1 = 200;oi_put_2 = 190;oi_put_3 = 215;oi_put_4 = 220;oi_put_5 = 225;}else if (GetSymbol() == "GLD") {total_call_premium = 28848.77;total_put_premium = 24817.19;oi_call_1 = 198;oi_call_2 = 181;oi_call_3 = 185;oi_call_4 = 190;oi_call_5 = 180;oi_put_1 = 176;oi_put_2 = 179;oi_put_3 = 177;oi_put_4 = 180;oi_put_5 = 175;}else if (GetSymbol() == "GOOGL") {total_call_premium = 146315.7;total_put_premium = 310393.9;oi_call_1 = 2800;oi_call_2 = 2900;oi_call_3 = 3000;oi_call_4 = 2850;oi_call_5 = 2930;oi_put_1 = 2700;oi_put_2 = 2600;oi_put_3 = 2750;oi_put_4 = 2650;oi_put_5 = 2800;}else if (GetSymbol() == "IWM") {total_call_premium = 41415.24;total_put_premium = 293727.4;oi_call_1 = 211;oi_call_2 = 210;oi_call_3 = 201;oi_call_4 = 204;oi_call_5 = 207;oi_put_1 = 190;oi_put_2 = 204;oi_put_3 = 195;oi_put_4 = 194;oi_put_5 = 198;}else if (GetSymbol() == "NFLX") {total_call_premium = 55214.35;total_put_premium = 107048.6;oi_call_1 = 390;oi_call_2 = 425;oi_call_3 = 400;oi_call_4 = 410;oi_call_5 = 420;oi_put_1 = 360;oi_put_2 = 355;oi_put_3 = 350;oi_put_4 = 340;oi_put_5 = 365;}else if (GetSymbol() == "QQQ") {total_call_premium = 397452.26;total_put_premium = 1020109.49;oi_call_1 = 358;oi_call_2 = 355;oi_call_3 = 375;oi_call_4 = 370;oi_call_5 = 365;oi_put_1 = 350;oi_put_2 = 355;oi_put_3 = 345;oi_put_4 = 360;oi_put_5 = 340;}else if (GetSymbol() == "SPY") {total_call_premium = 935513.52;total_put_premium = 640624.12;oi_call_1 = 460;oi_call_2 = 450;oi_call_3 = 455;oi_call_4 = 465;oi_call_5 = 457;oi_put_1 = 440;oi_put_2 = 445;oi_put_3 = 425;oi_put_4 = 442;oi_put_5 = 435;}else if (GetSymbol() == "TSLA") {total_call_premium = 4085952.2;total_put_premium = 2404942.68;oi_call_1 = 1200;oi_call_2 = 1150;oi_call_3 = 1100;oi_call_4 = 1250;oi_call_5 = 1300;oi_put_1 = 1000;oi_put_2 = 950;oi_put_3 = 900;oi_put_4 = 1100;oi_put_5 = 1020;}else if (GetSymbol() == "NVDA") {total_call_premium = 156427.48;total_put_premium = 947041.4;oi_call_1 = 300;oi_call_2 = 240;oi_call_3 = 250;oi_call_4 = 275;oi_call_5 = 260;oi_put_1 = 240;oi_put_2 = 230;oi_put_3 = 250;oi_put_4 = 260;oi_put_5 = 255;}else if (GetSymbol() == "AMD") {total_call_premium = 44227.37;total_put_premium = 348995.29;oi_call_1 = 110;oi_call_2 = 115;oi_call_3 = 120;oi_call_4 = 125;oi_call_5 = 112;oi_put_1 = 110;oi_put_2 = 100;oi_put_3 = 85;oi_put_4 = 95;oi_put_5 = 90;}else {oi_call_1 = Double.NaN;oi_call_2 = Double.NaN;oi_call_3 = Double.NaN;oi_call_4 = Double.NaN;oi_call_5 = Double.NaN;oi_put_1 = Double.NaN;oi_put_2 = Double.NaN;oi_put_3 = Double.NaN;oi_put_4 = Double.NaN;oi_put_5 = Double.NaN;total_call_premium = 0;total_put_premium = 0;};oi_call_1.SetDefaultColor(CreateColor(0,236,59));oi_call_2.SetDefaultColor(CreateColor(0,197,49));oi_call_3.SetDefaultColor(CreateColor(0,158,39));oi_call_4.SetDefaultColor(CreateColor(0,119,29));oi_call_5.SetDefaultColor(CreateColor(0,79,20));oi_call_1.SetLineWeight(5);oi_call_2.SetLineWeight(4);oi_call_3.SetLineWeight(3);oi_call_4.SetLineWeight(2);oi_call_5.SetLineWeight(1);oi_put_1.SetDefaultColor(CreateColor(255,17,17));oi_put_2.SetDefaultColor(CreateColor(255,56,56));oi_put_3.SetDefaultColor(CreateColor(213,0,0));oi_put_4.SetDefaultColor(CreateColor(173,0,0));oi_put_5.SetDefaultColor(CreateColor(134,0,0));oi_put_1.SetLineWeight(5);oi_put_2.SetLineWeight(4);oi_put_3.SetLineWeight(3);oi_put_4.SetLineWeight(2);oi_put_5.SetLineWeight(1);addLabel (total_call_premium, "Calls: $"+ total_call_premium +" | Puts: $"+ total_put_premium, color.LIGHT_GRAY);

qta_tos_oi.jpg
Can this be do automatically with the data that is already in TOS , in this study you have to upload the code with new data every day
 
Thanks everyone, this thing is pretty much 80% done.

Finalizing things
1. Need to expand the range of strikes from 19 to 60 for open interest profile.
2. Need an auto plot function for current price for heatmap as a line
3. Need manual mode for heatmap for weekly exp.
4. Need to fetch historical data for heatmap.

Original from @melarue on twitter (Claimed that he programmed himself, I highly doubt it, went private on twitter as soon as I asked him)

New (old code from thinkscripter and modified by friends here)

http://tos.mx/8XZQOG3 (Open Interest Profile)
http://tos.mx/BpXAtTN (Heatmap)

sMWWAA4.png
fantastic, well done and thank you for sharing. Is there any way to remove bubbles (they take up lots of space on the monitor)?
 
fantastic, well done and thank you for sharing. Is there any way to remove bubbles (they take up lots of space on the monitor)?
To remove bubbles, put a # pound sign in front of any statement that starts with AddChartBubble.
This will comment out that line of script.
 
a week here and you made this? you are talented.
thank you for posting the code in #106

---------------------------------------

i would like to offer some feedback, that may make things a little simpler.
you don't have to use concat(). you can wrap each section in parenthesis and join them with a +.

i modified the strike spacing code, by removing the word concat and replacing the commas with a +.
then went through and removed some extra parenthesis.


Code:
# Strike Spacing
def StrikeSpacingC =
    fold i = 1 to MaxStrikeSpacing
    with spacing = 0
    do if DataType == DataType.OPEN_INTEREST and !IsNaN(
      open_interest(
        ("." + GetSymbolPart()) +
        (ExpYear - 2000) +
        # need the "" +   to convert number to text. can't have 2 different data types as T/F values for if-then
        (if ExpMonth2 <= 9 then ("0" + ExpMonth2) else ("" + ExpMonth2) )  +
        (if ExpDOM <= 9 then ("0" + ExpDOM) else ("" + ExpDOM) )  +
        ("C" + AsPrice(CenterStrike + (MaxStrikeSpacing - i)) )
        )
    ) then MaxStrikeSpacing - i
      else spacing;


Code:
# original code

#        open_interest(
#            Concat(
#                Concat(".",
#                    Concat(GetSymbolPart(),
#                        Concat(
#                            Concat(ExpYear - 2000,
#                                if ExpMonth2 <= 9 then Concat("0", ExpMonth2)
#                                else Concat("", ExpMonth2)
#                            ),
#                            if ExpDOM <= 9 then Concat("0", ExpDOM)
#                            else Concat("", ExpDOM)
#                        )
#                    )
#                ),
#                Concat("C", AsPrice(CenterStrike + (MaxStrikeSpacing - i)))
#            )
#        )
#    )
#    then MaxStrikeSpacing - i
#    else spacing


something else that may help. sometimes i add bubbles to display variables, to verify the data in my formulas.
the \n forces a new line
i tend to use a multiplier like this, low*0.994, to move objects (bubbles, arrows,..) away from the candles, to make it easier to see the candles.

input test1 = yes;
addchartbubble(test1, low*0.994,
bn + "\n" +
upbar3line + "\n" +
upsell + "\n" +
up3lineb + "\n" +
up3line + "\n"
,color.cyan, no);

I've been trying to figure out how to move Boolean arrows slightly further away from my candles. Would the example you gave next to the "addchartbubble" work for the arrows, and if so, where would I put that multiplier in the code. Example of the portion of code below...

Code:
plot buySignal = squeezeFinalSignal and SqueezehistogramUp and bullishMACD and bullishstacked;
plot sellSignal = squeezeFinalSignal and SqueezehistogramDown and bearishMACD and bearishstacked;

plot aggrobuySignal = squeezeaggroSignal and SqueezehistogramUp and bullishMACD and bullishStacked;
plot aggrosellSignal = squeezeaggroSignal and SqueezehistogramDown and bearishMACD and bearishStacked;

BuySignal.setPaintingStrategy(PaintingStrategy.Boolean_Arrow_Up);
SellSignal.setPaintingStrategy(PaintingStrategy.Boolean_Arrow_Down);
aggrobuySignal.setPaintingStrategy(PaintingStrategy.Boolean_Arrow_Up);
aggrosellSignal.setPaintingStrategy(PaintingStrategy.Boolean_Arrow_Down);

BuySignal.setLineWeight(2);
SellSignal.SetLineWeight(2);
aggroBuySignal.setLineWeight(2);
aggroSellSignal.SetLineWeight(2);

BuySignal.setDefaultColor(color.MAGENTA);
SellSignal.SetDefaultColor(color.MAGENTA);
aggroBuySignal.setDefaultColor(color.plum);
aggroSellSignal.SetDefaultColor(color.plum);
 
Last edited:
Thanks everyone, this thing is pretty much 80% done.

Finalizing things
1. Need to expand the range of strikes from 19 to 60 for open interest profile.
2. Need an auto plot function for current price for heatmap as a line
3. Need manual mode for heatmap for weekly exp.
4. Need to fetch historical data for heatmap.

Original from @melarue on twitter (Claimed that he programmed himself, I highly doubt it, went private on twitter as soon as I asked him)

New (old code from thinkscripter and modified by friends here)

http://tos.mx/8XZQOG3 (Open Interest Profile)
http://tos.mx/BpXAtTN (Heatmap)

View attachment 17756
Hello, I'm having issues with the upper chart showing at all. Any suggestions? Also, do you happen to have this indicator with 0dte?

Thanks in advance!
 

Join useThinkScript to post your question to a community of 21,000+ developers and traders.

Similar threads

Not the exact question you're looking for?

Start a new thread and receive assistance from our community.

87k+ Posts
346 Online
Create Post

Similar threads

Similar threads

The Market Trading Game Changer

Join 2,500+ subscribers inside the useThinkScript VIP Membership Club
  • Exclusive indicators
  • Proven strategies & setups
  • Private Discord community
  • ‘Buy The Dip’ signal alerts
  • Exclusive members-only content
  • Add-ons and resources
  • 1 full year of unlimited support

Frequently Asked Questions

What is useThinkScript?

useThinkScript is the #1 community of stock market investors using indicators and other tools to power their trading strategies. Traders of all skill levels use our forums to learn about scripting and indicators, help each other, and discover new ways to gain an edge in the markets.

How do I get started?

We get it. Our forum can be intimidating, if not overwhelming. With thousands of topics, tens of thousands of posts, our community has created an incredibly deep knowledge base for stock traders. No one can ever exhaust every resource provided on our site.

If you are new, or just looking for guidance, here are some helpful links to get you started.

What are the benefits of VIP Membership?
VIP members get exclusive access to these proven and tested premium indicators: Buy the Dip, Advanced Market Moves 2.0, Take Profit, and Volatility Trading Range. In addition, VIP members get access to over 50 VIP-only custom indicators, add-ons, and strategies, private VIP-only forums, private Discord channel to discuss trades and strategies in real-time, customer support, trade alerts, and much more. Learn all about VIP membership here.
How can I access the premium indicators?
To access the premium indicators, which are plug and play ready, sign up for VIP membership here.
Back
Top