Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
Volatility Risk Metrics
import numpy
import numpy.random as nrand
def vol(returns):
# Return the standard deviation of returns
return numpy.std(returns)
def beta(returns, market):
# Create a matrix of [returns, market]
m = numpy.matrix([returns, market])
# Return the covariance of m divided by the standard deviation of the market returns
return numpy.cov(m)[0][1] / numpy.std(market)
# Example usage
r = nrand.uniform(-1, 1, 50)
m = nrand.uniform(-1, 1, 50)
print("vol =", vol(r))
print("beta =", beta(r, m))
@WilliamJosephKlubinski

This comment has been minimized.

Copy link

WilliamJosephKlubinski commented Dec 16, 2019

Hi Stuart,

In line 14: return numpy.cov(m)[0][1] / numpy.std(market) you should replace the .std with .var. The division in Beta is done with the variance of the market and not standard deviation. Thus, return numpy.cov(m)[0][1] / numpy.var(market)

In the current form, Beta is significantly affecting the results of the Treynor ratio.

PS. It can also be easily tested in Excel e.g. =COVARIANCE.P(range_of_the_fund,range_of_the_market)/VAR.P(range_of_the_market)

Hope it helps. Thanks
William Klubinski

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
You can’t perform that action at this time.