Awhile ago I said that I was putting together an “Aswath” collection of utilities on github to value companies using methods suggested by Prof Damodaran. Work is still ongoing, very scrappy, and mostly indecipherable to an outsiders. One part of it is his much simpler model for 3M. Whilst still not complete, I had written a Fortran program that computes part of it. Although the model is designed for using firm valuations, I thought it would make a good first approximation for equity. The 3M model is much simpler than his model for high-growth companies that might have different phases for revenues growth, losses, and so forth.
The necessary programs are available on github, but I’ll save you the trouble of hunting it down, and present the fortran program that does the calculations:
PROGRAM mmm implicit none !real, parameter:: rf = 0.0295, beta = 0.2114, erp = 0.0791 real :: rf , erp real :: beta real :: roe, dcov real :: eps0 !real, parameter :: roe = 0.1968, dcov = 2.1, eps0 = 8.98 !real omega, rho !real a0, theta1, g1, h1 ! sensible defaults !real, parameter:: n = 5.0 integer :: n character :: dummy ! intermediate calculations real :: theta1, g1 real :: gt, r integer :: i real ct real p1, pt0, p0 real :: h1 real :: divs(1:100) ! dividends read (*,*) dummy read (*,*) roe read (*,*) dcov read (*,*) beta read (*,*) rf read (*,*) erp read (*,*) eps0 read (*,*) n theta1 = 1-1/dcov g1 = roe *theta1 ! set these intitial values !beta = 0.2114 !beta = 1.2 h1 = rf + beta * erp print *, 'g1', g1 r = (1+g1)/(1+h1) print *, 'r', r, 1/r do i = 1, n divs(i) = eps0 * r ** real(i) * (1-theta1) print *, divs(i) end do print *, 'p1: sum of divs 1:n', sum(divs(1:5)) ! should equal p1 p1 = eps0 *(1-theta1)*r * (1-r**n)/(1-r) gt = rf ct = rf + erp pt0 = eps0 * r**n * (1+gt)/ct ! calculate pt0 the hard way !div(n) = div(n-1) / (1-theta1) * (1-gt/ct) !for i = int(n)+1, 100 ! divs(i) = divs(i-1) * p0 = p1+pt0 print *, 'p1', p1, 'pt0', pt0, 'p0', p0 !data rf, beta, erp / 0.0295, 0.2114, 0.0791/ !data omega, rho / 2.1, 0.01968/ !data n / 5.0/ !a0, theta1, g1, h1, end program
It is a simple two-phase growth model. Admittedly, the program is very scrappy at the moment, so I hope you can follow it. It is standard Fortran (90?), and ought to compile on any standard compiler. It has compiled using the free GFortran compiler. Linux and Cygwin users should have no trouble getting it working.
Here’s the input file, which you can redirect to the executable you create:
MMM MODEL 0.14 ROE 8.9 DCOV 1.0 BETA 0.0295 RF 0.0496 ERP 21.4 EPS0 5 N dated 30-jun-2014
Run that, and you get a valuation of 355.52 – the last number that pops out of the program. A note about the numbers:
- N is the number of years that the growth phase will continue, before reverting to market returns. Using the value 5 is a very good default
- ROE is return on equity during the growth phase. Stockopedia is reporting its ROE at 23.8% at the moment, but I’ve used a decade mean of 14%
- DCOV is the dividend cover. I’m using 8.9, which is around about both the current and decade mean.
- BETA is the beta of the stock. Quite tricky, because Aswath is publishing betas of 0.94 for air transport, Digital Look has a beta for DTG at 0.83. So maybe you’ll want to re-run the program using a lower beta. I’ve used a beta of 1, nice and simple
- RF is the risk-free rate, which I’ve used from Jan 2014
- ERP is the equity risk premium, which I’ve obtained by fiddling with Damodaran’s figures. They are computed or Jan 2014, as per RF
- EPS0 is the current earnings per share, which I have taken from Stockopedia.
There are a number of other assumptions, like retention rates in the terminal phase, which don’t need to be specified. I’m writing some documentation, which should eventually appear on my github repo, and this will explain how these kinds of numbers can be obtained, and exactly how the DCF valuation model works.
I’m actually becoming quite a bit more keen on Damodaran’s work, because it allows you come up with an actual valuation, and incorporate growth assumptions, which I think is something value investors will have a hard time doing ordinarily.
Anyway, DTG is taking a hit today, which is inconvenient for me, as I am a holder. Stockopedia has a stock rank of 97, which is obviously very good. Checking another site, I see that valuation ranks are consistent, which is nice to see. It’s also rebounding from being oversold. So hopefully this augers well. Incidentally, I’ve been doing some superficial scanning around on stocks that are cheap and oversold, and I think that it could make for a very interesting article. Just to give you a for-instance, if you had bought PIC (Pace) on 31 May 2011 after the massive sell-off, the RSI dipped to 21.4, and you could have bought at a price of around 94p. You would have needed nerves of steel, because the share price did dip to about 45p. Still, if you had kept the faith, you would had a return of about 55% pa for 3 years (that’s compounded, not arithmetically, and I am talking approximate). So doing some valuation work, looking for good value, and buying when the shares are way oversold can bring exceptional returns. All that is for another article, though.
Share price 207p, Valuation 355p.