With last weeks action, the market has flipped twice and now stands at the same high point that we have seen before. I posted several times last week to keep up with the unfolding events and I will continue to do so if necessary. Hence I decided lo leave some of the sectors out of my weekend comment, unless they warrant special attention.
I believe the market has further upside potential, but it is also very vulnerable to collapse. If you followed last weeks updates, you had a good chance at catching most of the down move and the up move as well. Nobody is always on the right side of the market, but we can read the chart and just follow what it tells us with good accuracy. I would also like to point out my disclaimer for those of you who are new here.
Targets:
I am using strategies that help me identify high probability turning points. There are many ways to derive target zones (measured moves, fib retracements, P&F counts and others), but the market often decides on an alternative path. Usually it throws us a clue in some of the indicators I prefer to monitor, so I do not want you to get held up on a target and miss the turning point because of it. Knowing when to expect a turn is sufficient to gain an edge, but keep in mind that those turning points are only highly probable and not certain. You must take appropriate risk management and judge all the data without directional bias.
As a rare exception, the image above shows a target, that I got from:
- Target of measured move from sloppy inverse H&S pattern
- Prophet (software) gives it as measured move from triangle breakout
- It measures from Elliott Wave as W=Y
- Its where we could backtest the big Head and Shoulders top
There are reasons to be cautious to see how next week unfolds. Should we get further bullish action, we could buy the dips, but currently that is not where we are. In fact, the chart above and below shows that
- We hit massive supply that we need to push through.
- Someone either bought a lot of puts or got squeezed out of puts (I suspect both) on the up bar
- We stopped at a potential double top
- Keep retracement levels small (38.2%)
- Keep retracement volume small
- Consolidate all the gains for a few days, while staying above 1340
If we turn down before the McClellan oscillator can make a new high, we also have a bearish divergence setting up that requires us to retrace further. Additionally the McClellan Oscillator sits at an overbought level that marked previous tops. The Advance / Decline volume also showed some doubt, as it did not match the magnitude of the price spike.
The US Dollar and Treasuries are the same picture in reverse, with slight differences. The Dollar did not come close to previous lows. It showed massive volume on a daily scale. We would need to push through the demand zone on regular volume to confirm the bearish trend.
The same is true for treasuries.
Bullish Arguments:
Prophet (a clever automated TA from ThinkOrSwim) threw up a new target for the bullish move. It detected a potential triangle breakout, with a target on SPY above 140 (corresponding to above 1400 for the S&P 500).
The tool is automated, thus unbiased and has a very good track record (see images below). Thus we must respect the target. It also fits with a complex correction that we have seen often in past years.
Almost all previous prophet targets were met, with one exception (click on thumbnails to enlarge).
Technology is still on track for its next cyclical low.















Here is the script:
I can’t take credit for it, only for adding the labels at the bottom. I got it from a stock forum. Anyways, churn just means high volume and little movement (after the gap anyways in this case). So technically you don’t need a script to color code it, you could just eyeball it.
Just copy and paste everything below into a custom indicator:
#
# SJ_BetterVolume_Labels
#
# A better volume indicator with color coded histogram plot that
# shows 4 different colors depending on price action and volume
# *************************************************************
# You can figure out whether the Professionals are buying or selling by analyzing:
# Volume transacted at the bid or the ask
# High to low range of the bar, and
# Average trade size.
# *************************************************************
# The Better Volume indicator uses a combination of bid/ask volume and range to identify Volume Climax, High Volume Churn and Low Volume bars.
# Market tops are characterized by Volume Climax Up bars, High Volume Churn and Low Volume Up bars (also called Testing).
# Market bottoms are characterized by Volume Climax Down bars, High Volume Churn and Low Volume Down bars (Testing).
# Pullbacks, in either up or down trends, are similar to market topping or bottoming patterns, but shorter in duration and with simpler volume patterns.
# The Better Volume indicator works in all markets and for all time frames ñ but is particularly useful for tick charts.
# *************************************************************
# Yellow – Low volume for the size of the bar – Amateurs at work
# White – Climax down
# Blue -Climax up
# Red – Churn – Pros buying at lows or unloading at highs
# Magenta – Climax Churn – Pros taking profits at highs or lows
# Gray – Normal (default) Bar
# *************************************************************
# The Better Volume indicator improves on your typical volume histogram by coloring the bars based on 5 criteria:
# Climax volume – high volume and high range
# High volume churn – high volume but low range
# Climax volume plus High volume churn – both the above conditions (rare)
# Low volume churn – low volume and high range
# Low volume – just low volume but not a low volume churn bar”
# *************************************************************
#
#
declare on_volume;
declare real_size;
#
input lookback = 8;
input Use2Bars = {“No”, default “Yes”};
input LowVol = {“No”,default “Yes”};
input ClimaxUp = {“No”,default “Yes”};
input ClimaxDown = {“No”,default “Yes”};
input Churn = {“No”,default “Yes”};
input ClimaxChurn = {“No”,default “Yes”};
def LowVolColor = 8;
def ClimaxUpColor = 9;
def ClimaxDownColor = 1;
def ChurnColor = 5;
def ClimaxChurnColor = 0;
def DefaultBarColor = 7;
def AvgColor = 0;
#
def Range = TrueRange(high,low,close);
#
def Value1 = if (close >= open,Volume * ((Range) / ((2+(Range*Range)/10) * Range + (open – close))),
Volume * (((Range + close – open)) / (2+(Range*Range)/10) * Range + (close – open)));
def Value2 = Volume – Value1;
def Value3 = Value1 + Value2;
def Value4 = Value1 * Range;
def Value5 = (Value1 – Value2) * Range;
def Value6 = Value2 * Range;
def Value7 = (Value2 – Value1) * Range;
def Value8 = if (Range 0, Value1 / Range, 1);
def Value9 = if (Range 0, (Value1 – Value2) / Range, 1);
def Value10 = if (Range 0, Value2 / Range, 1);
def Value11 = if (Range 0, (Value2 – Value1) / Range, 1);
def Value12 = if (Range 0, Value3 / Range, 1);
def Value13 = if (Use2Bars, Value3 + Value3[1],1);
def Value14 = if (Use2Bars, (Value1 + Value1[1])*(Highest(High,2)-Lowest(Low,2)),1);
def Value15 = if (Use2Bars, (Value1 + Value1[1]-Value2-Value2[1])*(Highest(High,2)-Lowest(Low,2)),1);
def Value16 = if (Use2Bars, (Value2 + Value2[1])*(Highest(High,2)-Lowest(Low,2)),1);
def Value17 = if (Use2Bars, (Value2 + Value2[1]-Value1-Value1[1])*(Highest(High,2)-Lowest(Low,2)),1);
def Value18 = if ((Use2Bars and (Highest(High,2)Lowest(Low,2))),(Value1+Value1[1])/(Highest(High,2)-Lowest(Low,2)),1);
def Value19 = if ((Use2Bars and (Highest(High,2)Lowest(Low,2))),(Value1+Value1[1]-Value2-Value2[1])/(Highest(High,2)-Lowest(Low,2)),1);
def Value20 = if ((Use2Bars and (Highest(High,2)Lowest(Low,2))),(Value2+Value2[1])/(Highest(High,2)-Lowest(Low,2)),1);
def Value21 = if ((Use2Bars and (Highest(High,2)Lowest(Low,2))),(Value2+Value2[1]-Value1-Value1[1])/(Highest(High,2)-Lowest(Low,2)),1);
def Value22 = if ((Use2Bars and (Highest(High,2)Lowest(Low,2))),Value13/(Highest(High,2)-Lowest(Low,2)),1);
def Condition1 = if(Value3 == Lowest(Value3, Lookback), 1, 0);
def Condition2 = if((Value4 == Highest(Value4, Lookback) and close > open), 1, 0);
def Condition3 = if((Value5 == Highest(Value5, Lookback) and close > open), 1, 0);
def Condition4 = if((Value6 == Highest(Value6, Lookback) and close < open), 1, 0);
def Condition5 = if((Value7 == Highest(Value7, Lookback) and close < open), 1, 0);
def Condition6 = if((Value8 == Lowest(Value8, Lookback) and close < open), 1, 0);
def Condition7 = if((Value9 == Lowest(Value9, Lookback) and close open), 1, 0);
def Condition9 = if((Value11 == Lowest(Value11, Lookback) and close > open), 1, 0);
def Condition10 = if(Value12 == Highest(Value12, lookback), 1, 0);
def Condition11 = if (Use2Bars and (Value13==Lowest(Value13,Lookback) and close > open and Close[1] > Open[1]),1,0);
def Condition12 = if (Use2Bars and (Value14==Highest(Value14,Lookback) and close > open and Close[1] > Open[1]),1,0);
def Condition13 = if (Use2Bars and (Value15==Highest(Value15,Lookback) and close > open and Close[1] < Open[1]),1,0);
def Condition14 = if (Use2Bars and (Value16==Lowest(Value16,Lookback) and close < open and Close[1] < Open[1]),1,0);
def Condition15 = if (Use2Bars and (Value17==Lowest(Value17,Lookback) and close < open and Close[1] < Open[1]),1,0);
def Condition16 = if (Use2Bars and (Value18==Lowest(Value18,Lookback) and close < open and Close[1] open and Close[1] open and Close[1] > Open[1]),1,0);
def Condition19 = if (Use2Bars and (Value21==Lowest(Value21,Lookback) and close > open and Close[1] > Open[1]),1,0);
def Condition20 = if (Use2Bars and (Value22==Lowest(Value22,Lookback)), 1,0);
plot Vol = volume;
plot VolAvg = Average(volume, lookback);
Vol.SetPaintingStrategy(PaintingStrategy.HISTOGRAM);
Vol.SetLineWeight(5);
Vol.AssignValueColor (
if (ClimaxChurn and (Condition10 or Condition20)) and (Condition2 or Condition3 or Condition4 or Condition5 or Condition6 or Condition7 or Condition8 or Condition9) then GetColor(ClimaxChurnColor) else
if (LowVol and (Condition1 or Condition11)) then GetColor(LowVolColor) else
if (ClimaxUp and (Condition2 or Condition3 or Condition8 or Condition9 or Condition12 or Condition13 or Condition18 or Condition19)) then GetColor(ClimaxUpColor) else
if (ClimaxDown and (Condition4 or condition5 or Condition6 or Condition7 or Condition14 or Condition15 or Condition16 or Condition17)) then GetColor(ClimaxDownColor) else
if (Churn and Condition10 or Condition20) then GetColor(ChurnColor) else
GetColor(DefaultBarColor));
VolAvg.SetDefaultColor(GetColor(AvgColor));
#
# *************************************************************
# INDICATOR’S COLOR LEGEND
# *************************************************************
#AddChartLabel(Yes, “Amateur Trading”, GetColor(LowVolColor));
#AddChartLabel(Yes, “Climax down”, GetColor(ClimaxDownColor));
#AddChartLabel(Yes, “Climax up”, GetColor(ClimaxUpColor));
#AddChartLabel(Yes, “Pros buying at lows or unloading at highs”, GetColor(ChurnColor));
#AddChartLabel(Yes, “Pros taking profits at highs or lows”, GetColor(ClimaxChurnColor));
#AddChartLabel(Yes, “Normal”, GetColor(DefaultBarColor));
#
AddChartLabel(Yes, “Low Vol”, GetColor(LowVolColor));
AddChartLabel(Yes, “Climax down”, GetColor(ClimaxDownColor));
AddChartLabel(Yes, “Climax up”, GetColor(ClimaxUpColor));
AddChartLabel(Yes, “Churn”, GetColor(ChurnColor));
AddChartLabel(Yes, “Climax Churn”, GetColor(ClimaxChurnColor));
AddChartLabel(Yes, “Normal”, GetColor(DefaultBarColor));
#
# AddChartLabel(Yes, “Average Color”, GetColor(AvgColor));
Thank you. will try to add tonight.
Good stuff man. How is churn volume identified by TOS ? any idea?
I am also gonna try pattern feature on TOS. But patterns are not always dependable on SPX I think…
I will post the script tonight. Still outside enjoying the weekend