Hunting Down Growth Stocks

Growth companies are those with huge potential returns and are often found in the technology sector. Here is the official definition from investing.com:

A growth company is any firm whose business generates significant positive cash flows or earnings, which increase at significantly faster rates than the overall economy.

So how can we spot those kind of companies? We can screen stocks based on annual earning growth, revenues growth, return on equity…etc. We can also look for companies developing disruptive technologies. But could we just let the experts do it for us? for free? Well this is what I am exploring in this post.

Each year, a bunch of news sites and organizations publish lists of the most innovative companies. In this post, I aggregated those lists from the sites and compared the holding period return for the listed companies from 2012 to 2015. Not all companies in the lists were included. Only those with that are listed on either NASDAQ, NYSE and AMEX, and Trading in the stock market during the whole holding period. You can download the aggregated list from the repo on github. The data are collected from the below sources. Note that for Forbes list, I could not find the whole list for 2012, only the top ten.

loading the data

# import the required libraries
import pandas as pd
import pandas_datareader.data as web
import datetime
from plotly.offline import download_plotlyjs, init_notebook_mode, iplot
import cufflinks as cf
init_notebook_mode()
# Load the aggregated list of companies
data = pd.read_csv("TOP_COMP_2012.csv")
start = datetime.datetime(2013, 1, 1)
end = datetime.datetime(2015, 12, 31)
tickers = list(data['ticker'])
# importing the stock prices
stock_data = web.DataReader(tickers, 'yahoo',start,end)['Adj Close']

Results

# Calculating the holding period returns (HPR)
returns = pd.DataFrame(stock_data.iloc[-1]/stock_data.iloc[0] - 1)
returns = returns.sort_values(by = [0], ascending=False)
returns.columns = ['HPR']
returns.iplot(kind='bar',title='Holding Period Returns', dimensions=(900,400))
print 'Average return: ' + str(returns['HPR'].mean(axis=0)*100)
print 'Percentage of stocks with positive returns: ' + str(len(returns[returns['HPR']>0])/float(len(returns))*100 )

# prints
# Average return: 65.9479896729
$ Percentage of stocks with positive returns: 87.2093023256

The above chart shows an astonishing results with an average return of 66%. Around 87% of the companies showed a positive holding period return. So can we conclude that we can just rely on the experts for hunting big growth companies? Let’s not get our hopes up yet. Let’s first check if we just invested in the S&P 500 and compare its cumulative returns with a but and hold portfolio of equal weights of the stocks above.

s_p = pd.DataFrame(web.DataReader("^GSPC", 'yahoo',start,end)['Adj Close'])
s_p_returns = ((s_p/s_p.iloc[0,:])-1)
cum_returns = pd.concat([pd.DataFrame(((stock_data/stock_data.iloc[0,:])-1).mean(axis=1)), 
                         s_p_returns],
                        axis=1)
cum_returns.columns = ['Buy and Hold', 'S&P']  
(cum_returns*100).iplot(dimensions=(900, 400), layout={'yaxis': {'ticksuffix':'%'}})

Well, we’re still beating the market by about 30%. So can we really just let the experts do it for us? Well maybe use their lists as preliminary screener only. In a later post, we will explore further portfolio strategies other than the buy and hold one and see whether we can beat it.