更多精彩内容,欢迎关注公众号:数量技术宅,也可添加技术宅个人微信号:sljsz01,与我交流。

实时股票数据的重要性

对于四大可交易资产:股票、期货、期权、数字货币来说,期货、期权、数字货币,可以从交易所提供的api收到实时行情数据,而股票由于量化交易接口不面向普通人开放,导致大家想要获取到股票的实时数据,十分困难。而与此同时,股票实时数据,又是极其重要的场内交易数据。

对于手动交易者而言,实时数据一方面可以辅助盯盘,另一方面,可以用程序简单开发到价提醒,到某个价位,进行入场和出场的交易。

对于量化交易者,实时行情就更加重要了。我们接收实时行情之后,不仅需要用实时数据计算策略信号,而且当策略信号需要对某个股票进行下单的时候,我们也需要知道该股票的最新价格、盘口数据,从而根据价格+盘口,选择合适的价位下单。此外,实时数据落地后,还可以为我们的策略回测服务。

爬虫最通俗原理解释

爬虫,相当于模仿了网页查询的动作,比如我们在浏览器中输入了www.baidu.com,浏览器向我们返回百度的主页,其实这就是一个请求+返回的过程。我们请求的是地址,返回的是数据(尽管我们看到的是百度主页,其实背后对应的还是一些列的数据,只不过后续的可视化展示成了网页)。

对于请求股票数据来说,也是同理。比如我们请求某一只股票的数据(以600000浦发银行为例),在浏览器地址中输入:http://hq.sinajs.cn/list=sh600000,股票代码可任意修改,浏览器返回如下数据集并显示:

当然同时查询多只股票,也是可以做到的,我们同样在浏览器中输入地址,例如:http://hq.sinajs.cn/list=sh600000,sz000001,sz000002,就同时查询到了浦发银行、平安银行、万科A的数据。

那么,对于Python来说,我们如何使用Python来模仿网页查询的动作?这里必须要借助一个Python的三方库:request库。

requests是使用Apache2 licensed 许可证的HTTP库。Request支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动响应内容的编码,支持国际化的URL和POST数据自动编码。可以说,requests在python内置模块的基础上进行了高度的封装,从而使得python进行网络请求时,变得人性化,使用Requests可以轻而易举的完成浏览器可有的任何操作。与此同时,requests会自动实现持久连接keep-alive。

requests库的上述优点,加上其使用的便捷性,使得其成为Python爬虫的首选工具。我们通过requests,来重复一遍上述网页的查询过程,步骤也很简单,首先查询单个股票,返回如下

再次查询多个股票,返回如下,可以看到,用requests进行查询所返回的结果,与我们网页上看到的是完全一致的,这也说明requests完美的模拟了浏览器的请求动作。

Python爬虫Sina Stock实战

第一步,Sina API + Requests库调用核心函数

通过调用Sina Stock API,实时查询股票价格。我们采用多股票查询,使用requests请求接口。

核心函数逻辑:code传入股票代码,调用requests库进行查询,并解析查询结果,得到我们想要查询的股票最新价格、当日涨跌幅、昨收盘价等关键字段

第二步,通过threading多线程同时查询结果、通过Queue实现线程池

我们简要介绍一下threading和Queue。threading模块中包含了关于线程操作的丰富功能,包括:常用线程函数,线程对象,锁对象,递归锁对象,事件对象,条件变量对象,信号量对象,定时器对象,栅栏对象。threading.Thread:线程对象,重要方法,start():开启线程活动。它将使得run()方法在一个独立的控制线程中被调用,需要注意的是同一个线程对象的start()方法只能被调用一次,如果调用多次,则会报RuntimeError错误。run():此方法代表线程活动。

Python的Queue模块中提供了同步的、线程安全的队列类,包括FIFO(先入先出)队列Queue,LIFO(后入先出)队列LifoQueue,和优先级队列PriorityQueue。这些队列都实现了锁原语,能够在多线程中直接使用。可以使用队列来实现线程间的同步。Queue.put(item) 写入队列;Queue.get([block[, timeout]])获取队列

第三步,模块化实现:Worker类 & Stock类

Worker类,主要实现功能:

  1. 传入线程实例对象,调用init、start方法,重载run函数

  2. work_queue存放要查询的队列,依次取出(FIFO),查询结果存到result_queue队列,当队列满,取出结果队列中所有查询结果,并打印

Stock类,主要实现功能:

  1. 初始化生产者、消费者队列,生产者队列为空,消费者队列最大数量是查询的股票数量

  2. 按预设的线程数据,初始化线程池,绑定Worker类

  3. 对于每次每只要查询的股票,加入生产者队列

  4. 定义爬虫获取数据的函数

最后,我们调用Worker类和Stock类,就能得到想要获取的结果了。

运行结果展示

程序不仅可以获取个股数据,也能够获取指数数据,我们默认订阅了上证指数、深圳综指、万科A、浦发银行,4个数据流,以下是默认运行结果的展示,我们打印了最新价、涨跌幅、昨收价等关键数据。我们按照一定的时间间隔,获取数据并打印。

程序的扩展:在主程序入口,可修改查询的股票数量,我们支持多股票同时查询;查询的时间间隔、查询的线程数量的修改。

当然,我们也可以对该爬虫程序做后续的进一步拓展,比如计算量化策略信号,落地数据作为回测数据,等等。

如果你想要获取这个Python爬虫Sina Stock程序,欢迎扫码添加数量技术宅个人微信,领取完整代码。


往期干货分享推荐阅读

数字货币稳定币对网格做市策略

数字货币资金费策略

分享一个年化15%以上的无风险套利机会

网格交易系统开发

通过深度学习股价截面数据分析和预测股票价格

Omega System Trading and Development Club内部分享策略Easylanguage源码

一个真实数据集的完整机器学习解决方案(下)

一个真实数据集的完整机器学习解决方案(上)

如何使用交易开拓者(TB)开发数字货币策略

股指期货高频数据机器学习预测

如何使用TradingView(TV)回测数字货币交易策略

如何投资股票型基金?什么时间买?买什么?

【数量技术宅|量化投资策略系列分享】基于指数移动平均的股指期货交易策略

AMA指标原作者Perry Kaufman 100+套交易策略源码分享

【 数量技术宅 | 期权系列分享】期权策略的“独孤九剑”

【数量技术宅|金融数据系列分享】套利策略的价差序列计算,恐怕没有你想的那么简单

【数量技术宅|量化投资策略系列分享】成熟交易者期货持仓跟随策略

如何获取免费的数字货币历史数据

【数量技术宅|量化投资策略系列分享】多周期共振交易策略

【数量技术宅|金融数据分析系列分享】为什么中证500(IC)是最适合长期做多的指数

商品现货数据不好拿?商品季节性难跟踪?一键解决没烦恼的Python爬虫分享

【数量技术宅|金融数据分析系列分享】如何正确抄底商品期货、大宗商品

【数量技术宅|量化投资策略系列分享】股指期货IF分钟波动率统计策略

【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

实时获取股票数据,免费!——Python爬虫Sina Stock实战的更多相关文章

  1. 【数量技术宅 | Python爬虫系列分享】实时监控股市重大公告的Python爬虫

    实时监控股市重大公告的Python爬虫小技巧 精力有限的我们,如何更加有效率地监控信息? 很多时候特别是交易时,我们需要想办法监控一些信息,比如股市的公告.如果现有的软件没有办法实现我们的需求,那么就 ...

  2. Android网络开发之实时获取最新数据

    在实际开发中更多的是需要我们实时获取最新数据,比如道路流量.实时天气信息等,这时就需要通过一个线程来控制视图的更新. 示例:我们首先创建一个网页来显示系统当前的时间,然后在Android程序中每隔5秒 ...

  3. 在我的新书里,尝试着用股票案例讲述Python爬虫大数据可视化等知识

    我的新书,<基于股票大数据分析的Python入门实战>,预计将于2019年底在清华出版社出版. 如果大家对大数据分析有兴趣,又想学习Python,这本书是一本不错的选择.从知识体系上来看, ...

  4. Python股票分析系列——系列介绍和获取股票数据.p1

    本系列转载自youtuber sentdex博主的教程视频内容 https://www.youtube.com/watch?v=19yyasfGLhk&index=4&list=PLQ ...

  5. Python 爬虫-股票数据的Scrapy爬虫

    2017-08-06 19:52:21 目标:获取上交所和深交所所有股票的名称和交易信息输出:保存到文件中 技术路线:scrapy 获取股票列表:东方财富网:http://quote.eastmone ...

  6. R获取股票数据

    R中好几个Pkg都提供了股票数据的在线下载方法,如果非得在其中找出一个最好的,那么quantmod当之无愧!举一个例子,譬如下载沪市大盘数据,代码可以是: library(quantmod)SSE & ...

  7. PyQt学习随笔:Model/View中视图数据项编辑变动实时获取变动数据的方法

    对于Model/View中视图的数据编辑后怎么能实时获取编辑的数据变动位置和变动情况查阅了一些资料,终于基本弄明白必须重写Model的setData方法才能截获.setData方法是视图中各种角色数据 ...

  8. 【机器学习】数据准备--python爬虫

    前言 我们在学习机器学习相关内容时,一般是不需要我们自己去爬取数据的,因为很多的算法学习很友好的帮助我们打包好了相关数据,但是这并不代表我们不需要进行学习和了解相关知识.在这里我们了解三种数据的爬取: ...

  9. 一个采用python获取股票数据的开源库,相当全,及一些量化投资策略库

    tushare: http://tushare.waditu.com/index.html 为什么是Python? 就跟javascript在web领域无可撼动的地位一样,Python也已经在金融量化 ...

随机推荐

  1. php常用的函数

    addslashes: 字符串加入斜线.bin2hex: 二进位转成十六进位.chop: 去除连续空白.chr: 返回序数值的字符.chunk_split: 将字符串分成小段.convert_cyr_ ...

  2. CSS截取字段,让过长的字段结尾变成省略号(IE有效)

    text-overflow:ellipsis;overflow:hidden;<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transiti ...

  3. 日常shell练习

    2021-07-19 1.echo的使用 1.1 echo -n 表示不换行输出 # echo输出会自动换行,换行输出两个1 echo 1 echo 1 # 不换行输出,不换行输出两个1 echo - ...

  4. 发布日志 - kratos v2.0.5 版本发布

    V2.0.5 Release Release v2.0.5 · go-kratos/kratos (github.com) 修复问题 proto errors when swagger api imp ...

  5. Docker下制作一个容器镜像

    操作过程描述: (1)先基于centos的镜像启动一个centos容器 (2)在这个容器中安装nginx (3)然后把这个已经安装了nginx的容器制作成一个docker的镜像 操作:docker c ...

  6. Merchant

      \(get\)二分新用法.   每道题都有答案范围提示,以前只是以为是用来提示用什么类型输出的.   从来没想过直接用它来二分.   这道题真的刷新了我的认知啊......   整道题的复杂度是\ ...

  7. MongoDB(10)- 查询嵌套文档

    插入测试数据 db.inventory.insertMany( [ { item: "journal", qty: 25, size: { h: 14, w: 21, uom: & ...

  8. MongoDB 常见问题 - 解决 brew services list 查看 MongoDB 服务 status 显示 error 的问题

    问题背景 将 MongoDB 作为服务运行 brew services start mongodb-community@4.4 也显示运行成功了,但是查看服务列表的时候,发现 MongoDB 服务的还 ...

  9. Gitlab - 安装的社区版 Gitlab-ce,解决访问网页报502-Whoops, GitLab is taking too much time to respond的问题

    问题背景 在自己虚拟机(centos7)上装了 Gitlab-ce,就是社区版的 Gitlab,版本是 13.0+ 问题描述 浏览器访问 Gitlab 网站,报 502 问题翻译 502-Whoops ...

  10. Linux 动态库的编译和使用

    1. 动态链接库简介 动态库又叫动态链接库,是程序运行的时候加载的库,当动态链接库正确安装后,所有的程序都可以使用动态库来运行程序.动态库是目标文件的集合,目标文件在动态库中的组织方式是按特殊的方式组 ...