# Sector_rot_dot_lines_01a
#https://usethinkscript.com/threads/sector-rotation-indicator-for-thinkorswim.845/
#Indicators
#Sector Rotation Indicator for ThinkorSwim
#markos Oct 11, 2019 #1
#@diazlaz See if this concept is workable. Idealy, to me, SPY should be at ==0 with the others rotating around it. Thoughts?
#@BenTen Please copy this to its own thread...
# beta_rotation_v2
#ETF_Rotate_Lower_ED_nn 4-2019
# from 4/4/2019 chat room:
# 06:37 Mobius: johnny - To find rotation quickly - Use primary ETF's in a watchlist with 2 columns first column is Correlation to SPX second is a stochastic of Beta, if Beta is 1 or close to 1 that ETF is moving at the fastest momentum in that range and if correlation is with SPX .85 or better it's moving with SPX cor# daily start with 13,34 as starting point
#markos #took out out Beta 1 & 2 4-19-19 # Put Back in 6-23-19
declare lower;
input BetaLength = 21;
input StochLength =34;
input showBeta = No;
input showOverlay = Yes;
input Cyclicals = "XLY";
input Technology = "XLK";
input Industrials = "XLI";
input Materials = "XLB";
input Energy = "XLE";
input Staples = "XLP";
input HealthCare = "XLV";
input Utilities = "XLU";
input Financials = "XLF";
#------------------------------
#----purple colors
defineglobalColor(“PlumMedium“, createColor(221, 160, 221));
defineglobalColor(“Orchid“, createColor(218, 130, 214));
defineglobalColor(“MediumOrchid“, createColor(186, 85, 211));
defineglobalColor(“MediumPurple“, createColor(147, 112, 219));
defineglobalColor(“DarkOrchid“, createColor(153, 50, 204));
plot Scriptlabel = Double.NaN;
Scriptlabel.SetDefaultColor(CreateColor (0, 0, 0));
def Agg = GetAggregationPeriod();
#--------------------date start
addLabel(1, getMonth() + "/" +
getDayOfMonth(getYyyyMmDd()) + "/" +
AsPrice(getYear()), GlobalColor("PlumMedium"));
#--------------------date end
#addLabel(1, " Ticker: '" + GetSymbol() + "' ", GlobalColor("Orchid"));
addLabel(1, "Agg: " +
( if Agg == 60000 then "1 Min"
else if Agg == 120000 then "2 Min"
else if Agg == 180000 then "3 Min"
else if Agg == 240000 then "4 Min"
else if Agg == 300000 then "5 Min"
else if Agg == 600000 then "10 Min"
else if Agg == 900000 then "15 Min"
else if Agg == 1800000 then "30 Min"
else if Agg == 3600000 then "1 Hour"
else if Agg == 7200000 then "2 Hour"
else if Agg == 14400000 then "4 Hours"
else if Agg == 86400000 then "1 Day"
else if Agg == 604800000 then "1 Week"
else if Agg == 2592000000 then "1 Month"
else (Agg / 1000 / 60) + "Minutes") +
" (" + (if Agg<=23400000
then 23400000/Agg
else 86400000/Agg)+ ")"
, GlobalColor("MediumPurple"));
#addLabel(1, BarNumber() + " Bars", GlobalColor("DarkOrchid"));
#-----------------------------
#-----------------------------
addLabel(1,"Rotation Beta/Stochastic (" + betaLength + "," +stochLength + ") ", color.Light_Gray);
script calcBeta {
input secondSymbol = "XLF";
input refSymbol = "SPX";
input betaLength = 21;
input returnLength = 1;
def refPrice = close(refSymbol);
def primary = if refPrice[returnLength] == 0
then 0
else (refPrice - refPrice[returnLength]) /
refPrice[returnLength] * 100;
def secondPrice = close(secondSymbol);
def secondary = if secondPrice[returnLength] == 0
then 0
else (secondPrice - secondPrice[returnLength]) /
secondPrice[returnLength] * 100;
plot Beta = covariance(secondary, primary, betaLength) /
Sqr(stdev(primary, betaLength));
}
script EhlersESSfilter {
input price = close;
input length = 8;
def ESS_coeff_0 = Exp(-Double.Pi * Sqrt(2) / length);
def ESS_coeff_2 = 2 * ESS_coeff_0 * Cos(Sqrt(2) * Double.Pi / length);
def ESS_coeff_3 = - Sqr(ESS_coeff_0);
def ESS_coeff_1 = 1 - ESS_coeff_2 - ESS_coeff_3;
def ESS_filter = if IsNaN(price + price[1]) then
ESS_filter[1]
else ESS_coeff_1 * (price + price[1]) / 2 +
ESS_coeff_2 * ESS_filter[1] +
ESS_coeff_3 * ESS_filter[2];
plot Smooth_Filter =
if barnumber() < length then
price
else if !IsNaN(price) then
ESS_filter
else Double.NaN;
}
script calcStoch {
input data = close;
input StochLength = 21;
def stochasticValue = ((data - lowest(data, StochLength)) /
(highest(data, StochLength) - lowest(data, StochLength)));
plot stoch = stochasticValue;
}
plot beta1 = if showBeta then calcBeta(Cyclicals) else Double.NaN;
plot beta2 = if showBeta then calcBeta(Technology) else Double.NaN;
####
def st1 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = Cyclicals,
betaLength = BetaLength)),
stochLength = StochLength);
def st2 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = Technology,
betaLength = BetaLength)),
stochLength = StochLength);
def st3 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = Industrials,
betaLength = BetaLength)),
stochLength = StochLength);
def st4 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = Materials,
betaLength = BetaLength)),
stochLength = StochLength);
def st5 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = Energy,
betaLength = BetaLength)),
stochLength = StochLength);
def st6 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = Staples,
betaLength = BetaLength)),
stochLength = StochLength);
def st7 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = HealthCare,
betaLength = BetaLength)),
stochLength = StochLength);
def st8 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = Utilities,
betaLength = BetaLength)),
stochLength = StochLength);
def st9 = calcStoch( data = EhlersESSfilter(
calcBeta(secondSymbol = Financials,
betaLength = BetaLength)),
stochLength = StochLength);
# determine interger sequence (ranking)
def c1 = (st1>st2)+(st1>st3)+(st1>st4)+(st1>st5)+(st1>st6)+(st1>st7)+(st1>st8)+(st1>st9)+1;
def c2 = (st2>st1)+(st2>st3)+(st2>st4)+(st2>st5)+(st2>st6)+(st2>st7)+(st2>st8)+(st2>st9)+1;
def c3 = (st3>st1)+(st3>st2)+(st3>st4)+(st3>st5)+(st3>st6)+(st3>st7)+(st3>st8)+(st3>st9)+1;
def c4 = (st4>st1)+(st4>st2)+(st4>st3)+(st4>st5)+(st4>st6)+(st4>st7)+(st4>st8)+(st4>st9)+1;
def c5 = (st5>st1)+(st5>st2)+(st5>st3)+(st5>st4)+(st5>st6)+(st5>st7)+(st5>st8)+(st5>st9)+1;
def c6 = (st6>st1)+(st6>st2)+(st6>st3)+(st6>st4)+(st6>st5)+(st6>st7)+(st6>st8)+(st6>st9)+1;
def c7 = (st7>st1)+(st7>st2)+(st7>st3)+(st7>st4)+(st7>st5)+(st7>st6)+(st7>st8)+(st7>st9)+1;
def c8 = (st8>st1)+(st8>st2)+(st8>st3)+(st8>st4)+(st8>st5)+(st8>st6)+(st8>st7)+(st8>st9)+1;
def c9 = (st9>st1)+(st9>st2)+(st9>st3)+(st9>st4)+(st9>st5)+(st9>st6)+(st9>st7)+(st9>st8)+1;
# remove duplicate sequence numbers
def d1 = c1;
def d2 = c2+(c2==c1);
def d3 = c3+(c3==c1)+(c3==c2);
def d4 = c4+(c4==c1)+(c4==c2)+(c4==c3);
def d5 = c5+(c5==c1)+(c5==c2)+(c5==c3)+(c5==c4);
def d6 = c6+(c6==c1)+(c6==c2)+(c6==c3)+(c6==c4)+(c6==c5);
def d7 = c7+(c7==c1)+(c7==c2)+(c7==c3)+(c7==c4)+(c7==c5)+(c7==c6);
def d8 = c8+(c8==c1)+(c8==c2)+(c8==c3)+(c8==c4)+(c8==c5)+(c8==c6)+(c8==c7);
def d9 = c9+(c9==c1)+(c9==c2)+(c9==c3)+(c9==c4)+(c9==c5)+(c9==c6)+(c9==c7)+(c9==c8);
input test1 = no;
addchartbubble(test1 and !isnan(close), 0,
c1 + " " + d1 + " " + st1 + "\n" +
c2 + " " + d2 + " " + st2 + "\n" +
c3 + " " + d3 + " " + st3 + "\n" +
c4 + " " + d4 + " " + st4 + "\n" +
c5 + " " + d5 + " " + st5 + "\n" +
c6 + " " + d6 + " " + st6 + "\n" +
c7 + " " + d7 + " " + st7 + "\n" +
c8 + " " + d8 + " " + st8 + "\n" +
c9 + " " + d9 + " " + st9
, color.yellow, no);
plot stoch1 = d1;
plot stoch2 = d2;
plot stoch3 = d3;
plot stoch4 = d4;
plot stoch5 = d5;
plot stoch6 = d6;
plot stoch7 = d7;
plot stoch8 = d8;
plot stoch9 = d9;
stoch1.SetDefaultColor(Color.VIOLET);
stoch1.SetLineWeight(2);
stoch1.SetPaintingStrategy(PaintingStrategy.LINE_VS_SQUARES);
stoch1.HideBubble();
AddLabel(ShowOverlay, " Cyclicals ", Color.VIOLET);
AddChartBubble(ShowOverlay and IsNaN(close[-1]) and !IsNaN(close), if stoch1 < 0.15 then 0 else if stoch1 > 0.85 then 1 else stoch1, "Cyclicals", Color.VIOLET, stoch1 > 0.5);
stoch2.SetDefaultColor(CreateColor(90, 160, 120));
stoch2.SetLineWeight(5);
stoch2.SetStyle(Curve.LONG_DASH);
stoch2.HideBubble();
AddLabel(ShowOverlay, " Techology ", CreateColor(90, 160, 120));
AddChartBubble(ShowOverlay and IsNaN(close[-1]) and !IsNaN(close), if stoch2 < 0.15 then 0 else if stoch2 > 0.85 then 1 else stoch2, "Technology", CreateColor(90, 160, 120), stoch2 > 0.5);
stoch3.SetDefaultColor(Color.MAGENTA);
stoch3.SetLineWeight(5);
stoch3.SetStyle(Curve.SHORT_DASH);
stoch3.HideBubble();
AddLabel(ShowOverlay, " Industrials ", Color.MAGENTA);
AddChartBubble(ShowOverlay and IsNaN(close[-1]) and !IsNaN(close), if stoch3 < 0.15 then 0 else if stoch3 > 0.85 then 1 else stoch3, "Industrials", Color.MAGENTA, stoch3 > 0.5);
stoch4.SetDefaultColor(Color.CYAN);
stoch4.SetLineWeight(2);
stoch4.SetPaintingStrategy(PaintingStrategy.LINE);
stoch4.HideBubble();
AddLabel(ShowOverlay, " Materials ", Color.CYAN);
AddChartBubble(ShowOverlay and IsNaN(close[-1]) and !IsNaN(close), if stoch4 < 0.15 then 0 else if stoch4 > 0.85 then 1 else stoch4, "Materials", Color.CYAN, stoch4 > 0.5);
stoch5.SetDefaultColor(Color.YELLOW);
stoch5.SetLineWeight(1);
stoch5.SetPaintingStrategy(PaintingStrategy.Line_vs_POINTS);
stoch5.HideBubble();
AddLabel(ShowOverlay, " Energy ", Color.YELLOW);
AddChartBubble(ShowOverlay and IsNaN(close[-1]) and !IsNaN(close), if stoch5 < 0.15 then 0 else if stoch5 > 0.85 then 1 else stoch5, "Energy", Color.YELLOW, stoch5 > 0.5);
stoch6.SetDefaultColor(CreateColor(80, 180, 70));
stoch6.SetLineWeight(2);
stoch6.SetPaintingStrategy(PaintingStrategy.LINE_VS_TRIANGLES);
stoch6.HideBubble();
AddLabel(ShowOverlay, " Staples ", CreateColor(80, 180, 70));
AddChartBubble(ShowOverlay and IsNaN(close[-1]) and !IsNaN(close), if stoch6 < 0.15 then 0 else if stoch6 > 0.85 then 1 else stoch6, "Staples", CreateColor(80, 180, 70), stoch6 > close);
stoch7.SetDefaultColor(CreateColor(180, 80, 180));
stoch7.SetLineWeight(4);
stoch7.SetPaintingStrategy(PaintingStrategy.LINE);
stoch7.HideBubble();
AddLabel(ShowOverlay, " HealthCare ", CreateColor(180, 80, 180));
AddChartBubble("time condition" = ShowOverlay and IsNaN(close[-1]) and !IsNaN(close), "price location" = if stoch7 < 0.15 then 0 else if stoch7 > 0.85 then 1 else stoch7, text = "HealthCare", color = CreateColor(180, 80, 180), stoch7 > 0.5);
stoch8.SetDefaultColor(Color.ORANGE);
stoch8.SetLineWeight(2);
stoch8.SetPaintingStrategy(PaintingStrategy.LINE);
stoch8.HideBubble();
AddLabel(ShowOverlay, " Utilities ", Color.ORANGE);
AddChartBubble(ShowOverlay and IsNaN(close[-1]) and !IsNaN(close[0]), if stoch8 < 0.15 then 0 else if stoch8 > 0.85 then 1 else stoch8, "Utilities", Color.ORANGE, stoch8 > 0.5);
stoch9.SetDefaultColor(Color.PINK);
stoch9.SetLineWeight(2);
stoch9.SetPaintingStrategy(PaintingStrategy.LINE_VS_POINTS);
stoch9.HideBubble();
AddLabel(ShowOverlay, " Financials ", Color.PINK);
AddChartBubble(ShowOverlay and IsNaN(close[-1]) and !IsNaN(close), if stoch9 < 0.15 then 0 else if stoch9 > 0.85 then 1 else stoch9, "Financials", Color.PINK, stoch9 > 0.5);
#----------------------------------------------
def barNumber = BarNumber();
def endBar = if !IsNaN(close) and IsNaN(close[-1]) then barNumber else endBar[1];
def lastBar = HighestAll(endBar);
input flowLabelStep = 40;
addLabel(1,"Last Bar = " + lastBar, color.Light_Gray);
DefineGlobalColor("YellowGreen", CreateColor(90, 140, 5));
AddChartBubble(barNumber == (lastBar - flowLabelStep), 1.01,
"M O N E Y F L O W S I N", globalColor("YellowGreen"), 1);
AddChartBubble(barNumber == (lastBar - 2*flowLabelStep), 1.01,
"M O N E Y F L O W S I N", globalColor("YellowGreen"), 1);
#mAddChartBubble(barNumber == (lastBar - 3*flowLabelStep), 1.01,
#"M O N E Y F L O W S I N", globalColor("YellowGreen"), 1);
DefineGlobalColor("Cinamon", CreateColor(200, 10, 40));
AddChartBubble(barNumber == (lastBar - flowLabelStep), -0.01,
"M O N E Y F L O W S O U T", globalColor("Cinamon"), 0);
AddChartBubble(barNumber == (lastBar - 2*flowLabelStep), -0.01,
"M O N E Y F L O W S O U T", globalColor("Cinamon"), 0);
#mAddChartBubble(barNumber == (lastBar - 3*flowLabelStep), -0.01,
#m"M O N E Y F L O W S O U T", globalColor("Cinamon"), 0);
#plot zero = if isNaN(close) then double.nan else 0;
plot zero = if barNumber > (lastBar + 7) then double.nan else 0;
zero.SetDefaultColor(createColor(90, 20, 20));
zero.SetStyle(Curve.Long_Dash);
zero.SetLineWeight(5);
zero.HideBubble();
#plot one = if barNumber > (lastBar + 7) then double.nan else 1;
plot one = if barNumber > (lastBar + 7) then double.nan else 9;
one.SetDefaultColor(createColor(20, 70, 20));
one.SetStyle(Curve.Long_Dash);
one.SetLineWeight(5);
one.HideBubble();
#EOC
#