IEX股市数据处理包
IEXTools的Python项目详细描述
iextools
0.0.6伏
这个包提供了处理iex的rest api提供的数据的工具,以及解码和使用iex二进制市场数据(称为"hist")的工具。有关IEX提供的数据类型的更多信息,请访问他们的网站:https://iextrading.com/developer/docs和https://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提供的库存数据,例如:
- iex hist二进制数据馈送文件,可通过iex免费获得。这些文件包含股票的纳秒精度信息,如交易和报价。
- 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 IEXTools0
最后检索到的消息也可以通过parser对象本身使用message
属性进行访问。类似地,消息类型可以作为parser.message_type访问,二进制编码的消息可以通过parser.message_binary访问。消息对象还具有几个可访问的属性(因对象而异)。
$ py -m pip install IEXTools1
该程序还允许您将其与上下文管理器一起使用,并像文件一样循环:
$ py -m pip install IEXTools2
基准: 在我的个人笔记本电脑上(联想Thinkpad x1 Carbon,Windows 10):
$ py -m pip install IEXTools3
通过不指定allowed
参数,解析器返回1000000条解析消息的速度大约快3%。但是,为了返回1000000条已解析的消息,设置了allowed
参数的解析器可能必须读取超过1000000条消息。测试表明,实际解码消息需要10微秒(每秒130000条消息)。
外部参考
- 历史数据下载页面:https://iextrading.com/trading/market data/历史数据下载
- IEX传输协议文档:https://iextrading.com/docs/iex%20transport%20specification.pdf" rel="nofollow">https://iextrading.com/docs/iex%20transport%20specification.pdf
- IEX TOPS文档:https://iextrading.com/docs/iex%20tops%20specification.pdf
- API文档:https://iextrading.com/developer/docs/" rel="nofollow">https://iextrading.com/developer/docs/
讨论
专业人士
历史记录
- 这是IEX免费提供的逐点历史数据-其他交易所通常会收取大量费用以获取类似数据
API
- iex web api提供了大量数据,并且具有非常高的速率限制
缺点
历史记录
- 有些人说,与其他大型交易所相比,iex处理的数据量较低,因此iex的数据质量可能较低(不确定这实际上有多有效)
- 不确定如何维护这些数据(如果有的话)
- 此数据的未来可用性无法保证,IEX可能会选择在未来支付此数据的费用
- 数据未经调整,因此需要手动调整才能在回测引擎中使用
API
- 看来v1 api将在2019年上半年被弃用,不再作为免费服务提供
- 数据中似乎有许多不准确之处(从github上的问题回顾页面可以看出)
问题
- 问:历史数据是否针对股息、分割等进行了调整?如果是,多久一次?A:不,历史数据只是实时二进制交易流的保存版本-未经调整。
- 问:在访问数据之前,我是否需要填写并提交数据协议?答:根据iex api维护人员的说法,访问历史数据不需要这样做
- 问:这些数据是否仍然免费?答:似乎有计划在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中出现的错误
未来焦点
- 附加测试
- 查看键入功能