Strategy Library

Book-to-Market Value Anomaly

Introduction

Book-to-market ratio is used to find the value of a company by comparing the book value of a firm to its market value. The definition of the book-to-market ratio is \[Book\ to\ Market \ Ratio=\frac{Common\ Shareholders \ Equity}{Market \ Cap}=\frac{book \ value \ per \ share}{Market \ price \ per \ share}\] Book value represents a company's assets minus its liabilities and sometimes is referred to as shareholders' equity. Price-to-Book Ratio is defined as \[Price \ to \ Book\ Ratio=\frac{Market \ price \ per \ share}{book \ value \ per \ share}\] Therefore, we can see the Book-to-market ratio is the inverse of the P/B ratio. The book-to-market ratio suggests how much investors are paying against each dollar of book value in the balance sheet. The bigger the ratio is, the more fundamentally cheap is the investigated company. This algorithm will create the portfolio with this factor.

Method

To construct the universe, first we eliminate stocks which don't have fundmental data. In FineSelectionFunction, we calculate the market cap with PE ratio, earning per shares and shares outstanding and assign the property MarketCap to each fine fundamental object. The universe is narrowed to top 20% companies with the highest market cap.

According to the algorithm, the portfolio is weighted based on market cap. We calculate the weight in FineSelectionFunction and save them in self.weights.

fine = [x for x in fine if (x.ValuationRatios.PBRatio > 0)]
for i in fine:
    i.MarketCap = float(i.EarningReports.BasicAverageShares.ThreeMonths * (i.EarningReports.BasicEPS.TwelveMonths*i.ValuationRatios.PERatio))
top_market_cap = sorted(fine, key = lambda x:x.MarketCap, reverse=True)[:int(len(fine)*0.2)]
top_bm = sorted(top_market_cap, key = lambda x: 1 / x.ValuationRatios.PBRatio, reverse=True)[:int(len(top_market_cap)*0.2)]
self.sorted_by_bm = [i.Symbol for i in top_bm]
total_market_cap = np.sum([i.MarketCap for i in top_bm])
self.weights = {}
for i in top_bm:
    self.weights[str(i.Symbol)] = i.MarketCap/total_market_cap
return self.sorted_by_bm

In the next step, we sort the stocks with the inverse of P/B ratio by descending order. Quintile portfolios are then formed based on the Book-to-Market ratio and the highest quintile is held for one year.

Algorithm

You can also see our Documentation and Videos. You can also get in touch with us via Chat.

Did you find this page Helpful ?