Skip to content

Instantly share code, notes, and snippets.

@StuartGordonReid
Created June 12, 2015 11:33
Show Gist options
  • Save StuartGordonReid/075d2cbddc46ca6c8e3c to your computer and use it in GitHub Desktop.
Save StuartGordonReid/075d2cbddc46ca6c8e3c to your computer and use it in GitHub Desktop.
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))
@unterseeboot88
Copy link

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