Skip to content
All library documents

Black–Litterman Weights, Covariance Inversion, and Return History

Article Quant Q&A · Author: Scorpion Haven

Summary

The document describes a Black–Litterman portfolio calculation in which market weights and a covariance matrix are used to derive implied returns, then inverted to recover weights. The questioner reports implausibly large recovered weights for an ASX 200 subset using five years of monthly observations. A response points out that covariance matrices can be non-invertible or fail to be positive semi-definite; in that case, a Moore–Penrose pseudoinverse may be an alternative to an ordinary inverse.

The follow-up reports that using three years of weekly returns resolved the data-history issue for the matrix dimension in that case. It also raises the concern that the volatile 2007–2012 period affected estimated standard deviations. The exchange does not establish that market instability was the cause of the initial weights, nor does it provide a general procedure for covariance estimation or risk adjustment. Its practical lessons are to check matrix dimensions and invertibility, and to treat results as sensitive to the return sample and frequency.

Key ideas

  • Black–Litterman implied weights depend on the covariance matrix and return inputs.
  • Check that the return history provides enough observations for the covariance estimation problem.
  • A Moore–Penrose pseudoinverse can be considered when a covariance matrix is not invertible.
  • Estimated risk can be sensitive to the sample period and observation frequency.
  • The reported resolution is specific to the questioner’s calculation and does not identify every cause of extreme weights.

Tags

Full text
# Black-Litterman model - Unable to obtain correct implied weight from implied returns


# Black-Litterman model - Unable to obtain correct implied weight from implied returns












I'm using Excel 2016 to analyse the ASX200 at June 2012. Out of the ASX200 index, I've found 136 stocks with 5-yr of monthly stock close price data (01 July 2007 - 30 June 2012). I generated monthly returns, COVAR matrix and annualised COVAR matrix.

I don't understand why I have been unable to obtain the BL-generated implied weight from the BL-generated implied returns for the 136 stocks. The BL-generated implied weight should be equal to the adjusted market weight as the latter was used as input. The BL-generated implied weight included (+_) several hundred % which is invalid.

Application of the same process worked previously on 34-stock for another period.

BL-generated implied returns equation:

=(MMULT(COVARM2,TRANSPOSE(D3:EI3))*(D144-D145)/MMULT(D3:EI3,MMULT(COVARM2,TRANSPOSE(D3:EI3))))+D145

Where: a. COVARM2 is the annualised COVAR matrix b. D3:EI3 is the adjusted market weight adding to 100% c. D144 is the Benchmark Return d. D145 is the RF Rate

BL-generated implied Weight equation: = MMULT(MINVERSE(COVARM2),F149:F284-D145)/SUM(MMULT(MINVERSE(COVARM2),F149:F284-D145)) Where: a. F149:F284 is the Implied Returns

A potential explanation is the 5-year of monthly data covered from 01 July 2007 - 30 June 2012 an that period included significant market instability. The COVAR matrix could be incorrect as the market over the mentioned period was not an equilibrium state. Please let me know if you have come across this problem before, potential resolution, and/or if I've made an error. I can send you the spreadsheet if that makes it easier for you to review my query. Thank you for your time in advance.

## Answer by Kareem Sayed (score 1)

https://quant.stackexchange.com/a/64155

This is a good resource for calculation of BL in Python, personally I find that Excel isn't great for this sort of thing.

https://medium.com/analytics-vidhya/black-litterman-model-for-asset-allocation-for-top-20-indian-companies-by-market-capitalization-c9fcbd362d72

Also when calculating inverses of Cov Matrices, you may occasionally run into the issue where your Matrix is not invertible as it is not positive semi-definite, in this case the Moore-Penrose pseudo-inverse is a good alternative.

## Answer by Scorpion Haven (score 0)

https://quant.stackexchange.com/a/57607

Thank you for your prompt response.

A 139x139 COVAR matrix requires at least 139 rows of returns. Three years of weekly returns data has resolved this issue.

Totally agree with you that the wild swings in the period 2007-2012 adversely impacted the annualised Stdev. I am aware that it's common practice to use 5-yr of monthly returns data or 2-yr of weekly returns data for BL analysis. As the wild swings adversely affect the Stdev, I wonder if professionals use tools to adjust/standardise the observed Stdev or use as is and apply the CML and Efficient Frontier as a snapshot in time until the next rebalance/check-in point.

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.