This is the second in a series of posts about using APL to crunch numbers. It starts with a database of sorts in APL.
I want to use present-value equations to assess various stocks. To do so I need specific stocks to investigate. I built a database of the top 20 stocks from the Fortune 500. I did have to do this by hand.
finance.yahoo.com is a good source for information about publicly traded stocks, bonds, and mutual funds. I got a list of the Fortune 500 and went to Yahoo. Here is what I compiled:
Symbol | Name | Price | Div $ | EPS | Total Rev |
---|---|---|---|---|---|
WMT | Walmart | 142.09 | 2.28 | 4.27 | 611289 |
AMZN | Amazon | 95.82 | 0 | -0.28 | 513983 |
AAPL | Apple | 149.4 | 0.92 | 5.9 | 395328 |
CVS | CVS Health | 86.04 | 2.42 | 3.14 | 322467 |
UNH | UnitedHealth Group | 488.17 | 6.6 | 21.17 | 322132 |
XOM | Exxon Mobil | 110.74 | 3.64 | 13.26 | 398675 |
BRK-B | Berkshire Hathaway | 300.69 | 0 | -0.97 | 345636 |
GOOG | Alphabet | 91.07 | 0 | 4.54 | 282836 |
MCK | McKesson | 360.33 | 2.16 | 21.79 | 263966 |
ABC | AmerisourceBergen | 159.5 | 1.94 | 8.25 | 238587 |
COST | Costco Wholesale | 493.14 | 3.6 | 13.23 | 226954 |
CI | Cigna | 295.65 | 4.92 | 21.29 | 180642 |
T | AT&T | 19.25 | 1.11 | -1.1 | 120741 |
MSFT | Microsoft | 254.77 | 2.72 | 9 | 198270 |
CAH | Cardinal Health | 77.7 | 1.98 | -4.56 | 181364 |
CVX | Chevron | 161.93 | 6.04 | 18.28 | 235717 |
HD | Home Depot | 299.31 | 8.36 | 16.68 | 157403 |
WBA | Walgreens Boots Alliance | 36.21 | 1.92 | -3.43 | 132703 |
MPC | Marathon Petroleum | 125.52 | 3 | 27.98 | 177453 |
ELV | Elevance Health | 486.12 | 5.92 | 24.81 | 156595 |
KR | Kroger | 43.91 | 1.04 | 3.18 | 137888 |
F | Ford Motor | 12.07 | 0.6 | -0.49 | 158057 |
VZ | Verizon Communications | 38.53 | 2.61 | 5.06 | 136835 |
JPM | JPMorgan Chase | 139.67 | 4 | 12.1 | 128641 |
GM | General Motors | 39.25 | 0.36 | 6.09 | 156735 |
All of this data and a lot more is available issue by issue at Yahoo. I chose this data to help determine which issues are worth further investigation. The statistic I was most interested in was the dividend yield, column four divided by column three.
Financial theory proposes that a stock’s price is dividend ÷ (yield – growth). Yield is expected to be your return on the investment, and growth is the rate at which the dividend is expected to grow.
So before I could work on estimating growth and/or yield, I needed to address Alphabet, which has never paid a dividend but whose stock is quite valuable.
When I learned financial theory, I decided that companies that paid no dividends had no value; just do the arithmetic with any yield or growth assumption. Today’s post evaluates the zero-dividend strategy.
I needed a baseline to compare to Alphabet’s performance. I choose Vanguard high-yield dividend fund (VYM). It is a mutual fund generally made up of dividend-paying stocks—high dividend if you believe the title. Vanguard is well known for mutual funds that provide similar returns to the market as a whole.
I went to Yahoo and downloaded the dividends paid by VYM over the 10 years ended 12/31/2022.
vym_div←date∆US import∆file∆withDates '/home/dalyw/Downloads/VYM.csv' ⍴vym_div 41 2 vym_div[⍳15;] Date Dividends 2013 3 22 0.361 2013 6 24 0.419 2013 9 23 0.437 2013 12 20 0.532 2014 3 24 0.401 2014 6 23 0.476 2014 9 22 0.469 2014 12 18 0.562 2015 3 23 0.462 2015 6 26 0.56 2015 9 23 0.528 2015 12 21 0.599 2016 3 15 0.478 2016 6 21 0.578
I also looked up the opening price of VYM on 1/1/2013—$45.89—and 1/1/2023—$108.21. I could now produce a date flow.
The workspace ‘5 DALY/fin’ distributed with gnu-apl. It has present and future value functions for date flows. A date flow is an ordered collection of date–amount pairs. Each date is in Lillian format, that is, the number of days from October 15, 1582, the first day of the Gregorian calendar.
I took this data and assembled a date flow that assumed the purchase of VYM on 1/1/2012 and its sale on 12/31/2022:
fin∆df∆show vym 2013/01/01 (45.89) 2013/03/22 0.36 2013/06/24 0.42 2013/09/23 0.44 2013/12/20 0.53 2014/03/24 0.40 2014/06/23 0.48 2014/09/22 0.47 2014/12/18 0.56 2015/03/23 0.46 2015/06/26 0.56 2015/09/23 0.53 2015/12/21 0.60 2016/03/15 0.48 2016/06/21 0.58 2016/09/13 0.48 2016/12/22 0.67 2017/03/22 0.56 2017/06/23 0.60 2017/09/20 0.60 2017/12/21 0.64 2018/03/26 0.61 2018/06/22 0.63 2018/09/26 0.67 2018/12/24 0.74 2019/03/25 0.65 2019/06/17 0.62 2019/09/24 0.79 2019/12/23 0.78 2020/03/10 0.55 2020/06/22 0.84 2020/09/21 0.70 2020/12/21 0.81 2021/03/22 0.66 2021/06/21 0.75 2021/09/20 0.75 2021/12/20 0.94 2022/03/21 0.66 2022/06/21 0.85 2022/09/19 0.77 2022/12/19 0.97 2023/01/01 108.21
I computed an internal rate of return using fin∆df∆irr as 12.04%.
I went back to Yahoo for the opening price of Alphabet stock on 1/1/2013 and on 1/1/2023 and calculated the growth of the stock’s value.
goog←((date∆lillian 2012 1 1) ¯16.26 ) fin∆df∆add (date∆lillian 2023 1 1) 89.86 fin∆df∆irr goog .1 0.1552653407
Here I set up a date flow that assumes the purchase of stock on 1/1/2013 and its sale on 1/1/2023 and then calculate an annual return of 15.527%.
This certainly challenges my working hypothesis that a stock that pays no dividends is worthless. Had I bought Alphabet 10 years ago, I would have realized gains greater than the market, the holy grail of investing.
I then went to https://www.sec.gov/edgar/searchedgar/legacy/companysearch.html Public companies are required to register with the SEC and file detailed reports on their operations. The annual report is 10_K, which for GOOG I opened.
Page 1 had the first yellow flag. There are two classes of stock, A and C, registered with the SEC. I wondered about B. Page 2 is the table of contents with hyper links to various sections. I went to the financial statements and read the notes. Class A, 6015 shares, allow 1 vote per share. Class B, 893 shares, allow 10 votes per share and are not publicly traded. Class C, 6334 shares, have no voting rights. I read the equity footnote twice. It addresses the rights of the various shares and makes the case that they share equally on liquidation of the company. What happens should Alphabet declare a dividend was not clear.
In summary, the company is absolutely controlled by the holders of the class B shares who apparently are not interested in receiving dividends.
I looked at the rest of the financial statements and made my own estimate of free cash flow. That is, the cash generated from operations that could be used to pay dividends or repurchase stock.
In millions | |
---|---|
Cash from operations | 91495 |
Interest | 0 |
Stock based awards | ¯9300 |
—— | |
Adj cash from operations | 82195 |
Capital Expenditures | ¯31485 |
Debt Service | ¯1196 |
Dividends | 0 |
Stock purchases | ¯59296 |
—— | |
Free Cash | ¯9782 |
====== |
Not an encouraging picture. Alphabet is using its accumulated cash to buy back its stock. That suggests that the company can find no better investment.
High-growth companies do not pay dividends because they need every dollar of cash to support their growth. Clearly, Alphabet is no longer in this category, and it’s high time it shared the lolly. The promise of that growth suggests that the company can get higher returns from its operations than the stockholders can by reinvesting in other stocks.
I don’t think I’m changing my approach to zero dollar dividends.