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

前言

相信大家都听说了量化交易这个东西了吧!量化交易是一种新兴的系统化金融投资方法。

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

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

多进程和多线程 

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

我在书中介绍了多进程和多线程的提速方案。当涉及复杂的计算、繁多的 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 操作的完成。

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

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

d7f541eb969aedefd9b7132db7641983.png

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

c6e836c93ed80077de7b629b7d49fe31.png

在 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文件如下所示:

893bdc2fa21ed95a23995a725dca1807.png

26e6f2fe846c5c6cda550bc017488a9a.png

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

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

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

8a597c876a0edb7462f2231fdcc83393.png

由于测试环境千差万别,此处测试结果仅供大家参考。 大家也可以亲手对比下多线程和多进程的效率。

总结

通过这个简单而又实用的股票量化场景,希望能够给广大朋友对于量化交易有一个直观的感受。

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

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

说明

例程中代码涉及到《Python股票量化交易从入门到实践》书中知识点。比如:

第2章 量化语言Python的关键应用

    2.9  多进程和多线程的提速方案 

2.9.1  多进程和多线程 

2.9.2  Python 的 GIL 原理  

2.9.3  多任务的解决方案 

第 7 章 股票行情数据的获取和管理

    7.5 用多任务为股票数据的获取提速 

例程中的完整代码传至知识星球(知识星球的目录可点击【阅读原文】查看)。

往期回顾

小散量化炒股记|只用一分钟选出底部放量跳空上扬的强势股

小散量化炒股记|不用追高!Python告诉你强势股回调介入的位置

小散量化炒股记|一文揭秘主力、散户资金流入流出的来龙去脉

小散量化炒股记|搭建本地化的股票量化数据库这么几步就够了

小散量化炒股记|Python数据透视表和热力图跟踪行业板块热点切换

小散量化炒股记|趋势指标金叉死叉策略在震荡行情中怎么处理

更多量化交易内容扫码加入星球!

—————————————————

d31aace7b5e9749f9b1994e6abbcc78f.png

元宵大师的量化交易书籍开售!!

京东、当当、天猫有售!!

6b6539d901ab02d45576198b7d710120.png

加我微信了解详情

fee2243196628a90104b9abe53ae7e9b.png

微信关注:‘元宵大师带你用Python量化交易’

9bb7e0262d310cb5c0801bba0d93dac7.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值