Quantopian's community platform is shutting down. Please read this post for more information and download your code.
Back to Community
Trading with Benjamin Graham's formula - Fundamentals and bonds

The Benjamin Graham formula is a formula proposed by investor and professor of Columbia University, Benjamin Graham, often referred to as the "father of value investing"[1]. Published in his book, The Intelligent Investor, Graham devised the formula for lay investors to help them model growth formulas in vogue at the time of the formula's publication. - Wiki

Also I have combined with the bonds trading strategy from Chris Cain's recent post 'New Strategy - Presenting the “Quality Companies in an Uptrend” Model'

Formula : Graham = EPS * (8.5+2g)
Buy: Graham - Market Cap > 0
which is when the intrinsic value is great than current value

Flaws:
1. The period that I chose performed best, before or after doesn't look good.
2. As in the original book, g should be the 'reasonably expected 7 to 10 year growth rate', where I would use two years mean of revenue growth rate. Here, I do not know how to use past Fundamental data so I simply picked 'revenue_growth.last'

Possible improvements:
Use Revised formula: EPS * (8.5+2g) *4.4 / Y

Question: How to use Historical Fundamental Data?
As I searched in quantopian forum, the answer i found was its not available. Well, please, please let me know if you know how. Thanks!

5 responses

Simply leave out .latest in the factor inputs, choose a window of two years and compute the mean of revenue_growth. I assume the other values should be the most recent?
Here a backtest, the performance looks worse though...

@Tentor Testivis, Thanks a lot! Its interesting that it would perform worse, good learning experience though.

Performance metrics will be much worse if you include both market crashes in backtest.

@Vladimir, it doesn't perform that well in bad times. I might try adding a trending following strategy see if it will help.

I replaced your formula with the following code:
The idea I isolated the price from the basic equity value formula divided by the share.
equity value = enterprise value - debt
intrasic value = equity value / shares

class Intrinsic(CustomFactor):  
    inputs = [Fundamentals.enterprise_value,  
              Fundamentals.total_debt,  
              Fundamentals.shares_outstanding]  
    window_length = 260 # 252 trading days per year  
    def compute(self, today, assets, out, enterprise_value, total_debt, shares_outstanding):

        out[:] = ((enterprise_value[-1] - total_debt[-1] ) / shares_outstanding[-1] )  

However, the results are better but it is not glorious.