Skip to main content

从 Alpha Vantage Api 获取股票数据的 Python 模块

项目描述

alpha_vantage

构建状态 PyPI 版本 文件状态 解决问题的平均时间 未解决问题的百分比

从 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 团队:

喜欢就加星。

如果您喜欢或使用此项目,请考虑通过为它加星标来表示您的支持。

:委内瑞拉:-:de:

项目详情