god*_*lla 2 python covariance quantitative-finance yahoo-finance
我有一些代码可以计算标准普尔500指数对任何股票的beta值 - 在这种情况下是股票代码"FET".然而,结果似乎与我在雅虎财经上看到的完全不同,历史上这股股票一直非常波动,这可以解释雅虎金融的1.55的beta值 - http://finance.yahoo.com/q?s =胎儿.有人可以告诉我为什么我看到一个完全不同的数字(0.0088)?提前致谢.
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)
Run Code Online (Sandbox Code Playgroud)
好的,所以我玩了一些代码,这就是我的意思.
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)
Run Code Online (Sandbox Code Playgroud)
价格的长度彼此不相等,因此存在问题#1.此外,当你执行的最后一行找到了cov矩阵的每个值的beta时,这可能不是你想要的.您不需要知道基于cov(0,0)和cov(1,1)的beta是什么,您只需要查看cov(0,1)或cov(1,0).那些是矩阵中的位置而不是值.
无论如何,这是我得到的答案:
The Beta for ^GSPC is: 0.885852632799
Run Code Online (Sandbox Code Playgroud)
*编辑*
使代码更易于运行,并对其进行了更改,因此只有一行用于输入您想从雅虎提取的股票.