Of late, I’ve been toying with financial data. In this first post on a series on asset trading, I
If you own an SGX trading account and are sufficiently serious about investing, you will surely be familiar with analyst reports on stocks. Take for example this report on one of my favourite REITs, Capitaland Mall Trust (C38U). Maybank Kim Eng put forth a price call/recommendation - SELL - and a price target of S$1.96, citing lower occupancy and weaker rental reversions amidst a weak leasing market. To the uninformed investor, it sounds legit. But just how accurate are these calls?
In this post, I evaluate the accuracy of 536 price call and price target pairs from Jun 2015 to Jun 2016 inclusive. I use financial data from Yahoo to assess whether stock prices actually hit price targets, and compare the results for the different price calls (buy/sell/hold) and the different research houses.
For the benefit of all readers, financially savvy or not, I think it’s worth clarifying what analyst reports are. Typically, analyst reports contain three key pieces of information:
The objective of providing this information is to provide a recommendation to investors on what to do with their holding of stock. It is a value-added service that provides investors with information about a company that would otherwise be difficult to obtain. Therefore, it should help investors make more informed decisions.
However, a convincing analyst report, while well-grounded in facts about a company, may not necessarily predict the company’s stock price. We can only be sure that such a report is, well, convincing. Fortunately, it is possible to assess the accuracy of these price calls and targets using open srouce data. For simplicity, I refer to price calls and targets jointly as “calls”.
I scraped price targets from NextInsight, a Singaporean website/forum on investing. NextInsight releases price targets on a monthly basis, and has archived this data for quite some time. I chose price targets released from Jun 2015 to Jun 2016 inclusive, because the typical time horizon for each call is one year. This provides sufficient time for calls to be actualised, if accurate.
First, I manually collected the URLs of the monthly price target pages. Although NextInsight archives all this data, the pages are linked only to each succeeding month’s page. As such, it was easier to click through the pages back in time one-by-one than to use a programmatic solution. Second, I performed some data cleaning on the tables. All steps were performed in R except for the standardisation of names of companies and research houses. I standardised the names in Excel simply because it was more efficient to do so. Third, I labelled each stock with its respective tickers. Stock tickers are codes that identify a stock on the exchange. For example, Capitaland Mall Trust is identified by the code C38U. This is consistent across all platforms.
Next, I added several important variables to allow for a tolerable level of inaccuracy when evaluating calls:
Hence, these variables enable us to identify price targets (hits) based on the following the criterion:
The stock price comes within 0.5% of the price target within 395 days.
I used the quantmod package to collect stock data. Fortunately, I kept a list of SGX tickers from a past project. I used this list to make queries to the Yahoo! Finance API through quantmod. I saved this data on my computer in CSV format. You can download it here here. I then performed a filter on the stocks to be included in this study on the grounds of data availability. Stocks included in this study had to have data from 1 Jun 2015 onwards. Without data from 1 Jun 2015, any evaluation of the call for that stock would not be fair. For example, if there was a BUY call on Capitaland Mall Trust on 1 Jun 2015 and the stock’s price hit the price target on 1 Jan 2016, but data was available only from 1 Feb 2016, the algorithm would incorrectly reflect that the call was inaccurate.
Finally, I created IDs for the calls, and split them into buy, sell and hold calls. The resulting data looked like this:
| Stock | Date | Research House | Target | Call | Ticker | Threshold | Upper Limit | Lower Limit | ID |
|---|---|---|---|---|---|---|---|---|---|
| KSH Holdings | 2015-06-02 | OCBC | 0.710 | buy | ER0 | 2016-07-01 | 0.713550 | 0.706450 | tp-1 |
| Silverlake Axis | 2015-06-02 | CIMB | 0.970 | sell | 5CP | 2016-07-01 | 0.974850 | 0.965150 | tp-2 |
| Tat Hong | 2015-06-03 | DBS Vickers | 0.520 | hold | T03 | 2016-07-02 | 0.522600 | 0.517400 | tp-3 |
| Wilmar | 2015-06-03 | DBS Vickers | 4.050 | buy | F34 | 2016-07-02 | 4.070250 | 4.029750 | tp-4 |
| ISOTeam | 2015-06-04 | UOB Kay Hian | 0.725 | buy | 5WF | 2016-07-03 | 0.728625 | 0.721375 | tp-5 |
| First Sponsor | 2015-06-05 | RHB Research | 1.550 | buy | ADN | 2016-07-04 | 1.557750 | 1.542250 | tp-6 |
| Sarine | 2015-06-05 | Maybank Kim Eng | 3.070 | buy | U77 | 2016-07-04 | 3.085350 | 3.054650 | tp-7 |
| Suntec REIT | 2015-06-05 | UOB Kay Hian | 2.080 | buy | T82U | 2016-07-04 | 2.090400 | 2.069600 | tp-8 |
| China Everbright Water | 2015-06-09 | Deutsche Bank | 1.320 | buy | U9E | 2016-07-08 | 1.326600 | 1.313400 | tp-9 |
| Comfort DelGro | 2015-06-09 | CIMB | 3.420 | buy | C52 | 2016-07-08 | 3.437100 | 3.402900 | tp-10 |
I hard-coded the abovementioned criterion to check whether price targets were actually met. The checking algorithm was run separately for buy, sell and hold calls. The algorithm is as such:
For each stock:
A total of 536 calls were evaluated, on which there were 238 hits. That makes for a combined accuracy of only 44.4%! The detailed breakdown is given below:
| Research House | Hits | Total Calls | Accuracy |
|---|---|---|---|
| UOB Kay Hian | 34 | 86 | 39.53% |
| RHB Research | 28 | 80 | 35% |
| OCBC | 42 | 74 | 56.76% |
| DBS Vickers | 41 | 71 | 57.75% |
| Maybank Kim Eng | 26 | 64 | 40.62% |
| CIMB | 20 | 53 | 37.74% |
| Credit Suisse | 15 | 29 | 51.72% |
| Deutsche Bank | 9 | 24 | 37.5% |
| KGI Fraser | 6 | 18 | 33.33% |
| Phillip Securities | 7 | 9 | 77.78% |
| JP Morgan | 4 | 7 | 57.14% |
| Daiwa | 2 | 5 | 40% |
| Goldman Sachs | 1 | 4 | 25% |
| HSBC | 0 | 4 | 0% |
| Nomura | 1 | 4 | 25% |
| NRA Capital | 1 | 2 | 50% |
| BNP Paribas | 1 | 1 | 100% |
| Morgan Stanley | 0 | 1 | 0% |
As we can see, the calls are generally inaccurate. Of the research houses that made at least 10 calls (on the graphs: left of Phillip Securities), only three had an accuracy above 50%. The remaining six had an accuracy of 41% or below!1
There were a total of 112 hits on 348 buy calls, for an accuracy of 32.2%. The results for buy calls are given below:
| Research House | Hits | Total Calls | Accuracy |
|---|---|---|---|
| RHB Research | 15 | 63 | 23.81% |
| UOB Kay Hian | 18 | 63 | 28.57% |
| DBS Vickers | 18 | 47 | 38.3% |
| OCBC | 23 | 40 | 57.5% |
| Maybank Kim Eng | 10 | 33 | 30.3% |
| CIMB | 7 | 32 | 21.88% |
| Deutsche Bank | 3 | 17 | 17.65% |
| KGI Fraser | 5 | 16 | 31.25% |
| Credit Suisse | 6 | 12 | 50% |
| Phillip Securities | 5 | 7 | 71.43% |
| Daiwa | 1 | 4 | 25% |
| HSBC | 0 | 4 | 0% |
| JP Morgan | 1 | 4 | 25% |
| Goldman Sachs | 0 | 2 | 0% |
| Nomura | 0 | 2 | 0% |
| Morgan Stanley | 0 | 1 | 0% |
| NRA Capital | 0 | 1 | 0% |
The research houses performed worse on buy calls. Of the research houses that made at least 10 calls (on the graphs: left of Phillip Securities), only two had an accuracy above 50%. The remaining seven did not reach 40% accuracy.
There were a total of 26 hits on 47 sell calls, for an accuracy of 55.3%, which was better than that for buy calls. However, due to the small number of sell calls, this may not be representative of the true accuracy of sell calls. The smaller number of sell calls (than buy calls) is expected because buying is generally associated with making money, and selling with preventing losses. Surely more resources would be diverted to identifying profit opportunities - this is much juicier info!
| Research House | Hits | Total Calls | Accuracy |
|---|---|---|---|
| Maybank Kim Eng | 8 | 16 | 50% |
| CIMB | 7 | 9 | 77.78% |
| UOB Kay Hian | 2 | 6 | 33.33% |
| OCBC | 1 | 5 | 20% |
| Credit Suisse | 2 | 3 | 66.67% |
| JP Morgan | 3 | 3 | 100% |
| Deutsche Bank | 1 | 2 | 50% |
| RHB Research | 2 | 2 | 100% |
| KGI Fraser | 0 | 1 | 0% |
There were a total of 100 hits on 141 sell calls, for an accuracy of 70.9%, which was the highest overall. However, due to the small number of sell calls, this may not be representative of the true accuracy of sell calls. This is expected: buying is generally associated with making money, and selling with preventing losses. Surely more resources would be diverted to identifying profit opportunities - it’s much juicier info!
| Research House | Hits | Total Calls | Accuracy |
|---|---|---|---|
| OCBC | 18 | 29 | 62.07% |
| DBS Vickers | 23 | 24 | 95.83% |
| UOB Kay Hian | 14 | 17 | 82.35% |
| Maybank Kim Eng | 8 | 15 | 53.33% |
| RHB Research | 11 | 15 | 73.33% |
| Credit Suisse | 7 | 14 | 50% |
| CIMB | 6 | 12 | 50% |
| Deutsche Bank | 5 | 5 | 100% |
| Goldman Sachs | 1 | 2 | 50% |
| Nomura | 1 | 2 | 50% |
| Phillip Securities | 2 | 2 | 100% |
| BNP Paribas | 1 | 1 | 100% |
| Daiwa | 1 | 1 | 100% |
| KGI Fraser | 1 | 1 | 100% |
| NRA Capital | 1 | 1 | 100% |
Results don’t mean that analysts are stupid. Quite the contrary actually. They are the most informed people about companies’ business models and performance. However, knowing how well companies are doing does not help us in estimating its stock price. That’s because real world value from assets owned, and the production and sale of goods is delinked from market value. The former is termed book value, which measures the tangible value of a company, that is, how much money you would get from closing the company and selling everything it has away at the prevailing prices.
If you and I were the market, and we both think that a stock’s price is $10 and will be $10 for all eternity by coincidence or otherwise, then $10 will be the stock’s price for all eternity.
The people making money are the people who own the platforms.
The Oxford English dictionary’s definition of invest is to put (money) into financial schemes, shares, property, or a commercial venture with the expectation of achieving a profit. By definition, we don’t need to have a justification for expecting a profit from investing. All we need is to expect a profit, and we are investing. Th
I would not compare this accuracy with a coin flip, because a coin flip does not give you a price target - an absolute number to hit. If instead, the research houses gave only a price call of up or down, the comparison with a coin flip would be valid.↩