beta 值是在 yahoo.finance 中计算的,我认为我可以节省时间,而不是通过方差等进行计算。beta 图表可以在股票图表下看到。我可以使用下面的代码提取收盘价和交易量:
import yfinance as yf
from yahoofinancials import YahooFinancials
df = yf.download('AAPL, MSFT',
start='2021-08-01',
end=date.today(),
progress=False)
adjusted_close=df['Adj Close'].reset_index()
volume=df['Volume'].reset_index()
但是如何才能像获取价格或交易量一样获取贝塔值呢?我正在寻找带有开始和结束日期的历史测试数据。
您可以批量执行此操作,使用
concat
而不是即将弃用的 append
# import yfinance
import yfinance as yf
# initialise with a df with the columns
df = pd.DataFrame(columns=['Stock','Beta','Marketcap'])
# here, symbol_sgx is the list of symbols (tickers) you would like to retrieve data of
# for instance, to retrieve information for DBS, UOB, and Singtel, use the following:
symbol_sgx = ['D05.SI', 'U11.SI','Z74.SI']
for stock in symbol_sgx:
ticker = yf.Ticker(stock)
info = ticker.info
beta = info.get('beta')
marketcap = info.get('marketCap')
df_temp = pd.DataFrame({'Stock':stock,'Beta':[beta],'Marketcap':[marketcap]})
df = pd.concat([df, df_temp], ignore_index=True)
# this line allows you to check that you retrieved the right information
df
info.get()
是比 info[]
更好的选择,后者有点问题;如果其中一个代码有错误(例如过时、除名),脚本将停止。如果您有很长的股票代码列表,并且您不知道哪个是错误的股票代码,这尤其令人烦恼。如果没有可用信息,info.get()
将继续运行。对于这些条目,您只需要后处理 df.dropna() 即可删除 NaN。
import yfinance as yf
# Get ticker data for SPLG
ticker = yf.Ticker("SPLG")
# Get beta value using the updated API
print(ticker.info.get("beta3Year"))
# Optional: View all available info fields
for key, value in ticker.info.items():
print(key, ":", value)
yfinance API 已更新,允许您使用:
ticker.info.get("beta3Year")
。
要探索股票代码的所有可用信息,您可以运行上面所示的循环,该循环将打印 info 属性中的所有键和值。