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

·  阅读 1093

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

前言

​ 相信大家都听说了量化交易这个东西了吧!

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

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

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

多进程和多线程

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

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

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

书中我们是以调用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量化交易相关内容

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

分类:
人工智能