Search code examples
pythoncovarianceyahoo-financequantitative-finance

why is my beta different from yahoo finance?


I have some code which calculates the beta of the S&P 500 vs any stock - in this case the ticker symbol "FET". However the result seems to be completely different from what I am seeing on yahoo finance, historical this stock has been very volatile and that would explain the beta value of 1.55 on yahoo finance - http://finance.yahoo.com/q?s=fet. Can someone please advise as to why I am seeing a completely different number (0.0088)? Thanks in advance.

from pandas.io.data import DataReader
from datetime import datetime
from datetime import date
import numpy
import sys

today = date.today()

stock_one = DataReader('FET','yahoo',datetime(2009,1,1), today)
stock_two = DataReader('^GSPC','yahoo',stock_one['Adj Close'].keys()[0], today)


a = stock_one['Adj Close'].pct_change()
b = stock_two['Adj Close'].pct_change()

covariance = numpy.cov(a[1:],b[1:])[0][1]
variance = numpy.var(b[1:])

beta = covariance / variance

print 'beta value ' + str(beta)

Solution

  • Ok, so I played with the code a bit and this is what I have.

     from pandas.io.data import DataReader
    import pandas.io.data as web
    from datetime import datetime
    from datetime import date
    import numpy
    import sys
    
    start = datetime(2009, 1, 1)
    today = date.today()
    stock1 = 'AAPL'
    stock2 = '^GSPC'
    
    stocks = web.DataReader([stock1, stock2],'yahoo', start, today)
    # stock_two = DataReader('^GSPC','yahoo', start, today)
    
    a = stocks['Adj Close'].pct_change()
    
    covariance = a.cov() # Cov Matrix
    variance = a.var() # Of stock2 
    var = variance[stock2]
    
    cov = covariance.loc[stock2, stock1]
    
    beta = cov / var
    
    print "The Beta for %s is: " % (stock2), str(beta)
    

    The length of the prices did not equal each other, so there was problem #1. Also when your final line executed found the beta for every value of the cov matrix, which is probably not what you wanted. You don't need to know what the beta is based on cov(0,0) and cov(1,1), you just need to look at cov(0,1) or cov(1,0). Those are the positions in the matrix not the values.

    Anyway, here is the answer I got:

    The Beta for ^GSPC is:  0.885852632799
    

    * Edit *

    Made the code easier to run, and changed it so there is only one line for inputting what stocks you want to pull from Yahoo.