#Weekly_breakout_Fib_ext
#https://usethinkscript.com/threads/weekly-break-out-fib-extension-script.20507/
#Weekly break out Fib extension script
def na = double.nan;
def bn = barnumber();
input agg = aggregationperiod.week;
def hi = high(period=agg);
def lo = low(period=agg);
input week_rng_factor = 1.0;
def rng = (hi[1]-lo[1]);
def midpr = rng/2 + lo[1];
def rngf = rng * week_rng_factor;
def hif = midpr + (rngf/2);
def lof = midpr - (rngf/2);
#def isprevweek = (!isnan(close(period=agg)[-1]) and isnan(close(period=agg)[-2]));
# only true on 1st bar??
#def islastweek = getweek() == getlastweek();
# this weeks
def iscurrentweek = (!isnan(close(period=agg)[0]) and isnan(close(period=agg)[-1]));
# plot lines on 2nd last week
#plot zhi = if iscurrentweek then hi[1] else na;
#plot zlo = if iscurrentweek then lo[1] else na;
plot zhi = if iscurrentweek then hif else na;
plot zlo = if iscurrentweek then lof else na;
#zhi.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
#zlo.SetPaintingStrategy(PaintingStrategy.HORIZONTAL);
zhi.SetDefaultColor(Color.light_gray);
zhi.SetStyle(Curve.MEDIUM_DASH);
zhi.setlineweight(2);
#zhi.hidebubble();
zlo.SetDefaultColor(Color.light_gray);
zlo.SetStyle(Curve.MEDIUM_DASH);
zlo.setlineweight(2);
#zlo.hidebubble();
# calc 100% based on range of prev week x factor
# 0.618, 1.27, 2.00, 2.617 , fib ext.
def f1 = 0.618;
def f2 = 1.27;
def f3 = 2.0;
def f4 = 2.617;
plot h1 = zlo + (f1*rngf);
plot h2 = zlo + (f2*rngf);
plot h3 = zlo + (f3*rngf);
plot h4 = zlo + (f4*rngf);
plot l1 = zhi - (f1*rngf);
plot l2 = zhi - (f2*rngf);
plot l3 = zhi - (f3*rngf);
plot l4 = zhi - (f4*rngf);
h1.SetDefaultColor(Color.magenta);
h2.SetDefaultColor(Color.green);
h3.SetDefaultColor(Color.blue);
h4.SetDefaultColor(Color.orange);
l1.SetDefaultColor(Color.magenta);
l2.SetDefaultColor(Color.green);
l3.SetDefaultColor(Color.blue);
l4.SetDefaultColor(Color.orange);
def xup = close crosses zhi
or close crosses h1
or close crosses h2
or close crosses h3
or close crosses h4;
def xdwn = close crosses zlo
or close crosses l1
or close crosses l2
or close crosses l3
or close crosses l4;
alert(xup, "crossed upper line" ,alert.BAR, sound.DING);
alert(xdwn, "crossed lower line" ,alert.BAR, sound.bell);
#