股市分析一直是一个非常有趣的工作,不仅对投资者,而且对分析专家也是如此。为了分析股票市场,需要有股票的历史数据。在过去,寻找历史数据是非常繁琐、耗时和昂贵的。随着金融技术(FinTech)的发展和普惠金融的趋势,现在网上有各种自由市场的数据来源。在这篇文章中,我们将讨论流行的python包,可以用来检索单个或多个股票的历史数据。我们将看到,只需几行代码,我们就可以在几秒钟内下载多年的数据。本文要介绍的python包如下。
将要讨论的包
- Pandas数据读取器
- 雅虎财经
- 12个数据
潘达斯数据读取器
我们要看到的第一个方法是用Pandas-DataReader来收集数据。Pandas 是一个用于数据分析和处理的Python库,是一个免费的来源。因此,Pandas-DataReader子包支持用户从各种互联网来源建立数据框架。它允许用户连接到一系列的来源,如Naver Finance、加拿大银行、Google Analytics、Kenneth French的数据存储库,以及在其文档中提到的另外16个这样的来源。 在连接之后,我们可以提取数据,并将其作为一个数据框架读入。
在依次检索任何股票价格或数据时,在大多数软件包中需要定义的某些参数是。
- 周期:收集数据的频率;常见的选择是'1d'(日),'1mo'(月),和'1y'(年)。
- 开始: 数据收集开始的日期。例如,'2015-5-25′。
- 结束:数据收集将完成的日期。例如,'2021-9-25'。
当你得到任何股票的输出值时,在大多数情况下,查询的输出是一个pandas数据框,这些数据框的字段描述如下:
- 开盘 :该日/月/年开始时的股票价格
- 收盘: 该日/月/年结束时的股票价格
- 高位:股票在那一天/月/年的最高价
- 低点:股票在那一天/月/年的最低价格
- 成交量:当天/月/年交易的股票数量
Pandas DataRedears本身不是一个数据源,而是PyData堆栈中的一个API,可以实现众多的数据源。顾名思义,数据将以pandas Dataframe的形式下载。完整的文件可以在这里找到。它目前支持的数据源列在下面。我们将只介绍其中的几个。
从Alpha Vantage获取数据
Alpha Vantage通过一套强大的、对开发者友好的API来提供企业级的金融市场数据。要设置这个环境,你需要有一个API密钥,它可以直接从这里的文档中获取。
## Alpha vintage
import pandas as pd
import pandas_datareader as pdr
ts = pdr.av.time_series.AVTimeSeriesReader('IBM', api_key=PUT_YOUR_API_KEY_HERE)
df = ts.read()
df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
# plotting the opening and closing value
df[['open','close']].plot()

下面是获得的数据框架的样子。

从FRED获取数据
联邦储备经济数据(FRED)数据库由圣路易斯联邦储备银行的研究部门管理,包含来自96个来源的超过765,000个经济时间序列。所有这些庞大的数据都可以通过DataReader API访问,只是在符号类别下,我们需要提到我们想要的数据的指标。指标可以在这里找到:
### Fred
import pandas_datareader as pdr
start = datetime(2021, 1, 1)
end = datetime(2021, 9, 30)
syms = ['IMPCH', 'IMPJP']
df = pd.DataFrame()
for sym in syms:
ts = pdr.fred.FredReader(sym, start=start, end=end)
df1 = ts.read()
df = pd.concat([df, df1], axis=1)
df
正如上面通过的,它显示了从日本和中国进口的交易类别:

雅虎金融
雅虎财经是雅虎网络的一个组成部分。它是美国最广泛使用的商业新闻网站,提供股票报价、新闻公告、财务报告和原创内容,以及金融新闻、数据和评论。他们提供加密货币、法定货币、商品期货、股票和债券的市场数据,基本面和期权数据,市场分析和新闻。

上面的图片是雅虎财经的网页界面,上面有不同加密货币的市场状态。为了检索这些数据,雅虎财经有其专门的工具,称为yfinance。它真的很简单和直接,因为你将通过下面的API,在这个API下,你只需要改变符号(上图中最左边一栏 ) 。
!pip install yfinance
import yfinance as yf
import matplotlib.pyplot as plt
data = yf.download('BTC-USD','2021-01-01','2021-09-30')
data.head()

此外,我们还可以将多个交易考虑在内,如下图所示:
data = yf.download(['BTC-USD','AMD'],'2021-01-01','2021-09-30')
data["Close"].plot()
plt.show()

十二数据
Twelve Data创建于2009年,最近获得了很大的发展。以下是他们提供的服务的主要内容:
- 实时和历史数据的API访问
- 创建动态图表
- 大型技术指标(100以上)
- 使用WebSockets进行报价流
TwelveData项目的主要目的是提供一个单一的位置,所有的Pythonistas都可以在这里快速获得所有金融市场的信息,只需几行代码就可以对其进行分析。
我们必须首先在他们的 网站上注册,并获得我们的API KEY,就像我们在Alpha Vantage所做的一样。
使用十二个数据,我们将查询微软公司的股票价格,同时我们将绘制一个交互式Plotly仪表盘:
!pip install twelvedata[pandas,matplotlib,plotly]
!pip install websocket_client
from twelvedata import TDClient
# Initialize client
td = TDClient(apikey="PUT_YOUR_API_KEY_HERE")
# Construct the necessary time serie
ts = td.time_series(
symbol="MSFT",
interval="1min",
outputsize=500,)
# returns Plotly dash
ts.as_plotly_figure().show()

最后一句话
正如我们所看到的,有许多方法可以获得历史股票数据。我们不仅看到了许多数据提供者,还看到了如何使用Python的标准API从他们那里提取数据。如前所述,获得高质量的历史数据对于回测你的交易技术至关重要。这些数据供应商有免费的也有付费的。在这篇文章中,我们看了三个免费的历史金融数据源。Pandas DataReader,Yahoo Finance,以及涵盖股票,利率,外汇,加密货币和商品的Twelve Data。