Exponentially weighted returns and risk
In this exercise, you're going to perform portfolio optimization with a slightly different way of estimating risk and returns; you're going to give more weight to recent data in the optimization.
This is a smart way to deal with stock data that is typically non-stationary, i.e., when the distribution changes over time. Implementation can be quickly done by changing the risk model you use to calculate Sigma
, and the returns calculation you use to get mu
. The stock prices dataset is available as stock_prices
. Let's try!
This exercise is part of the course
Introduction to Portfolio Analysis in Python
Exercise instructions
- Use the exponential weighted covariance matrix from
risk_models
and exponential weighted historical returns function fromexpected_returns
to calculateSigma
andmu
. Set the span to 180 and the frequency (i.e. the trading days) to 252. - Calculate the efficient frontier with the new
mu
andSigma
. - Calculate the weights for the maximum Sharpe ratio portfolio.
- Get the performance report.
Hands-on interactive exercise
Have a go at this exercise by completing this sample code.
# Define exponentially weightedSigma and mu using stock_prices
Sigma = risk_models.____(____, span=____, frequency=____)
mu = expected_returns.____(____, frequency=____, span=____)
# Calculate the efficient frontier
ef = ____(____, ____)
# Calculate weights for the maximum sharpe ratio optimization
raw_weights_maxsharpe = ____.____()
# Show portfolio performance
ef.____(verbose=True)