Temporarily removed

Posted by on Sep 29, 2015 in Uncategorized | 4 comments

Just got an email from a user telling me that the version on Mac App Store does not work. I have removed ChartMaestro from Mac App store temporarily so I can fix this ASAP. You can expect a new version in about a week. Sorry about this.

ChartMaestro is now free!

Posted by on Sep 28, 2015 in News | 1 comment

When ChartMaestro was released a few years ago, it was sold for $30 on Mac App Store. Today, it is still one of the most advanced stock analysis tools on Mac App Stores, with features like smart watch lists and 2D scatter plots. Now, it is also completely free!

By releasing it for free, I hope to gain more users and eventually open a new discussion forum.

Happy trading!

ChartMaestro v1.9 is released

Posted by on Sep 28, 2015 in Uncategorized | 0 comments

ChartMaestro was removed from Mac App Store some while ago but is now back with some bug fixes and a new feature: A Yahoo button has been added so you can open Yahoo Finance in your browser given the selected stock in your watch list.

Relative Strength

Posted by on Jan 23, 2015 in Uncategorized | 1 comment

I got a question if ChartMaestro can plot Relative Strength (RS) for a given stock relative e.g. S&P500. ChartMaestro can do this and much more. In ChartMaestro, you can create a 2D scatter plot for all stocks in your library and animate the RS over time. You can also create smart watch lists that capture stocks with e.g. RS>0 or RS<0. Today I will go through with you how you can add and use RS in your analysis.

RS is a way to measure the performance of a certain stock relative a benchmark, e.g. an index, for a given number of days. Say we are interested in the performance for the last 3 months, which is approximately 66 days. We first calculate the relative difference for the stock between today’s close and close price 66 days ago. Then, we do the same thing for the benchmark. Finally, we divide the relative differences, subtract with 1 and multiply with 100 to get a percentage value telling if the stock is outperforming S&P500. A value of e.g. 10% means it has increased 10% more than S&P500 during the last 66 days.

Let’s start with calculating the relative difference for the stock. This can be written as

close close 66 nback /

in ChartMaestro’s RPN language. Here, close 66 nback, gives you the close price 66 days ago. Then we add the operator / in the end to tell we want to calculate the ratio between today’s close and close 66 days ago. The operator / is put in the end since the language is an RPN language.

We then calculate the same thing for the benchmark, in this case for S&P 500. This is written as:

^gspc sclose copy 66 nback /

This assumes you have added ^gspc as a symbol in ChartMaestro. Finally, we divide the two values, subtract 1 and multiply with 100. This is written as:

/ 1 – 100 *

Now, let’s put everything together into one big expression:

close close 66 nback / close close 66 nback / / 1 – 100 *

This expression will plot RS given 66 days history. However, to make the plot a little bit nicer, we can add a zero line in black and then plot the RS line in blue. Let’s add this expression in the beginning: color=0,0,0 0 color=0,0,1

This tells ChartMaestro to first draw a zero line in black and then change colour to blue. The full expression becomes:

color=0,0,0 0 color=0,0,1 close close 66 nback / close close 66 nback / / 1 – 100 *

Now, create a new chart view with the following settings:



This creates a chart view with two charts: A price chart (with candles) and our RS chart with the zero line. This stock has an RS value just above 4%, which means it has outperformed S&P500 with 4% the last three months. However, we can also see that the line has dropped from 12.84%, meaning S&P500 has been increasing while TRV is standing more or less still.

This is very nice, but we still need to go through every single stock to find the stocks that outperform S&P500, which is of course a complete waste of time. In most stock analysis tools, that is exactly what you have to do. However, ChartMaestro offers both 2D scatter plots and smart watch lists to solve this problem (two features that complement each other very nicely).

In ChartMaestro, we can create a scatter plot that shows e.g. 66 days RS vs 22 days RS for all the stocks we have added in ChartMaestro. This is how I do this:

Screen Shot 2015-01-23 at 13.02.22


I have 41 stocks and indices in my database and they are all shown in this plot. RS 22 days is plotted on the x-axis and RS 66 days is plotted on the y-axis. I have set the limits to -20% to 20% on both axes. If a stock has higher or lower values value than these limits, it will still be plotted at the edge of the plot.

In the 2D view, we can easily find the stocks that outperform S&P500 by selecting them. The selected stock is displayed as a white circle. Here, we can see that the best stock is UNH. It has the highest RS-value both short term (22 days) and long term (66 days). By clicking on the Chart tab, we can now look at the chart for this stock:

Screen Shot 2015-01-23 at 13.07.02

One interesting thing to notice in the 2D plot is that stocks with a high RS 22 days value tend to get a high RS 66 days value too. However, there are exceptions, i.e. stocks that have a positive RS 22 value but a negative RS 66 value.

To get an overall feeling for the market, we can create two smart watch lists. One which captures stocks with RS>0 and one which captures stocks with RS<0. We can also add the RS value as a smart value in the watch list table, which then allows us to sort the stocks on the RS-value. This is how I create the RS>0 smart watch list:

close copy 66 nback /  ^gspc sclose copy 66 nback / / 1 – 100 *

This is how I create the RS<0 smart watch list:

close copy 66 nback /  ^gspc sclose copy 66 nback / / 1 – 100 * x store x 0 < x

The RS<0 becomes a little bit more complicated. The smart watch list will add any stock with a value higher than 0, so we have to use the operator < to test if the value is below 0. This operator will return 1 if the value is below 0. But we also want to add the RS value as a smart value to the table, so we need to add RS as a value at the end of the expression. I would not go into any depth about this, but please ask in the comments if you want to learn more about how this is done.

This is what I get in the end:

Screen Shot 2015-01-23 at 13.15.50


Here, I have ordered the watch table “RS>0″ on its smart value, i.e. the RS value. Again, we see that UNH  (United Health Group) has the highest RS value. This is the same information that we got from the scatter plot. However, the smart watch lists can tell us how many stocks or indices that have RS>0 vs RS<0. Also, it’s much quicker to go in and just observe the stocks with RS>0 through the watch list. But we can also colour all those stocks as green. Do this:

Select all stocks in the RS>0.
Click on colour and choose the colour green.
Select “All symbols” and then look at the 2D plot.

You should get a plot like this:

Screen Shot 2015-01-23 at 13.28.00 1


Now, drag the slider above the 2D chart to the left. You will now animate the chart back in time so you can see how it looked like e.g. three months ago:

Screen Shot 2015-01-23 at 13.32.08


As you can see, the stocks are now blended. There are quite many green stocks that have RS<0  if we go back 66 days. It’s like the memory of 66 days RS is no more than 66 days, i.e. we cannot claim that stocks that outperforms S&P500 today (given the last 66 days) also tend to historically outperform S&P500 if we go back 66 days into the past. This probably also means we cannot say that the stocks that outperform S&P500 today will outperform S&P500 three months into the future. We probably also need to combine the RS metric with something else to filter out stocks that are interesting in the long term.

Infix notation

Posted by on Sep 17, 2014 in Uncategorized | 2 comments

The one thing I’m working on for the next version is support for infix notation, i.e. support for writing expressions in the way we usually do (e.g. open-close) instead of  Reverse Polish Notation (RPN) (e.g. open close -).

However, RPN is in the actual core of ChartMaestro and will not be replaced by infix notation, so ChartMaestro will support both in the same way as an HP48 calculator can support infix notation: by writing ‘ before and after the expression.

Here is an example of how the expression of a 14 days stochastics indicator looks like in RPN:

close low 14 min – high 14 max low 14 min – / 100 *

With infix notation, you will also be able to express this as:


You can even write both RPN and infix notation in the same expression, like this:

‘close-min(low,14)’ ‘max(high,14)-min(low,14)’ / 100 *

What ChartMaestro will do internally is to translate the infix notation to RPN. For instance, the expression ‘min(low,14)’ will be translated to low 14 min. However, ChartMaestro will not know anything about how many arguments a certain function has, so it will translate whatever you throw at it. Therefore, an incorrect expression like ‘min(low,14,10)’ will be translated into low 14 10 min even though it is wrong, but ChartMaestro will not complain.

RPN is very powerful, but it would sometimes be easier to just write infix. With this solution, you will be able to do both.

Now, I just have to implement it! I’ll keep you updated on the progress. :)

ChartMaestro v1.8

Posted by on Sep 16, 2014 in News | 5 comments

ChartMaestro has recently been updated to v1.8, which replaced the expression fields for smart watchlists and functions with an expression text area. This allows you to more easily write larger expressions. You can also write comments by writing a hash at the beginning of the line, or after an expression. Here is an example:

Screen Shot 2014-07-13 at 08.36.00

In this example, we create a smart watch list that captures all stocks with RSI < 30. It also writes out RSI as a “smart value” in the watch table, which conveniently allows you to sort your stocks on RSI-value.

In previous versions, you would have written the same expression as

close 14 rsi x store x 30 < x

which is much more compact. You can of course still write your expressions in one line without comments if you wish, but larger expressions tend to become difficult to read that way.

Version 1.7 available on Mac App Store

Posted by on Nov 7, 2013 in News | 5 comments

The new version is finally available on Mac App Store. This version fixed a crucial bug that caused the app to crash on OS X Mavericks, so I had to pull the app from the store while I was updating it. Besides fixing this bug, I also added a nice feature that allows you to switch  between daily, weekly and monthly charts. I hope you like it!

New version submitted to Mac App Store

Posted by on Oct 31, 2013 in News | 2 comments

This took a little bit of time to solve. First, a crucial bug caused ChartMaestro to crash in OS X Mavericks. It was quite easy to fix, but since I was in the middle of developing a new feature I needed to finish that first before I could upload the new version. It has now finally been submitted to Mac App Store, so please give it a few days to pass through Apple’s review procedures.

The new feature in v1.7 allows you to switch between daily, weekly and monthly charts by clicking on three buttons above the chart. The indicators will automatically adapt, e.g. if you are switching from daily to weekly view your 14 days moving average will now show 14 weeks moving average.

ChartMaestro Mavericks crash solved

Posted by on Oct 23, 2013 in News | 0 comments

I found the bug that caused this problem. Interesting that it did not cause any problems in OS X 10.8. Anyway, I will send a new version to Mac App Store now. It will unfortunately take some days before Apple has reviewed and approved the update.

ChartMaestro crashes in Mac OS X 10.9 Mavericks

Posted by on Oct 23, 2013 in News | 0 comments

Mavericks is here, for free! That is great! Unfortunately, ChartMaestro crashes in Mavericks when downloading data from Yahoo. That is not so great. I’m working hard to solve this problem and will submit a new version of ChartMaestro as soon as the problem is solved. This only affects Mavericks users. ChartMaestro works fine in Mac OS X 10.8.

I will get back with some progress report on this matter. Meanwhile, I have pulled the app from Mac App Store to avoid that new Mavericks users buy something they cannot use.