小散量化炒股记|只花几秒钟!多任务爬虫获取A股每日实时行情数据

欢迎你们订阅《Python数据分析实战:构建股票量化交易系统》小册子,学完小册上的知识点后,必定要学以至用的方式来辅助咱们分析股票! ​服务器

前言

​ 相信你们都据说了量化交易这个东西了吧!微信

量化交易是一种新兴的系统化金融投资方法,它综合多个学科的知识,用先进的数学模型代替人的主观思惟制定交易策略,利用计算机强大的运算力从庞大的股票、债券、 期货等历史数据中回测交易策略的盈亏“几率”,经过管理盈亏的“几率”帮助投资者作出准确的决策。markdown

那么,什么才是普通股民所适合的量化交易打开方式呢?网络

本文就用一个接地气的股票分析场景——多任务爬虫获取A股每日实时行情数据来和你们分享一下,普通股民如何去使用量化交易!多线程

多进程和多线程

咱们在获取股票行情数据的时候,通常都用for...in循环的方式,可是面对几千只股票过去几年甚至十几年的行情数据时,下载过程势必会出现耗时过长的问题。app

我在书中**《Python股票量化交易从入门到实践》**介绍了多进程和多线程的提速方案。当涉及复杂的计算、繁多的 I/O 操做时,能够考虑使用多任务并行方式充分利用CPU多核性能来提升程序的执行效率。函数

在Python中因为GIL机制的的存在,多进行和多线程在计算密集型和I/O密集型的任务场景中执行效率会有所不一样,多线程更适合 I/O 密集型应用,多进程对于 CPU 密集型的应用表现更好。oop

书中咱们是以调用API接口方式获取股票数据的,以此为例分别介绍了for循环方式、多线程方式和多进程方式。性能

遍历获取股票池中前500只股票的1年的数据,测试的结果是:测试

for循环:55秒

8个线程:7.5秒

8个进程:7.8秒

适合爬虫的多任务

对于爬虫来讲,它适合多线程仍是多进程呢?

爬虫是基于网络请求模块urllib实现的。urllib3扮演了 HTTP 客户端的角色,即向网络服务器发送一个 HTTP 请求,而后等待网络服务器的响应,这类任务属于 I/O 密集型的任务。不一样于计算密集型任务那样会在整个时间片内始终消耗 CPU 的资源,I/O 密集型的任务大部分时间都在等待 I/O 操做的完成。

接下来咱们就以爬虫方式获取东方财富网股票每日实时行情数据做为场景,扩展介绍下多线程的提速方案。

关于爬虫的实现过程可参考知识星球如下主题:

咱们看到网页上显示总共有206页,那么咱们能够将该任务分配给多个线程来完成,而不仅是让一个线程去逐一读取。

在 Python3 中内置了线程池模块 ThreadPoolExecutor,经过 ThreadPoolExecutor模块来实现多线程的处理。

对于爬虫任务来讲,每一页仅仅是URL地址不一样。所以按模块的使用要求,将爬虫任务crawer_daily()函数拆分为执行函数map_fun( )和可迭代参数 itr_arg 两部分。

关键代码以下所示:

with ThreadPoolExecutor(max_workers=8) as executor:
    # map_fun 传入的要执行的map函数
    # itr_argn 可迭代的参数
    # result 返回的结果是一个生成器
    results = executor.map(crawer_daily, itr_arg)
复制代码

每一页只有20只股票的数据,所以咱们须要把数据合并成一份DataFrame,最后保存为本地的csv文件。

关键代码以下所示:

for ret in results:
    df_daily_stock = df_daily_stock.append(ret, ignore_index=True)
df_daily_stock.to_csv("crawer_daily_stock/{}.csv".format(df_daily_stock["时间"].values[0]), columns=df_daily_stock.columns, index=True, encoding='GBK')
复制代码

打开csv文件以下所示:

须要注意到的是我增长了“时间”列。由于我是在收盘爬取的,时间显示2020-08-21 15:00:00,若是是在盘中获取实时数据的话,对应的时间会体现数据更新的时间戳。

还有一个重要点是文件名,这里我取的名字是“2020-08-21 15/00/00.csv”,若是是实时数据的话要体现出时/分/秒的信息。

关于测试的结果,我用了8个线程,执行的时间在6秒多。也就是说,若是咱们只增量更新日线数据,那么天天只须要花6秒时间就能更新完当日A股市场所有股票数据。

因为测试环境千差万别,此处测试结果仅供你们参考。 你们也能够亲手对比下多线程和多进程的效率。

总结

经过这个简单而又实用的股票量化场景,但愿可以给广大朋友对于量化交易有一个直观的感觉。

而后,咱们应该升级本身的炒股方式了,把本身之前炒股的那套方法,抽象成策略模型,用量化的方法去全市场回测评估,而后让程序帮助咱们监测行情的走势。

这个才是普通股民所适合的量化交易打开方式!

———————————————————————————————————————————————— 你们若是想对涉及到的知识点进行更全面、更体系的从0-1方式的介绍,这里推荐给你们个人书籍《Python股票量化交易从入门到实践》!天猫、京东、当当全面开售!

同时也欢迎你们关注个人微信公众号【元宵大师带你用Python量化交易】了解更多Python量化交易相关内容

例程中的代码,上传至《玩转股票量化交易》知识星球(知识星球的目录可点击【阅读】查看)。

相关文章
相关标签/搜索