无论如何,是否可以从 Python 上的 Yahoo Finance DatasReader 计算 Market Beta?

Is there anyway to calculate Market Beta from Yahoo Finance DatasReader on Python?

我目前正在尝试从通过雅虎金融数据读取器获得的代码中获得市场贝塔值。我想知道是否有一种方法可以计算每个股票市场的 beta,并将其放入数据框中?

到目前为止,这是我的代码:

import pandas_datareader.data as pdr

Tickers=['SBUX','TLRY']

SD='2005-01-31'

ED='2018-12-31'

TickerW=pdr.datareader(Tickers,'yahoo',SD,ED)

TickerW.head()

好的,为了确保我们在同一页面上,我们使用此处市场贝塔的公式和定义:https://www.investopedia.com/terms/b/beta.asp

Beta = 协方差(股票 Returns,市场 Returns)/方差(市场 Returns)

所以首先,我们需要市场代码和股票代码。您在这里使用哪个股票代码在很大程度上取决于您要与哪个市场进行比较:整个股票市场?只是标准普尔 500 指数?也许其他一些国际股票指数?这里没有 100% 正确的答案,但一个很好的选择方法是考虑 "movers" 你的股票是谁,以及他们持有哪些其他股票。 (查看 Damodaran 的估值课程,如果你 google 可以在互联网上免费获得)。

所以现在您的问题变成了:如何计算股票的协方差和方差 returns?

首先,pandas 代码有很多信息。我们想要的是"Adjusted Close"。这是股票的每日收盘价,根据任何 "special" 事件(如股票拆分、反向拆分和股息)进行追溯调整。因为假设某只股票一天的交易价格为每股 1000 美元,但随后进行了 1 比 2 的股票拆分,所以现在不是 1 股 1000 美元,而是 2 股,每股 500 美元。在 "raw" 价格图表中,看起来好像您的股票在一天内损失了 50% 的价值,而实际上什么都没发生。调整后的收盘时间序列负责确保仅反映股票价值的 "real" 变化。

您可以通过调用 prices = TickerW['Adj. Close'] 或 yahoo finance 现在使用的任何密钥来获取它。通过查看 TickerW 数据框,您应该能够自己弄清楚:)

接下来,我们会将价格更改为 returns。那只是 prices.shift(1) / prices(或者反过来 :D 查阅文档并自己尝试)。 (书呆子注意:而不是这些 returns,使用对数 returns 在数学上更合理,因为它们具有某些合理的属性。如果你愿意,在 [= 周围扔一个 "log" 53=].

最后,我们现在有了一系列 returns(或日志 returns)。一组用于股票 returns,一组用于市场 returns(例如来自 SPY,用于标准普尔 500 指数)。现在我们只需要在 beta 的公式中使用它们。

好吧,去这里的方法就是做我刚刚做的事情:点击 google 获得 "pandas covariance between two series" 然后我们就可以到达 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.Series.cov.html

所以基本上,cov = stock_returns.cov(market_returns)var = market_returns.var 然后 beta = cov / var

我想这应该足以让您在路上发送信息。祝你好运。