Python 获取金融数据
在 Python 中,要进行量化分析,需要先获取金融数据,Python 中有多个库可以用于获取金融市场数据。
本站实例演示用到的库为 yfinance。
安装如下:
pip install yfinance
yfinance 库使用 yf.download() 函数下载金融数据的函数。
以下是它的基本语法格式:
yf.download(tickers, start=None, end=None, actions=False, threads=True)
参数说明:
tickers:
- 说明: 要下载数据的股票、指数、基金等金融工具的代码。
- 类型: 字符串(单个代码)或列表(多个代码)。
- 示例: "AAPL"、["AAPL", "GOOGL"]。
start:
- 说明: 下载数据的开始日期。
- 类型: 字符串(日期格式:"YYYY-MM-DD")。
- 默认值: None,表示从可获取的最早日期开始。
- 示例: "2020-01-01"。
end:
- 说明: 下载数据的结束日期。
- 类型: 字符串(日期格式:"YYYY-MM-DD")。
- 默认值: None,表示到可获取的最新日期结束。
- 示例: "2022-01-01"。
actions:
- 说明: 是否包括股票分红、拆股等信息。
- 类型: 布尔值。
- 默认值: False。
- 示例:
actions=True
。
threads:
- 说明: 是否使用多线程下载数据。
- 类型: 布尔值。
- 默认值: True。
- 示例:
threads=False
。
在 yfinance 中,中国 A 股的股票代码需要加上交易所的后缀,上海证券交易所(SSE)的后缀是 .SS,深圳证券交易所(SZSE)的后缀是 .SZ。
以下是一个使用 yfinance 获取贵州茅台(600519.SS)股票数据的简单实例:
实例代码
# 上海证券交易所,茅台公司股票代码
symbol = "600519.SS"
# 或者,深圳证券交易所,泸州老窖公司股票代码
# luzhou_laojiao_szse = yf.Ticker('000568.SZ')
# 获取茅台公司股票数据
maotai_data = yf.download(symbol, start="2022-01-01", end="2023-11-01")
# 打印数据的前几行
print(maotai_data.head())
以上代码我们使用 yfinance 的 download 函数获取了贵州茅台(600519.SS)的股票数据,时间范围是从 2022 年 1 月 1 日到 2023 年 11 月 1 日。返回的数据是一个包含日期(Date)、开盘价(Open)、最高价(High)、最低价(Low)、收盘价(Close)、成交量(Volume)和调整后的收盘价(Adj Close)等信息的 Pandas DataFrame。
Pandas DataFrame 内容可以参考:Pandas 数据结构 - DataFrame
执行以上代码,输出结果如下:
# python3 mt.py [*********************100%%**********************] 1 of 1 completed Open High Low Close Adj Close Volume Date 2022-01-04 2055.00000 2068.949951 2014.000000 2051.229980 1973.508057 3384262 2022-01-05 2045.00000 2065.000000 2018.000000 2024.000000 1947.309937 2839551 2022-01-06 2022.01001 2036.000000 1938.510010 1982.219971 1907.112793 5179475 2022-01-07 1975.00000 1988.880005 1939.319946 1942.000000 1868.416870 2981669 2022-01-10 1928.01001 1977.000000 1917.550049 1966.000000 1891.507568 2962670
Ticker 类
yfinance Ticker 类 用于获取特定金融工具的信息和实时数据。
Ticker
类构造函数:
- 用法:
yf.Ticker('AAPL')
- 描述:创建一个
Ticker
对象,代表特定股票或金融资产。在括号内传入股票代码(例如:'AAPL')。
history
方法:
- 用法:
ticker.history(period='1d', interval='1m')
- 描述:获取历史价格数据。
period
参数指定时间跨度,可以是'1d'
(一天)、'1mo'
(一个月)、'1y'
(一年)等;interval
参数指定时间间隔,可以是'1m'
(一分钟)、'1d'
(一天)、'1wk'
(一周)等。
info
属性:
- 用法:
ticker.info
- 描述:获取有关股票的基本信息,如公司名称、行业、市值等。
dividends
属性:
- 用法:
ticker.dividends
- 描述:获取分红数据,返回一个包含日期和分红金额的 DataFrame。
splits
属性:
- 用法:
ticker.splits
- 描述:获取拆股数据,返回一个包含日期和拆股比例的 DataFrame。
recommendations
属性:
- 用法:
ticker.recommendations
- 描述:获取股票的推荐信息,返回一个包含日期和推荐信息的 DataFrame。
major_holders
属性:
- 用法:
ticker.major_holders
- 描述:获取股票的主要持有者信息,返回一个包含主要股东和其持股比例的 DataFrame。
sustainability
属性:
- 用法:
ticker.sustainability
- 描述:获取股票的可持续性信息,返回一个包含环境、社会和治理(ESG)指标的 DataFrame。
actions
属性:
- 用法:
ticker.actions
- 描述:获取股票的行动数据,包括拆股、分红等。
calendar
属性:
- 用法:
ticker.calendar
- 描述:获取公司的财务日历信息,如报告季度财报的日期等。
以下代码使用了 yfinance 库中的 Ticker 类来获取 Microsoft 公司(股票代码:MSFT)的股票信息,包括基本信息、历史市场数据、股利、拆股、财务报表等:
实例代码
# 创建 Ticker 对象,表示对 Microsoft 公司的股票数据进行操作
msft = yf.Ticker("MSFT")
# 获取所有的股票信息
msft.info
# 获取历史市场数据,这里是过去一个月的数据
hist = msft.history(period="1mo")
# 显示历史数据的元信息(需要先调用 history() 函数)
msft.history_metadata
# 显示公司行为信息(股利、拆股、资本收益)
msft.actions
msft.dividends
msft.splits
msft.capital_gains # 仅适用于共同基金和交易所交易基金(etfs)
# 显示股票股数
msft.get_shares_full(start="2022-01-01", end=None)
# 显示财务报表:
# - 收入表
msft.income_stmt
msft.quarterly_income_stmt
# - 资产负债表
msft.balance_sheet
msft.quarterly_balance_sheet
# - 现金流量表
msft.cashflow
msft.quarterly_cashflow
# 若要查看更多选项,请参考 `Ticker.get_income_stmt()`
# 显示股东信息
msft.major_holders
msft.institutional_holders
msft.mutualfund_holders
# 显示未来和历史的盈利日期,返回最多未来4个季度和过去8个季度的数据,默认情况下。
# 注意:如果需要更多信息,可以使用 msft.get_earnings_dates(limit=XX),其中 XX 为增加的限制参数。
msft.earnings_dates
# 显示国际证券识别码(ISIN) - *实验性功能*
# ISIN = International Securities Identification Number
msft.isin
# 显示期权到期日期
msft.options
# 显示新闻
msft.news
# 获取特定到期日的期权链
opt = msft.option_chain('YYYY-MM-DD')
# 数据可通过 opt.calls, opt.puts 获取
获取多个股票数据
以下代码使用 yfinance 库初始化了一个包含多个股票代码的 Tickers 对象,并通过该对象访问了不同股票的信息、历史数据和行为:
实例代码
# 初始化包含多个股票代码的 Tickers 对象
tickers = yf.Tickers('msft aapl goog')
# 使用示例,访问每个股票的信息
tickers.tickers['MSFT'].info # 获取 Microsoft 公司(MSFT)的基本信息
tickers.tickers['AAPL'].history(period="1mo") # 获取 Apple 公司(AAPL)过去一个月的历史数据
tickers.tickers['GOOG'].actions # 获取 Google 公司(GOOG)的行为信息(股利、拆股等)
下载历史数据
以下代码使用 yfinance 库下载了标普 500 ETF(SPY)和苹果公司(AAPL)过去一个月的历史市场数据:
实例代码
# 使用 yfinance 下载标普500 ETF(SPY)和苹果公司(AAPL)的历史市场数据
data = yf.download("SPY AAPL", period="1mo")
period="1mo" 参数表示下载的时间范围是过去一个月。
更多金融库
以下是一些主要用于获取金融数据的库:
yfinance
- 官方网站: yfinance
- 简介: yfinance 是一个用于获取Yahoo Finance数据的库。它提供简单的API,允许用户获取股票、指数等金融数据。
- 安装:
pip install yfinance
Tushare
- 官方网站: Tushare
- 简介: Tushare 是一个开放的金融数据平台,提供了丰富的股票、期货、基金等金融市场数据的接口。它支持Python,提供了易于使用的API。
- 安装:
pip install tushare
pandas-datareader
- 官方网站: pandas-datareader
- 简介: pandas-datareader 是一个从多个在线数据源(如Yahoo Finance、Google Finance等)获取金融数据的库。
- 安装:
pip install pandas-datareader
- 官方网站: baostock
baostock
- 官方网站: baostock
- 简介: baostock 是一个免费提供A股、港股、期权等金融数据的库。它提供了Python接口,方便用户获取数据。
- 安装:
pip install baostock
alpha_vantage
- 官方网站: alpha_vantage
- 简介: alpha_vantage 提供了一个简单的API,可以用来获取股票、外汇等金融数据。它还支持一些技术指标的计算。
- 安装:
pip install alpha_vantage
quandl
- 官方网站: Quandl
- 简介: Quandl 提供了来自各种来源的金融和经济数据。它提供了Python库,方便用户获取数据。
- 安装:
pip install quandl
ccxt
- 官方网站: ccxt
- 简介: ccxt 是一个用于交易和获取金融数据的开源库,支持多个交易所的数据获取。
- 安装:
pip install ccxt
AKShare
- 官方网站: AKShare
- 简介: AKShare 是基于 Python 的财经数据接口库,目的是实现对股票、期货、期权、基金、外汇、债券、指数、加密货币等金融产品的基本面数据、实时和历史行情数据、衍生数据从数据采集、数据清洗到数据落地的一套工具,主要用于学术研究目的。
- 安装:
pip install akshare