The paintbar is like a second-cousin to the variants of ttmsqueeze that you can find all over the net. The two main things the paintbar tries to identify are:
- Signs that we are coming out of a contraction phase. Bollinger Bands must be narrow but widening. The Choppiness Index (an estimation of the fractal dimension of the price action) should indicate choppiness. Price should be near a smooth average.
- Signs of a controlled, directional move out of the consolidation area. Price is near a smooth MA, but is crossing the Keltner bands. RSI and On-Balance Volume should point in direction of the cross of the keltner bands.
I made a video about it in my typical rambling style:
The main points are:
- Use the paintbar on fast charts (I use 3-minute charts). My view has always been that technical indicators work best for daytrading on very fast charts. That’s not to say that traders should trade off those fast candles, necessarily. But they should read indicators that are summarizing fast data. Also, despite how a lot of traders use them, most indicators do not work very robustly against gaps. So, I always enable pre-market data. That way, the indicators have had time to adjust to a morning gap by the time the markets open.
- The only proper use of the paintbar is to support trading ideas you already have. They are not designed to generate trading ideas out of thin air. All they do is verify that some basic conducive conditions are present in the stock… In fact, if you look at my videos, you’ll see that I always have a number of additional reasons I want to take a trade, and often trade a few candles after the paintbars, when the stock is more clearly doing what I want it to do.
- I am providing these videos and paintbar rules as a description of what I am doing… They are purely for your entertainment, and I am not claiming that they will make you any money.
In the video I describe this example trade. See how there’s a PnF chart practically screaming to get short the stock as it continues a downtrend?
… and then the 3-minute chart starts posting confirming paintbars?
This screenshot shows how nicely it would have worked out:
Perfect! If you watch my videos, you know that I don’t leave all those indicators visible on my chart. They are just on this picture to help explain how the paintbar works.
The Rules
Here are the rules. When you add the needed indicators use the (H+L)/2 variant whenever it is available. This helps keep the indicators from getting confused by price spikes, and also keeps the indicator value from changing quite as often in real-time.
Rule 1:
if (Choppiness Index(14)>=50) AND (Bollinger Bandwidth(20,3) <= 0.018) AND (Bollinger Bandwidth(20,3)[1] < Bollinger Bandwidth(20,3)) AND (Bar Close <= Keltner Bands(20).Lower) AND (Bar High < Keltner Bands(20).Upper) AND (RSI(14,1) <= 50) AND ((T-3(14,0.5) <= T-3(14,0.5)[2]) OR (HMA(14)[2] > HMA(14) AND HMA(14) <= T-3(14,0.5))) AND (Bar Close < HMA(14)) and (On Balance Volume(5).Main <= On Balance Volume(5).Signal) AND (On Balance Volume(5).Signal[1] >= On Balance Volume(5).Signal) AND (((T-3(14,0.5) - Bar Low) / Bar Close) < 0.005) set color to Red and stop
Rule 2:
if (Choppiness Index(14)>=40) AND (Bollinger Bandwidth(20,3) <= 0.018) AND (Bollinger Bandwidth(20,3)[1] < Bollinger Bandwidth(20,3)) AND (Bar Low <= Keltner Bands(20).Lower) AND (Bar High < Keltner Bands(20).Upper) AND (RSI(14,1) <= 50) AND ((T-3(14,0.5) <= T-3(14,0.5)[2]) OR (HMA(14)[2] > HMA(14) AND HMA(14) <= (T-3(14,0.5) + Bar Close * 0.004))) AND (Bar Close < HMA(14)) and (On Balance Volume(5).Main <= On Balance Volume(5).Signal) AND (On Balance Volume(5).Signal[1] >= On Balance Volume(5).Signal) AND (((T-3(14,0.5) - Bar Low) / Bar Close) < 0.01) set color to Maroon and stop
Rule 3:
if (Choppiness Index(14)>=40) AND (Bollinger Bandwidth(20,3) <= 0.023) AND (Bollinger Bandwidth(20,3)[1] < Bollinger Bandwidth(20,3)) AND (Bar Low <= Keltner Bands(20).Lower) AND (Bar High < Keltner Bands(20).Upper) AND (RSI(14,1) <= 50) AND ((T-3(14,0.5) <= T-3(14,0.5)[2]) OR (HMA(14)[2] > HMA(14) AND HMA(14) <= (T-3(14,0.5) + Bar Close * 0.004))) AND (Bar Close < HMA(14)) AND (((T-3(14,0.5) - Bar Low) / Bar Close) < 0.01) set color to $0080FF and stop
Rule 4:
if (Choppiness Index(14)>=50) AND (Bollinger Bandwidth(20,3) <= 0.018) AND (Bollinger Bandwidth(20,3)[1] < Bollinger Bandwidth(20,3)) AND (Bar Close >= Keltner Bands(20).Upper) AND (Bar Low > Keltner Bands(20).Lower) AND (RSI(14,1) >= 50) AND ((T-3(14,0.5) >= T-3(14,0.5)[2]) OR (HMA(14)[2] <= T-3(14,0.5)[2] AND HMA(14) >= T-3(14,0.5))) AND (Bar Close > HMA(14)) and (On Balance Volume(5).Main >= On Balance Volume(5).Signal) AND (On Balance Volume(5).Signal[1] <= On Balance Volume(5).Signal) AND (((Bar High - T-3(14,0.5)) / Bar Close) < 0.005) set color to Lime and stop
Rule 5:
if (Choppiness Index(14)>=40) AND (Bollinger Bandwidth(20,3) <= 0.018) AND (Bollinger Bandwidth(20,3)[1] < Bollinger Bandwidth(20,3)) AND (Bar High >= Keltner Bands(20).Upper) AND (Bar Low > Keltner Bands(20).Lower) AND (RSI(14,1) >= 50) AND ((T-3(14,0.5) >= T-3(14,0.5)[2]) OR (HMA(14)[2] < HMA(14) AND HMA(14) >= (T-3(14,0.5) - Bar Close * 0.004))) AND (Bar Close > HMA(14)) and (On Balance Volume(5).Main >= On Balance Volume(5).Signal) AND (On Balance Volume(5).Signal[1] <= On Balance Volume(5).Signal) AND (((Bar High - T-3(14,0.5)) / Bar Close) < 0.01) set color to Green and stop
Rule 6:
if (Choppiness Index(14)>=40) AND (Bollinger Bandwidth(20,3) <= 0.023) AND (Bollinger Bandwidth(20,3)[1] < Bollinger Bandwidth(20,3)) AND (Bar High >= Keltner Bands(20).Upper) AND (Bar Low > Keltner Bands(20).Lower) AND (RSI(14,1) >= 50) AND ((T-3(14,0.5) >= T-3(14,0.5)[2]) OR (HMA(14)[2] < HMA(14) AND HMA(14) >= (T-3(14,0.5) - Bar Close * 0.004))) AND (Bar Close > HMA(14)) AND (((Bar High - T-3(14,0.5)) / Bar Close) < 0.01) set color to $FFFF80 and stop


