Back to Community
Cash per Share, Debt to Equity and the Search for Free Money

All, has anyone used the fundamental data to calculate two ratios:

Cash (cash plus all that looks like cash, including short term securities, etc.) divided by diluted number of shares outstanding?
Total debt (including short term debt like accounts payable, and long term debt etc.) divided by equity?

The goal is to use these two factors in some fashion to find stocks trading below cash value, i.e. you would get paid with cash in bank if you took over, liquidated them and closed shop. Not that I am favoring closing shops.

All help is appreciated in advance.

27 responses

BT,

To clarify, a ratio of cash per share against company leverage? Basically what percentage of shareholder equity is liquid?

I don't think you are going to find any companies with more cash on hand than book equity. Not worth the cost of filing for a C-Corp.

EDIT: Also, check out "Current Assets" if you are trying to hone in on company liquidity.

Frank, yes, the goal is to find companies with negative enterprise value, which have cash per share greater than the stock price AND total outstanding debt to be zero or small, or extinguishable, so that after closing shop and extinguishing all debt, there is still money left for the "closer" or "raider". There are plenty of these companies, most are not worth touching with a 10 foot pole, or are untouchable (closely held, weird corporate bylaws prevent takeovers, etc etc) but I am interested how these negative enterprise value companies fare over varying periods of time.

Appreciate it.

Now I gotcha. Misread the first post. Here is a template that might at least provide a good basis for starting the effort.

Clone Algorithm
11
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 577bf454f3e37c0fb9b95ce2
There was a runtime error.

Thanks Frank, much appreciated! Will share the results when I am done.

Sounds good. I would suggest building some type of WACC factor to get a better appreciation for the liquidity of the company versus their existing leverage.

Frank thansk..one more question if you don't mind....what about equal weight rebalancing once per year, or once every 2 years?

BT,

confused....Rebalancing of what? The template I provided does not have any execution logic, it just identifies those companies within the top 4000 by market cap that have current assets greater than total liabilities per the morningstar data.

Frank totally understand, I am trying to trade (buy) all the securities which match the criteria at 1X leverage, then hold them for at least one year, then run the screener again and buy equal weight again at 1X leverage....would like to do it for 1-2-3-4-5 years, but not shorter periods of time....

BT

If you take care of the "hold for n days" implementation, I would be glad to handle the rest. I will send an updated template that goes long every month the stocks on the list, and dumps those falling off the list every month. We can go from there.

EDIT: Here is where I was going to get my start
https://www.quantopian.com/posts/exit-after-n-days

Results of a long only version are below...My conclusion is that there is no need to take on risk to obtain cash. Cash on the balance sheet will always be priced at a premium because it is part of a legal umbrella that also encompasses the income producing assets of the corporation, and provides a barrier of liquidity to the company. The day that corporations can sell cash at a premium to the price of cash from the US Mint is a scary day for all....What would be awesome is to get an better understanding of the currencies is which cash resides on the balance sheet without having to muddle through ~1,400 10-Ks.

  • One note of interest...a very steady decline in the quantity of top 4000 stocks (by market cap) with current assets in excess of total liabilities....
Clone Algorithm
11
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 577ca80121cbbb10a9cbe89f
There was a runtime error.

Frank, thank you for this effort! The goal is to figure out how cash heavy companies fare over longer period of time. You can see it as both a long and a short opportunity and here is why:

  1. Long thesis - there will always be plenty of Benjamin Graham wannabe hedge fund managers who are loking for "cash heavy takeover candidates" and who will start buying such shares, so if you buy before them, they will lift your own shares as well (you just need to be smart and unload on time).
  2. Short thesis - these are poorly managed companies, start ups, pharmaceuticals, etc. who burn cash, then raise cash, then burn it again, until such time comes where they can not raise any more capital and they go bust. This a very plausible proposition, and this is why I said above that you should not touch most of them with a 10 foot pole (but you can certainly short them if you can take the volatility)

So, whatever comes out of this could be interesting. The uninteresting result will be that it performs about the same as SPY but it is more volatile.....which will make the case I have been talking about: stay put with a broad ETF and sleep well....but again, that would be the most boring result.

Anyhow, I added a line for data.cantrade(stock) and I am running it since 2002, where the current assets cover total liabilities 15X. I will share the results when the backtest is done.

Again, thank you, and I will try to do the hold n-day implementation, but if it is not obvious that I am a Python tinkerer at best, then here, I am confirming that. I am a total noob to coding but I have great experience in finance and trading.

I am not having luck as it times out and it is issuing this error..."InterfaceError: connection already closed". It did run for 3 years max during one of my backtests and it was impressive...Not sure what can be done, as this timeout issue seems to persist for other users, from what I have seen.

Hi Frank, one question - is the scanning of fundamentals contemporraneous with the trading, or do we have a timing isue where the scanning is done on current fundamental data? Thanks!

OK, the caveat here is that I am not sure if the scanning of fundamentals contemporraneous with the trading, or if we have a timing isue where the scanning is done on current fundamental data....but here are the results.

Parameters changed:
Bottom 1000 by market cap (small stock bias, fewer issues to work with to avoid timeouts)
Current asets cover total liabitilities by 15X
2002 through present

All reviews, tweaks, feedback, criticism are welcome and appreciated, as I view this is a collaboration where I provided the finance theory idea, Frank coded the entire thing, and all of us can help improve it and critique it.

Clone Algorithm
8
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 577d0d0426c717121ae623c0
There was a runtime error.

BT,

Very cool... My understanding of pipeline is we get a scan of the fundamentals every day, but I could be wrong (and if so...I have wasted a lot of my time).

Lets just defer the exit after n days idea for a little bit while we continue to mess around with this idea.

Have you had a chance to look at the transaction logs and daily holding to get a feel for the liquidity of the tickers the algo is buying. Probably makes sense to start assessing execution assumptions with those kind of results.

Edit: Still have not looked at transaction logs, but I imagine bottom 1000 by market cap is going to require some serious consideration into the liquidity of the stocks getting filtered....but then again they do have a very liquid balance sheet.

BT,

Here is a failed tweak to the concept....The idea was to seek out cash heavy companies that also have a significant amount of gross deferred tax assets. The notion being that the section 382 limitation can be manipulated by bond holders or profitable acquiring entities for a one time boost in after tax free cash flow. Unfortunately I am getting NaN data from the morningstar set (see print logs). Something to keep the ball rolling....

Clone Algorithm
11
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 577d5d815eb16d0f8457a5ab
There was a runtime error.

BT

Looks like the algo bought MGT a few days before a massive spike in value in May of 16.

Frank, good idea on the tax deferred assets...might this restrict the set too much? I removed the zero transaction and slippage code, and defaulted to the Q pre-set ones, and the results are much different, disappointing. So, maybe in this algo, and with the small cap stocks, it is OK to move the market a bit when buying or selling, or to use some additional execution logic to buy several times during the day so as not to move the market too much.

Buying MGT is a good example of what this algo should be doing - I would not be surprised if the transaction data contains more of these trades (back to my earleir note, there is a bunch of hedgies or traders who are looking at this slice of equities, so it is no surprise that someone moved the market after the algo bought).

Clone Algorithm
1
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 577d68ebfccaa70f945c5684
There was a runtime error.

BT

I was going to expand the set in the tax idea by using only 5x cash to debt (Figured we can just keep going on tangents as we mess with the idea).

I would say a good next step is to expand the data set (5x cash or 10x cash), and then look for another means of filtering back down to a smaller set. Right now we are just comparing cash to debt. Maybe we start differentiating for stocks with large stocks of cash relative to both leverage and the balance sheet as a whole (which I think is getting closer to what you originally asserted in the first post).

Here is what I will attempt (and feel free to critique before I start to modify later this evening)....

Increase set by getting all companies with cash 5x greater than leverage. Then filter down to only those companies where the cash balance represents more than ~40% of total assets?

Frank, you read my mind - I am running with 5X current assets over total liabilities right now, for the top 500 companies by market cap. In essence, these are the S&P500 with the most liquid balance sheets. From what I see so far, the algo is picking up very few companies at 5X. I will share the results as soon as I am done.

I like your idea of comparing to leverage. The original idea was to to filter for stocks where cash per share is X times greater than share price, and at the same time that the companies have cash enough to satisfy all liabilities, buy all the shares and still have cash left over. In other words, cash > (market cap + total liabilities) . Both ideas make good economic sense, and are worth testing in my opinion.

Frank here are the results, but there is an error at the end, not sure I understand it....but the results are pretty good, even with default slippage and transaction costs. Thanks!

Clone Algorithm
6
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 577d7bef5eb16d0f8457a8e5
There was a runtime error.

BT,

I was running it with the top 4000, but the backtest was slow and a lot of orders were not getting filled. Here is the top 1000 for cash/share > share price:

  • thoughts to follow
Clone Algorithm
11
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 577ef451f621560f86767e0c
There was a runtime error.

...and the lowly results when we filter for companies that have more balance sheet liquidity than liabilities:

Clone Algorithm
11
Loading...
Backtest from to with initial capital
Total Returns
--
Alpha
--
Beta
--
Sharpe
--
Sortino
--
Max Drawdown
--
Benchmark Returns
--
Volatility
--
Returns 1 Month 3 Month 6 Month 12 Month
Alpha 1 Month 3 Month 6 Month 12 Month
Beta 1 Month 3 Month 6 Month 12 Month
Sharpe 1 Month 3 Month 6 Month 12 Month
Sortino 1 Month 3 Month 6 Month 12 Month
Volatility 1 Month 3 Month 6 Month 12 Month
Max Drawdown 1 Month 3 Month 6 Month 12 Month
# Backtest ID: 577f17cf2435fb0f8a20b119
There was a runtime error.

The question becomes how to chase these companies into the darkness of data that is the pink sheets...

Frank, hmmm, let me ponder this a bit, but you are right that these companies often need to be chased in the pink sheets.

BT,

More food for thought. Keeping Efficient Market Hypothesis in mind...If a company is more liquid on paper than the traded price of their shares, than there is likely some future event that is causing the market to discount the cash on the balance sheet...A litigation outcome, expiring patent...etc

At the end of the day, cash is the medium of exchange used to purchase shares, which come with a transaction cost (commission). Thus a strategy where cash is used to purchase cash is always going to be an uphill battle because why trade $100 worth of cash for $99.95 worth of shares that are invested in cash?

Frank, thanks for your note on this....the search for cash heavy companies with no debt is not that I would personally go there and shut them down, but that there will be plenty of people who will be t that SOMEONE might go there and press them to either employ that cash to good use, or give it to investors in a way of a special dividend or by closing shop. Anyway, it looks like cash per share is hard to compute for trading, since shares outstanding is not available for trading. Or am I missing something?