IEX股市数据处理包

IEXTools的Python项目详细描述


iextools

0.0.6伏

这个包提供了处理iex的rest api提供的数据的工具,以及解码和使用iex二进制市场数据(称为"hist")的工具。有关IEX提供的数据类型的更多信息,请访问他们的网站:https://iextrading.com/developer/docshttps://iextrading.com/trading/market data/

该模块的文档位于readthedocs.io上:https://iextools.readthedocs.io/en/latest/" rel="nofollow">https://iextools.readthedocs.io/en/latest/

免责声明

此存储库的作者和贡献者与iex没有任何关联。本规范按原样提供,无任何保证或保证。由于编程错误或IEX的更改,此软件包在任何时候都可能无法工作。

此软件包正在积极开发中,可能会定期更改。

执行摘要

投资者交易所(IEX)由Brad Katsuyama于2012年成立,旨在对抗高频交易对其他证券交易所的影响。iex的故事是由michael lewis在他的书《快男孩》中出名的。

此软件包旨在提供各种工具来处理IEX提供的库存数据,例如:

  1. iex hist二进制数据馈送文件,可通过iex免费获得。这些文件包含股票的纳秒精度信息,如交易和报价。
  2. IEX Rest API提供大量数据,如股票的实时价格信息。

安装

注意:如果没有Python3.7或更高版本,这两种安装方法都将失败。

从pypi安装:

$ py -m pip install IEXTools

导航到包含readme.md文件的文件夹并运行pip命令以安装包:

$ pip install .

要求

  • python 3.7或更高版本
  • 请求

用法

Web API

目的:与iex web api交互。所有方法都返回python字典。

web api有大量的端点返回数据:

>>>fromIEXToolsimportIEXAPI>>>api=IEXAPI()>>>meths=[dfordindir(api)ifnotd.startswith('_')]>>>fori,j,kinzip(meths[::3],meths[1::3],meths[2::3]):...print(i.ljust(20),j.ljust(20),k.ljust(20))...BASEbatchbookchartcollectionscompanycryptodeepdeep_bookdeep_tradesdelayed_quotedividendsearningsearnings_todayeffective_spreadfinancialshistiex_auctioniex_corp_actionsiex_dividendsiex_historicaliex_historical_dailyiex_next_day_ex_diviex_official_priceiex_short_interestiex_stats_intradayiex_stats_recentiex_stats_recordsiex_symbolsiex_threshold_securitieslargest_tradeslastlogomarketnewsohlcoperational_haltpeerspreviouspricequoterelevantsector_performancesecurity_eventshort_sale_price_test_statussplitsstatsstock_listsymbolssystem_eventtimeouttimeseriestoday_ipostopstrade_breaktrading_statusupcoming_ipos

用户应查阅给定函数的docstrings或iex的docs,以获取有关如何使用给定端点的其他信息。IEX API文档中记录的所有端点都在这个类中实现。

>>>help(api.ohlc)HelponmethodohlcinmoduleIEX_API:ohlc(symbol:str)->dictmethodofIEX_API.IEX_APIinstanceReturnstheopen,high,low,andclosepricesforagivencompany.https://iextrading.com/developer/docs/#ohlc>>>apple_ohlc=api.ohlc('aapl')>>>print(IEX_API.pretty_json(apple_ohlc)){"close":{"price":204.47,"time":1541797200568},"high":206.01,"low":202.25,"open":{"price":205.55,"time":1541773800180}}

可以使用符号方法检索api上可用的所有符号:

>>>all_symbols=api.symbols()>>>len(all_symbols)8756>>>api.symbols()[1]{'symbol':'AA','name':'Alcoa Corporation','date':'2018-11-09','isEnabled':True,'type':'cs','iexId':'12042'}

下载程序

目的:下载IEX的包含纳秒精度股票数据的PCAP文件,即所谓的HIST文件。

只需调用类,就可以在没有任何参数的情况下实例化datadownloader类。

d1=IEXTools.DataDownloader()

此类中有三种可用方法:

>>>print([methodformethodindir(IEXTools.DataDownloader)ifnotmethod.startswith('_')])['decompress','download','download_decompressed']
  • 下载:下载给定日期时间输入的gziped tops或deep文件
  • 解压缩:将压缩的hist文件解压缩到pcap中
  • 下载解压缩:下载并解压缩hist文件-删除末尾的压缩文件

警告,iex hist文件通常非常大(多gbs)

用法:

>>>importIEXTools>>>fromdatetimeimportdatetime>>>d1=IEXTools.DataDownloader()>>>d1.download_decompressed(datetime(2018,7,13),feed_type='tops')'20180713_IEXTP1_TOPS1.6.pcap'

分析器

目的:解析iex提供的二进制pcap/hist文件。

要创建解析器对象,只需提供文件路径作为参数。请注意,如果使用1.5版tops文件,则实例化时必须将tops_version参数设置为1.5

>>>fromIEXToolsimportParser,messages>>>p=Parser(r'IEX TOPS Sample\20180103_IEXTP1_TOPS1.6.pcap')>>>pParser("IEX TOPS Sample\\20180103_IEXTP1_TOPS1.6.pcap",tops=True,deep=False)

这将实例化打开pcap文件的解析器对象。您还可以选择指定要加载的hist文件类型,是tops(tops=true)还是deep(deep=true)。

使用parser对象的get_next_message方法返回消息对象。消息obobject记录在messages.py模块中。您可以选择指定一个消息类列表,以将返回的消息仅限于这些类型。

$ py -m pip install IEXTools
0

最后检索到的消息也可以通过parser对象本身使用message属性进行访问。类似地,消息类型可以作为parser.message_type访问,二进制编码的消息可以通过parser.message_binary访问。消息对象还具有几个可访问的属性(因对象而异)。

$ py -m pip install IEXTools
1

该程序还允许您将其与上下文管理器一起使用,并像文件一样循环:

$ py -m pip install IEXTools
2

基准: 在我的个人笔记本电脑上(联想Thinkpad x1 Carbon,Windows 10):

$ py -m pip install IEXTools
3

通过不指定allowed参数,解析器返回1000000条解析消息的速度大约快3%。但是,为了返回1000000条已解析的消息,设置了allowed参数的解析器可能必须读取超过1000000条消息。测试表明,实际解码消息需要10微秒(每秒130000条消息)。

外部参考

讨论

专业人士

历史记录

  • 这是IEX免费提供的逐点历史数据-其他交易所通常会收取大量费用以获取类似数据

API

  • iex web api提供了大量数据,并且具有非常高的速率限制

缺点

历史记录

  • 有些人说,与其他大型交易所相比,iex处理的数据量较低,因此iex的数据质量可能较低(不确定这实际上有多有效)
  • 不确定如何维护这些数据(如果有的话)
  • 此数据的未来可用性无法保证,IEX可能会选择在未来支付此数据的费用
  • 数据未经调整,因此需要手动调整才能在回测引擎中使用

API

  • 看来v1 api将在2019年上半年被弃用,不再作为免费服务提供
  • 数据中似乎有许多不准确之处(从github上的问题回顾页面可以看出)

问题

  1. 问:历史数据是否针对股息、分割等进行了调整?如果是,多久一次?A:不,历史数据只是实时二进制交易流的保存版本-未经调整。
  2. 问:在访问数据之前,我是否需要填写并提交数据协议?答:根据iex api维护人员的说法,访问历史数据不需要这样做
  3. 问:这些数据是否仍然免费?答:似乎有计划在2019年将web api货币化,不过会提供一个免费的层计划。hist数据的命运尚未泄露。

发行说明

0.0.1

  • 解析器类-允许对hist二进制数据进行解码
  • 消息定义的对象-tops中定义的每个iex消息类型现在都有一个关联的python对象

0.0.2

  • datadownloader类:允许用户下载指定的hist文件>
  • 易于pip安装的包装
  • parser对象添加了上下文管理器和迭代支持
  • 增加了打字支持
  • 增加了一些测试覆盖率(仍需改进)

0.0.3

  • 错误修复:typealiases文件中所有消息的循环导入问题
  • 安全:由于漏洞,已将请求库升级到2.20.0
  • iex api类:允许用户访问iex rest api v1的所有端点
  • iexapi类添加了测试

0.0.4

  • 添加文档(通过Sphinx)

0.0.5

  • 增加了对1.5版TOPS文件的支持
  • 由于存在漏洞,Requirements.txt中更新了urllib3版本

0.0.6

  • 修正了问题7中出现的错误

未来焦点

  • 附加测试
  • 查看键入功能

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java Requestcontextholder在spring 4中具有并发访问权限。IBMWebSphere上的x Web应用程序?   java如何下载、设置和使用Eclipse?   java如何组合这些mysql语句   java JDBC无法连接到openshift上的mysql数据库   如果存在允许正确处理的重载,java对于方便的方法来说是否可行?   使用hibernate序列的java Spring MVC不存在   具有路径的java Selenium ChromeDriver负载扩展问题   读一本书。java中的java文件   退出队列时,Java队列程序结果为空   Java lambda返回带有重复代码问题的列表   java使用意图从其他活动传递数据并在listview中显示   java如何在java中创建JSON输出   java Android:在不破坏或暂停活动的情况下关闭显示   支持Android电视和手机的java多apk   关于Java应用程序测试和调试的一组问题   如何在JavaSE中使用jdbcRealmShiro进行授权   在java中是否有一个无异常检查的URL解析实用程序?   当页面上有多个相同类型的元素时,java会选择一个特定的元素   递归需要帮助发现java代码中的缺陷