Introduction

The asset growth effect is based upon the reasoning that high asset growth stocks underperform stocks with low asset growth. Some papers suggest that the return premium achieved by low asset growth stocks is consistent with the compensation for risk. There are two popular arguments to suggest this return premium. One arguments is that as firms grow, the asset mix of the firm becomes less risky as assets-in-place displace the value of assets the firm's expected to invest in the future. The second argument is that there is a systematic market mispricing of growing businesses due to the extrapolation of past gains to growth for high asset growth companies.

This strategy will take a long position in low asset growth companies, and a short position in high asset growth accompanies. It is important to note that this strategy requires fundamental data from the current and past year to perform its analysis.

Method

The first step is coarse and fine universe selection. Using coarse selection, we create an investment universe with all non-financial U.S. stocks listed on NYSE, AMEX, and NASDAQ that contain fundamental data. The universes will be saved so that we can perform analysis on the annual changes of the total assets in the following year.

  1. def coarse_selection_function(self, coarse):
  2. if self.yearly_rebalance:
  3. filtered_coarse = [x.symbol for x in coarse if (x.has_fundamental_data)
  4. and (x.market == "usa")]
  5. return filtered_coarse
  6. else:
  7. return []
  8. def fine_selection_function(self, fine):
  9. if self.yearly_rebalance:
  10. fine = [x for x in fine if x.financial_statements.balance_sheet.total_assets.value > 0
  11. and ((x.security_reference.exchange_id == "NYS") or (x.security_reference.exchange_id == "NAS") or (x.security_reference.exchange_id == "ASE"))
  12. and (x.company_reference.industry_template_code!="B")
  13. and (x.company_reference.industry_template_code!="I")]
  14. if not self.previous_fine:
  15. self.previous_fine = fine
  16. self.yearly_rebalance = False
  17. return []
  18. else:
  19. self.filtered_fine = self.calculate(fine,self.previous_fine)
  20. sorted_filter = sorted(self.filtered_fine, key=lambda x: x.delta_assets)
  21. self.filtered_fine = [i.symbol for i in sorted_filter]
  22. self.previous_fine = fine
  23. return self.filtered_fine
  24. else:
  25. return []
+ Expand

During fine universe selection we take the stocks from the previous and current year and calculate their total asset growth. The stocks are then sorted in ascending order based upon the implemented calculation. Note that we account for size difference across the sample firms by scaling the growth by last year's total assets.

  1. def calculate(self, current, previous):
  2. growth = []
  3. for stock_data in current:
  4. try:
  5. prev_data = None
  6. for x in previous:
  7. if x.symbol == stock_data.symbol:
  8. prev_data = x
  9. break
  10. stock_data.delta_assets = (float(stock_data.financial_statements.balance_sheet.total_assets.value)-float(prev_data.financial_statements.balance_sheet.total_assets.value))/float(prev_data.financial_statements.balance_sheet.total_assets.value)
  11. growth.append(stock_data)
  12. except:
  13. pass
  14. return growth

In OnData(), we short top decile of the stocks in the sorted list and long the bottom decile of stocks. The portfolio is rebalanced every year at the end of June.



Reference

  1. Quantpedia - Asset Growth Effect

Author

Gurumeher Sawhney

August 2018