Subscribe to RSS feeds Bulkowski Blog via RSS

Thomas Bulkowski’s successful investment activities allowed him to retire at age 36. He is an internationally known author and trader with 30+ years of stock market experience and widely regarded as a leading expert on chart patterns. He may be reached at

Support this site! Clicking the links (below) takes you to If you buy ANYTHING, they pay for the referral.

Picture of Bumper.
Picture of the head's law.
Chart Patterns: After the Buy
Getting Started in Chart Patterns, Second Edition book.
Trading Basics: Evolution of a Trader book.
Fundamental Analysis and Position Trading: Evolution of a Trader book.
Swing and Day Trading: Evolution of a Trader book.
Visual Guide to Chart Patterns book.
Encyclopedia of Chart Patterns 2nd Edition book.

Bulkowski's Chart Pattern Indicator

Class Elliott Wave Fundamentals Psychology Quiz Research Setups Software Tutorials More...
Candles Chart
Small Patterns
Industrials (^DJI):
Transports (^DJT):
Utilities (^DJU):
Nasdaq (^IXIC):
S&P500 (^GSPC):
As of 01/22/2019
24,404 -301.87 -1.2%
9,822 -189.84 -1.9%
708 1.16 0.2%
7,020 -136.87 -1.9%
2,633 -37.81 -1.4%
Tom's Targets    Overview: 01/14/2019
24,800 or 22,800 by 02/01/2019
10,100 or 8,850 by 02/01/2019
740 or 680 by 02/01/2019
6,600 or 7,300 by 02/01/2019
2,740 or 2,565 by 02/01/2019

Written by and copyright © 2005-2019 by Thomas N. Bulkowski. All rights reserved. Disclaimer: You alone are responsible for your investment decisions. See Privacy/Disclaimer for more information. Some pattern names are the registered trademarks of their respective owners.

Updated on 1/2/2019.

My book, Swing and Day TradingSwing and Day Trading: Evolution of a Trader book., pictured on the left, discusses the chart pattern indicator starting on page 133. It discusses the Nr7 pattern and the CPI equation, too.

If you click on this link and then buy the book (or anything) at, the referral will help support this site. Thanks. -- Tom Bulkowski

$ $ $

From the FAQ...
Why do daily CPI readings not match those from the spreadsheet?

The chart pattern indicator gives hints of market turning points. This page describes the indicator.

The free Patternz program will calculate the indicator for you. All you have to do is download data for several hundred stock files. Be sure to keep your data files short -- no longer than a year, otherwise it could slow the tabulation).

Be aware that if your data files do not agree with mine, then you may get different results. Even if the files agree, but your stocks have been adjusted for dividends and mine have not, our results may vary.

CPI location

Signal changes are announced daily on the website on the home page (upper left, above the phrase Weekly Updates (below): [date] as "Mkt outlook:" (see figure), on pages that show the boxes at page top, right, under "Test Portfolios and CPI" as "CPI:..." (see the top, right of this page), and in the daily RSS feed. You can sign up for that on this page (see upper left, "Subscribe to RSS feeds").

The blue picture above shows the location of the indicator status on the home page and the white image shows the location for most other pages on this website.

Chart Pattern Indicator Background

I created this indicator in mid 2007 to help determine the best time to invest.

The chart pattern indicator is a tool that shows when the general market may turn using the theory that few bullish patterns appear near market tops and more appear near market bottoms. The indicator is a ratio of bullish patterns to the total of bullish and bearish patterns, expressed as a percentage. Thus, the more securities the indicator uses in its search, the better the results are likely to be.

To determine whether a security is bullish or bearish, I use the breakout method on an Nr7 chart pattern. Price is searched to find the first instance in which price closes above the top or below the bottom of the Nr7 after the pattern ends. The day that occurs, it represents the breakout day.

After finding a breakout, an upward breakout is bullish and a downward breakout is bearish. Bullish and bearish patterns are counted from pattern's end to the breakout, but the breakout must occur within 7 calendar days (not trading days) or the pattern is discarded.

AFTER a breakout, every day that a bullish pattern exists (from pattern end [the last day of the Nr7] to breakout) counts as 1. Each day that a bearish pattern exists also counts as 1 (in a separate tally, from pattern end [the last day of the Nr7] to breakout. Again, this only applies to patterns after the breakout). The totals of the bullish patterns are then compared to the total of both bullish and bearish patterns each day to form the indicator, expressed as a percentage: CPI = 100 * BullTotal / (BullTotal + BearTotal).

For example, if an NR7 ends on Monday and breaks out upward on Wednesday, Monday will have a 1 count as will Tuesday and Wednesday. If a bearish NR7 ends on Tuesday and breaks out on Wednesday, both Tuesday and Wednesday will have 1 counts. The indicator would show 100% for Monday (1 bullish count/1 total counts), and 50% for both Tuesday and Wednesday (those days would each have 1 bullish count to 2 total counts).

The reason to count bullish or bearish patterns in this manner is that the smart money knows to buy or sell a stock and does so over time. If they know good earnings are coming, they will be buying the stock before the announcement. That buying and the buying patterns of other investors or traders creates the chart patterns you see. Counting the pattern from pattern end to breakout is a way to capture the movements of the smart money over time.

The downside of using this counting method is that patterns waiting for a breakout to occur will not be counted until the breakout. Thus, what is a buy signal today based on 100 patterns may change to neutral or even sell when 200 patterns finally do show breakouts.

CPI: Waiting for Breakout

The Patternz program also shows the number of patterns waiting for breakout. That tabulation is similar to that already described. If an NR7 has not broken out yet, I count from the last day of the NR7 to 7 calendar days later. I combine the waiting for breakout values for the same day (like all the NR7s waiting for breakout on February 1) and present the total to the user.

Top of page   More

Chart Pattern Indicator Results

Raw chart of the indicator

The above chart shows the S&P 500 index from April 4, 2007 to February 15, 2008. Below the OHLC chart is the chart pattern indicator (squiggly blue line that probably looks black). Bullish and bearish thresholds were tested and found that 65 and 35 worked best. In this chart, the buy threshold appears as a green line and the sell threshold as a red line.

Top of page   More

For testing, I used 548 stocks from my database (click here for details about changes to the stock list) on the daily scale. I tested the indicator using different configurations (chart patterns and candlesticks) and over many time periods. I found that the NR7 pattern with the 65/35 thresholds worked best and gave the most timely signals. (The Nr4 pattern did not work as well as the NR7, by the way).

Filled in results of the chart pattern indicator

This is the same chart as the prior one but the buy and sell signal bars are overlayed on the chart. This shows how well the indicator is at predicting market turns, at least for the period shown. For the most recent chart, visit the CPIUpdate.html page.

Top of page   More

Chart Pattern Indicator Warnings

The following is a series of warnings on what you may discover about the indicator and why.

If you use this indicator for periods shorter than weekly, you will likely be in for a nasty surprise. Due to the way I have it configured, signals up to a week old can change or disappear. Thus, today's buy signal may not be valid for another week or it may change to a sell signal in a few days when more NR7s break out. Thus, this indicator is best used as a weekly signal (that is, signals older than a week are reliable) of market trend.

For the NR7 indicator, I use the breakout method. In the breakout method, I wait for a close either above the top or below the bottom of the NR7 to signal a bullish or bearish pattern. If an NR7 completes today, it will not be counted as bullish or bearish until sometime in the future (when the breakout actually occurs). As each trading day is tallied, the counts will change as more NR7s stage breakouts. In my analysis, I have seen the delay vary from 6 days to months later. It all depends on how long it takes a stock to move up or down enough to create a breakout. To fix this delay problem, I configured the indicator to only count breakouts that occur within 7 calendar days of the NR7. If price has not broken out by then, then it is discarded.

As securities are added to the list or removed from the list scanned, the indicator may change because the counts may change. Thus, a chart from today compared to one a year ago may appear slightly different because stocks were added to or removed from the database. This assumes the program is configured in the same manner, of course.

Much of the following applies to Patternz and the results from that program.

If you do not use enough securities, you will not get an accurate picture of the indicator. How many is enough? I think at least 125 securities will give good results but it depends on how many price patterns are found. The more patterns found, the better the result will be. I use almost 600 securities now (as of October 2016).

If you change data, then you are going to see a different result. The Patternz program makes it easy to fall into the trap of expecting the same results regardless of what data you throw at it. You see the same stock or index plotted and yet you get different results. Why?

Think of it this way. Imagine that you plot the RSI or MACD indicator against a stock. Now, pick another stock and plot the same RSI or MACD indicator. Would you expect to see exactly the same result? No. Why then do you expect to see the same result when you change the data presented to the chart pattern indicator? The chart pattern indicator counts chart patterns. If you change the data, the count totals will be different, sometimes dramatically so.

Top of page   More

Chart Pattern Indicator: Patternz Setup

A picture of the introductory screen for the indicator.

Note: This form (screen shot) and the following instructions are for the Windows XP version of Patternz. The new patternz is much simpler.

Some of you may want to run the indicator on your own and try to duplicate the results that appear on my website. The following describes the settings I use. I have trimmed the figures so that they will display on the website without scrollbars. The cut-off sections are not important.

The above screen shot is of the Patternz program once you click the Indicator button on the main form.

In the list box at 1, I have selected ^GSPC. Clicking this stock symbol causes its data to appear on the above chart. It is a chart of the S&P 500 index. You can select any market index or stock you wish. The results will not be affected by the symbol you select. However, it makes sense to chart an index or average and not an individual stock since we are finding NR7s in hundreds of securities (meaning the general market).

Make sure that both boxes at 2 are checked. If the top one is not checked, no signals will appear. If the bottom one is not checked (but the top one is), you will see every signal and not just signal changes. You can play with either after you do a Find and see how the chart changes.

Item 3 are the threshold settings, so make sure you have the same numbers as I do.

Number 4: I use slightly less than a year's worth of information (about 10 months) when I display a chart. If you keep the beginning date close to the end date, the program will complete faster. For speed, keep your data files short! If you put a year's worth of quote data in each file and no more, the program will run through the files quickly. If your files have quote data going back to the 1960s, Patternz will have to load the entire file before it realizes that it needs just the last year. That takes a lot of time, so keep your data files no longer than a year or two.

Once your screen looks like the above figure, click the Setup button.

Top of page   More

A picture of the setup screen for the indicator.

(Note: This form (screen shot) and the following instructions are for the Windows XP version of Patternz. The new patternz is much simpler.)

Item 1 is perhaps the only thing you will need on this screen. If you click the button, it should setup the form like that shown. However, since I may change the default factory setting in the future, let's take them one at a time.

Number 2 should be set to 7 days. Additional testing confirms that 7 works better than 4 or 5, so I use 7 days.

The 7 day time limit prevents NR7 patterns from months ago having a breakout today and forcing a signal change months ago. For example, a stock with a huge price move during the 7 days used in the NR7 may (and actually does sometimes) take months before price moves far enough to close either above the top or below the bottom of the pattern. Since I determine bullish/bearish signals from pattern end to the breakout, it would "color" all of the days between those two dates and perhaps change a buy signal to neutral or a sell signal to neutral. If enough stocks had this behavior (such as during the terrorist attack of 9/11), it could change the signal landscape dramatically.

Thus, a signal must breakout within a week or it is excluded. That means a buy signal that occurred last week will remain a buy signal. Even so, the indicator reading for the past 7 days could change over the coming week. That occurs more often than I like. So, you should consider the CPI as a weekly indicator and not a daily one.

If you check the bullish and bearish count totals that accompany the indicator (Excel spreadsheet: CPI detail), they should tell you how difficult it will be to change a signal from a buy to a sell or the reverse. Also, when new stocks are added to my database or existing ones disappear because of mergers and such, the count totals will change. The signals could change over the period shown in the chart because of this, but it is unlikely unless I add/remove many securities.

I use the breakout method: 3. This forces the indicator to wait for a breakout before counting a pattern as bullish or bearish. Since the breakout from an NR7 can be in any direction, this is necessary.

Set the option button to 4. I count as bullish from the end of the pattern to the breakout. The justification for this is that the smart money buys or sells over time so as not to show their hand. It may take days or weeks for large positions to be traded.

This method tends to smooth the indicator like a moving average. Using the breakout day only as the bullish or bearish signal results in poor performance and signals that change too frequently to be useful. Using the pattern start means two weeks of signals would be subject to change (7 days after the breakout and 7 days for the NR7), and that is too long.

Select the Narrow Range 7 chart pattern shown at 5. If it is not displayed, then find it in the list at 6 and click the button at 7.

Finally, my quote data is not adjusted for dividends or special distributions (but it is for splits). Thus, your display may not exactly match mine. Also, if you use different stocks than the ones I use, expect different results. It's actually better if you use more stocks (like the full market) because your results will be more accurate than mine. For a list of stocks and changes to the symbol list, click the link.

-- Thomas Bulkowski

Top of page   More  

See Also

Written by and copyright © 2005-2019 by Thomas N. Bulkowski. All rights reserved. Disclaimer: You alone are responsible for your investment decisions. See Privacy/Disclaimer for more information. Some pattern names are the registered trademarks of their respective owners. Sarcasm is just one more service I offer.