#orb_colors
#https://usethinkscript.com/threads/shaded-opening-range-no-breakout.17922/
#Shaded Opening Range (No Breakout)
# 2020-01
# halcyonguy
def na = Double.NaN;
input timeframe = { t1min , t2min , t3min , t5min , t10min , default t15min , t30min };
input show_ORB_label = yes;
input show_range_lines = no;
def srl = show_range_lines;
input orb_range_lines_pricepercent = 16;
def olpp = orb_range_lines_pricepercent;
input show_arrows = yes;
# open/close times (ET)
input start = 0930;
input end = 1600;
def daytime = if secondsfromTime(start) >= 0 and secondstillTime(end) > 0 then 1 else 0;
def agg;
def per;
switch (timeframe) {
case t1min:
agg = AggregationPeriod.MIN;
per = 1;
case t2min:
agg = AggregationPeriod.two_MIN;
per = 2;
case t3min:
agg = AggregationPeriod.three_MIN;
per = 3;
case t5min:
agg = AggregationPeriod.fIVE_MIN;
per = 5;
case t10min:
agg = AggregationPeriod.Ten_MIN;
per = 10;
case t15min:
agg = AggregationPeriod.FIFTEEN_MIN;
per = 15;
case t30min:
agg = AggregationPeriod.THIRTY_MIN;
per = 30;
}
addlabel(show_ORB_label, per + "ORB" , color.cyan);
# get candle width , seconds , timeframe
#def getaggmin = round(getaggregationPeriod()/60,0);
def getgg = getaggregationPeriod();
def getaggmin = round(getgg/60,0);
addlabel(yes,getaggmin);
# test if agg time is > than chart time
def aggok = if (getaggmin*60) <= agg then 1 else 0;
#addlabel(!aggok, "chart time too long" );
# doesn't display this if chart time longer. shows err sym top left
def durationsec = per * 60;
def secondspassed = secondsfromTime(start);
# simulated firstbar , based on orb time
def firstbar = if secondspassed >= 0 and secondspassed < durationsec then 1 else 0;
#addchartbubble(yes,low,per + "__" + firstbar + "__" + agg);
def afterfirst = if ( daytime and !firstbar ) then 1 else 0;
# is this the first bar after open ?
def openbar = if secondspassed >= 0 and secondspassed <= getgg then 1 else 0;
def ehi = high(period = agg);
def elo = low(period = agg);
# looks at firstbar , which is orbtime , NOT bar[1]
def perhigh = if !daytime then na else if firstbar then ehi else perhigh[1];
# use openbar - is it the first bar ? from getgg
#def perhigh = if !daytime then na else if openbar then ehi else perhigh[1];
def perlow = if !daytime then na else if firstbar then elo else perlow[1];
# .....................................................
# calc % tolerance levels within orb lines
# def olpp = orblines_pricepercent;
def linediff = perhigh - perlow;
def orbperamt = linediff * (olpp/100);
def orbupperper = perhigh - orbperamt;
def orblowerper = perlow + orbperamt;
def upperrng = if ( close < perhigh and close > orbupperper) then 1 else 0;
def lowerrng = if ( close > perlow and close < orblowerper) then 1 else 0;
addlabel(upperrng,"upper range", color.green);
addlabel(lowerrng,"lower range", color.red);
# chg these to background colors for watch column
# def srl = show_range_lines;
# draw lines at x% within orb lines
# plot dots for first bar timeframe
plot hiperdots = if (srl and daytime) then orbupperper else na;
plot loperdots = if (srl and daytime) then orblowerper else na;
hiperdots.setpaintingStrategy(paintingStrategy.points);
loperdots.setpaintingStrategy(paintingStrategy.pointS);
hiperdots.setDefaultColor(color.violet);
loperdots.setDefaultColor(color.violet);
hiperdots.hidebubble();
loperdots.hidebubble();
# .....................................................
# add label if beyond orb range
addlabel((close > perhigh),"above upper line", color.green);
addlabel((close < perlow),"below lower line", color.red);
# .....................................................
# test data
# show vars
#input vfac2 = 1;
#addchartBubble(yes, (high * vfac2), ehi + ".." + elo, color.cyan, yes);
# plot dots for first bar timeframe
plot hidots = if firstbar then perhigh else na;
plot lodots = if firstbar then perlow else na;
hidots.setpaintingStrategy(paintingStrategy.points);
lodots.setpaintingStrategy(paintingStrategy.pointS);
hidots.setDefaultColor(color.yellow);
lodots.setDefaultColor(color.yellow);
# plot line after first bar
plot hiline = if !firstbar then perhigh else na;
plot loline = if !firstbar then perlow else na;
hiline.setpaintingStrategy(paintingStrategy.line);
loline.setpaintingStrategy(paintingStrategy.line);
hiline.setDefaultColor(color.yellow);
loline.setDefaultColor(color.yellow);
DefineGlobalColor("orb",color.red);
DefineGlobalColor("orb_after",color.green);
input show_orb_cloud = yes;
def dottop = if show_orb_cloud then hidots else na;
def linetop = if show_orb_cloud then hiline else na;
addcloud(dottop, lodots, GlobalColor("orb"));
addcloud(linetop, loline, GlobalColor("orb_after"));
# input show_arrows = yes;
def afterabove = if (show_arrows and (close crosses above hiline)) then 1 else 0;
def afterbelow = if (show_arrows and (close crosses below loline)) then 1 else 0;
# plot arrows on crossover points
def vfac5 = .0014;
plot upline = if afterabove then (hiline * (1 - vfac5)) else na;
plot dwnline = if afterbelow then (loline * (1 + vfac5)) else na;
upline.setPaintingStrategy(paintingStrategy.ARROW_UP);
dwnline.setPaintingStrategy(paintingStrategy.ARROW_down);
upline.setDefaultColor(color.cyan);
dwnline.setDefaultColor(color.cyan);
upline.setlineWeight(4);
dwnline.setlineWeight(4);
upline.hideBubble();
dwnline.hideBubble();
#