从 Alpha Vantage Api 获取股票数据的 Python 模块
项目描述
alpha_vantage
从 Alpha Vantage API 获取股票数据/加密货币的 Python 模块
Alpha Vantage 以简单的 json 或 pandas 格式为实时财务数据和最常用的财务指标提供免费 API。该模块实现了Alpha Vantage提供的免费 API 的 python 接口。它需要一个免费的 API 密钥,可以从http://www.alphavantage.co/support/#api-key请求。您可以查看其API 文档中提供的所有 API 调用。
对于 API 的无代码访问,您还可以考虑官方的Google Sheet Add-on或 Alpha Vantage 的Microsoft Excel Add-on。查看本指南,了解有关处理金融市场数据的一些常见技巧。
消息
- 从 2.3.0 版本开始,支持基本面数据和扩展盘中数据。
- 从 2.2.0 版开始,现在提供 asyncio 支持。请参阅下面的详细信息。
- 从 2.1.3 版开始,rapidAPI密钥集成现在可用。
- 从版本 2.1.0 开始,错误 API 调用的错误记录变得更加明显。
- 从 1.9.0 版本开始,urllib 被线程安全的 python 请求库取代。如果您有任何错误,请发布问题。
- 从 1.8.0 版本开始,数据帧的列名发生了变化,它们现在正是 alphavantage 在其 json 响应中返回的内容。您可以在以下 git repo 中更详细地查看示例: https ://github.com/RomelTorres/av_example
- 从 1.6.0 版本开始,pandas 被作为硬依赖项移除。
安装
要安装软件包,请使用:
pip install alpha_vantage
或者安装 pandas 支持,也只需安装 pandas:
pip install alpha_vantage pandas
如果要从源安装,请使用:
git clone https://github.com/RomelTorres/alpha_vantage.git
pip install -e alpha_vantage
用法
要从 API 获取数据,只需导入库并使用您的 API 密钥调用对象。接下来,为一些很棒的、免费的、实时的财务数据做好准备。您的 API 密钥也可能存储在环境变量ALPHAVANTAGE_API_KEY
中。
from alpha_vantage.timeseries import TimeSeries
ts = TimeSeries(key='YOUR_API_KEY')
# Get json object with the intraday data and another with the call's metadata
data, meta_data = ts.get_intraday('GOOGL')
您还可以从rapidAPI获得密钥。使用您的 rapidAPI 密钥作为密钥变量,并设置rapidapi=True
ts = TimeSeries(key='YOUR_API_KEY',rapidapi=True)
内部有一个重试计数器,可用于最大限度地减少连接错误(以防 API 无法及时响应),默认设置为 5,但可以根据需要增加或减少。
ts = TimeSeries(key='YOUR_API_KEY',retries='YOUR_RETRIES')
该库支持将其结果作为 json 字典(默认)、pandas 数据帧(如果已安装)或 csv,只需传递参数 output_format='pandas' 即可更改给定类中所有 API 调用的输出格式。请注意,某些 API 调用不支持 csv 格式(即ForeignExchange, SectorPerformances and TechIndicators
),因为 API 端点也不支持其调用的格式。
ts = TimeSeries(key='YOUR_API_KEY',output_format='pandas')
调用给出的 pandas 数据框可以具有日期字符串索引或整数索引(默认情况下索引为“日期”),根据您的需要,您可以同时使用两者。
# For the default date string index behavior
ts = TimeSeries(key='YOUR_API_KEY',output_format='pandas', indexing_type='date')
# For the default integer index behavior
ts = TimeSeries(key='YOUR_API_KEY',output_format='pandas', indexing_type='integer')
数据帧结构
数据帧结构由对 alpha vantage rest API 的调用给出。数据框的列名是由它们的数据结构给出的。例如,以下调用:
from alpha_vantage.timeseries import TimeSeries
from pprint import pprint
ts = TimeSeries(key='YOUR_API_KEY', output_format='pandas')
data, meta_data = ts.get_intraday(symbol='MSFT',interval='1min', outputsize='full')
pprint(data.head(2))
将导致:
数据的标头是从 Alpha Vantage 指定的(在以前的版本中,标头中的数字已被删除,但从长远来看,最好让数据与 Alpha Vantage 生成的数据完全相同。)
绘图
时间序列
使用 pandas 支持,我们可以很容易地绘制“MSFT”股票的分钟内价值:
from alpha_vantage.timeseries import TimeSeries
import matplotlib.pyplot as plt
ts = TimeSeries(key='YOUR_API_KEY', output_format='pandas')
data, meta_data = ts.get_intraday(symbol='MSFT',interval='1min', outputsize='full')
data['4. close'].plot()
plt.title('Intraday Times Series for the MSFT stock (1 min)')
plt.show()
给我们作为输出:
技术指标
就像我们可以让 pandas 绘制布林带® 等技术指标一样
from alpha_vantage.techindicators import TechIndicators
import matplotlib.pyplot as plt
ti = TechIndicators(key='YOUR_API_KEY', output_format='pandas')
data, meta_data = ti.get_bbands(symbol='MSFT', interval='60min', time_period=60)
data.plot()
plt.title('BBbands indicator for MSFT stock (60 min)')
plt.show()
给我们作为输出:
行业表现
我们也可以同样简单地绘制行业表现:
from alpha_vantage.sectorperformance import SectorPerformances
import matplotlib.pyplot as plt
sp = SectorPerformances(key='YOUR_API_KEY', output_format='pandas')
data, meta_data = sp.get_sector()
data['Rank A: Real-Time Performance'].plot(kind='bar')
plt.title('Real Time Performance (%) per Sector')
plt.tight_layout()
plt.grid()
plt.show()
给我们作为输出:
加密货币。
我们还可以绘制像 BTC 这样的加密货币价格:
from alpha_vantage.cryptocurrencies import CryptoCurrencies
import matplotlib.pyplot as plt
cc = CryptoCurrencies(key='YOUR_API_KEY', output_format='pandas')
data, meta_data = cc.get_digital_currency_daily(symbol='BTC', market='CNY')
data['4b. close (USD)'].plot()
plt.tight_layout()
plt.title('Daily close value for bitcoin (BTC)')
plt.grid()
plt.show()
给我们作为输出:
外汇 (FX)
外汇端点没有元数据,因此只能作为 json 格式和 pandas 使用(使用 'csv' 格式会引发错误)
from alpha_vantage.foreignexchange import ForeignExchange
from pprint import pprint
cc = ForeignExchange(key='YOUR_API_KEY')
# There is no metadata in this call
data, _ = cc.get_currency_exchange_rate(from_currency='BTC',to_currency='USD')
pprint(data)
给我们作为输出:
{
'1. From_Currency Code': 'BTC',
'2. From_Currency Name': 'Bitcoin',
'3. To_Currency Code': 'USD',
'4. To_Currency Name': 'United States Dollar',
'5. Exchange Rate': '5566.80500105',
'6. Last Refreshed': '2017-10-15 15:13:08',
'7. Time Zone': 'UTC'
}
异步支持
从 2.2.0 版开始,现在将提供 asyncio 支持。这仅适用于 python 版本 3.5+。如果您没有 3.5+,代码将中断。
语法很简单,只要用关键字标记你的方法async
,然后使用await
关键字。
这是一个用于异步获取多个符号的 for 循环示例。这极大地提高了具有多个 API 调用的程序的性能。
import asyncio
from alpha_vantage.async_support.timeseries import TimeSeries
symbols = ['AAPL', 'GOOG', 'TSLA', 'MSFT']
async def get_data(symbol):
ts = TimeSeries(key='YOUR_KEY_HERE')
data, _ = await ts.get_quote_endpoint(symbol)
await ts.close()
return data
loop = asyncio.get_event_loop()
tasks = [get_data(symbol) for symbol in symbols]
group1 = asyncio.gather(*tasks)
results = loop.run_until_complete(group1)
loop.close()
print(results)
我们写了一篇更深入的文章来为那些从未使用过但想了解异步、并发和多线程的人解释异步。在这里查看:您应该使用哪个:异步编程还是多线程?
例子
我在 python 笔记本中添加了一个包含示例的存储库,以更好地查看该库的用法:https ://github.com/RomelTorres/av_example
测试
为了运行测试,您必须首先导出您的 API 密钥,以便测试可以使用它来运行,测试还需要 pandas、mock 和 nose。
export API_KEY=YOUR_API_KEY
cd alpha_vantage
nosetests
文档
代码文档可以在https://alpha-vantage.readthedocs.io/en/latest/找到
贡献
贡献总是受欢迎的。只需联系我们,了解您可以如何做出最好的贡献、添加问题或进行 PR。
待办事项:
- 集成测试目前没有在 travis 中运行,必须修复它们才能运行。
- 也为 csv 调用添加测试。
- 添加不兼容参数引发错误的测试。
- Github 操作和问题页面中的其他项目。
接触:
您可以在以下任何平台上联系/关注 Alpha Vantage 团队:
- 松弛
- 推特:@alpha_vantage
- 中帕特里克
- 中型AlphaVantage
- 电子邮件:support@alphavantage.co
- 社区活动:https ://alphavhack.devpost.com/
喜欢就加星。
如果您喜欢或使用此项目,请考虑通过为它加星标来表示您的支持。
:委内瑞拉:-:de: