如何获取实时股票信息

股票信息的接口有很多,之前大家常用的是新浪的,但在年初的时候,新浪的接口突然不能使用,给大家造成了很大的困扰,为此网上也有很多教程教大家如何从新浪获取数据,跟着教程弄了半天也不行,索性换到126(也就是网易了),感觉速度都还不错。

首先我们看下接口地址:http://api.money.126.net/data/feed/1000001,money.api

其中的1000001就是股票代码了,跟新浪的不同,他的第一位代表交易所,后面6位是股票代码

  • 0:上交所
  • 1:深交所
  • 2:北交所

先通过浏览器看下数据结构:

  1. _ntes_quote_callback({
  2. "1000001": {
  3. "code": "1000001",
  4. "percent": 0.002113,
  5. "high": 14.25,
  6. "askvol3": 1026758,
  7. "askvol2": 810700,
  8. "askvol5": 290493,
  9. "askvol4": 461100,
  10. "price": 14.23,
  11. "open": 14.2,
  12. "bid5": 14.18,
  13. "bid4": 14.19,
  14. "bid3": 14.2,
  15. "bid2": 14.21,
  16. "bid1": 14.22,
  17. "low": 14.11,
  18. "updown": 0.03,
  19. "type": "SZ",
  20. "bidvol1": 323600,
  21. "status": 0,
  22. "bidvol3": 244200,
  23. "bidvol2": 673474,
  24. "symbol": "000001",
  25. "update": "2022/06/25 17:59:57",
  26. "bidvol5": 343500,
  27. "bidvol4": 145200,
  28. "volume": 86604061,
  29. "askvol1": 817268,
  30. "ask5": 14.27,
  31. "ask4": 14.26,
  32. "ask1": 14.23,
  33. "name": "平安银行",
  34. "ask3": 14.25,
  35. "ask2": 14.24,
  36. "arrow": "↑",
  37. "time": "2022/06/24 16:00:58",
  38. "yestclose": 14.2,
  39. "turnover": 1227798687.09
  40. }
  41. });

可以看出_ntes_quote_callback()中的就是标准的json数据,我们只要通过正则表达式就可以取出。

我们先定义一个数据结构:

  1. class NetTick:
  2. def __init__(self, dict={}):
  3. self.name = dict.get('name') # 股票名称
  4. self.yestclose = dict.get('yestclose') # 昨日收盘价
  5. self.bidvol5 = dict.get('bidvol5') # 买5数量
  6. self.bidvol4 = dict.get('bidvol4') # 买4数量
  7. self.bidvol3 = dict.get('bidvol3') # 买3数量
  8. self.bidvol2 = dict.get('bidvol2') # 买2数量
  9. self.bidvol1 = dict.get('bidvol1') # 买1数量
  10. self.bid5 = dict.get('bid5') # 买5价格
  11. self.bid4 = dict.get('bid4') # 买4价格
  12. self.bid3 = dict.get('bid3') # 买3价格
  13. self.bid2 = dict.get('bid2') # 买2价格
  14. self.bid1 = dict.get('bid1') # 买1价格
  15. self.askvol5 = dict.get('askvol5') # 卖5数量
  16. self.askvol4 = dict.get('askvol4') # 卖4数量
  17. self.askvol3 = dict.get('askvol3') # 卖3数量
  18. self.askvol2 = dict.get('askvol2') # 卖2数量
  19. self.askvol1 = dict.get('askvol1') # 卖1数量
  20. self.ask5 = dict.get('ask5') # 卖5价格
  21. self.ask4 = dict.get('ask4') # 卖4价格
  22. self.ask3 = dict.get('ask3') # 卖3价格
  23. self.ask2 = dict.get('ask2') # 卖2价格
  24. self.ask1 = dict.get('ask1') # 卖1价格
  25. self.symbol = dict.get('symbol') # 股票代码 第一位1:深交所 0:上交所 2北交所
  26. self.volume = dict.get('volume') # 成交量
  27. self.price = dict.get('price') # 当前价格
  28. self.open = dict.get('open') # 开盘价
  29. self.low = dict.get('low') # 最低价
  30. self.high = dict.get('high') # 最高价
  31. self.code = dict.get('code') # 去除标记为的股票代码
  32. self.turnover = dict.get('turnover') # 成交额
  33. self.percent = dict.get('percent') # 涨跌幅
  34. self.updown = dict.get('updown') # 涨跌金额

通过研究,我们发现126的接口支持多个股票查询,那我们可以定义两个方法,一个查单个,一个查多个,具体实现如下:

  1. import requests
  2. import re
  3. from models.nettick import NetTick
  4. from utils.packages import *
  5. class NetEaseData:
  6. @staticmethod
  7. def get_realtime_data(symbol):
  8. """
  9. 网易的实时数据接口
  10. :param symbol: 股票代码
  11. :return: Tick
  12. """
  13. code = NetEaseData.convert_market(symbol)
  14. try:
  15. response = requests.get("http://api.money.126.net/data/feed/{},money.api".format(code)).text
  16. re_find = NetEaseData.__re_find(response)
  17. if re_find is not None:
  18. find_stock = re_find.get(code)
  19. if find_stock is not None:
  20. return NetTick(find_stock)
  21. except Exception as e:
  22. logger.error('请求网易接口出错,错误信息:{}'.format(e))
  23. return None
  24. @staticmethod
  25. def convert_market(other_market_code=str):
  26. """
  27. 转换通用股票代码 sz sh bj开头+股票代码
  28. """
  29. if other_market_code[0:2].lower() == 'sh':
  30. return '0' + other_market_code[2:]
  31. elif other_market_code[0:2].lower() == 'sz':
  32. return '1' + other_market_code[2:]
  33. else:
  34. return '2' + other_market_code[2:]
  35. @staticmethod
  36. def get_realtime_datas(symbols=[]):
  37. """
  38. 网易的实时数据接口
  39. :param symbols: 股票代码列表
  40. :return: Ticks列表
  41. """
  42. codes = [NetEaseData.convert_market(code) for code in symbols]
  43. result = []
  44. try:
  45. response = requests.get("http://api.money.126.net/data/feed/{},money.api".format(','.join(codes))).text
  46. re_find = NetEaseData.__re_find(response)
  47. if re_find is not None:
  48. for code in re_find:
  49. item = re_find[code]
  50. result.append(NetTick(item))
  51. except Exception as e:
  52. logger.error('请求网易接口出错,错误信息:{}'.format(e))
  53. return result
  54. @staticmethod
  55. def __re_find(response):
  56. find = re.findall(r"_ntes_quote_callback\((.*)\);", response)
  57. if len(find) >= 1:
  58. return to_obj(find[-1])
  59. return None
  60. if __name__ == '__main__':
  61. ticks = NetEaseData.get_realtime_datas(['sh588000', 'sz000001', 'bj831010'])
  62. [print(tick.symbol, tick.name, tick.price) for tick in ticks]
  63. tick = NetEaseData.get_realtime_data('sz127045')
  64. print(tick.symbol, tick.name, tick.price)

使用也非常简单

  • NetEaseData.get_realtime_data:获取单个股票
  • NetEaseData.get_realtime_datas : 获取多个股票数据

这里我股票代码用的是兼容原有新浪模式的,你可以自己做下修改。

目前正在升级自己的量化平台,也会将之前的一些代码公布出来,如果喜欢请点个推荐,谢谢

Python量化-如何获取实时股票信息的更多相关文章

  1. python获取实时股票信息

    Python3获取股票行情数据(中国个股/中国指数/全球指数) #!/usr/local/bin/python3 #coding=utf-8 #source http://www.cnblogs.co ...

  2. python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据

    python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...

  3. 金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据

    财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据.年度季度报表数据.实时分笔数据.历史分笔数据,本文对tushare的用法,已经存在的 ...

  4. Python脚本:获取股票信息

    在水木上看到有人在问到想用python去获取股票的信息,sina finance上面的那些数据的是通过js控制的,会根据股票代码去获取实时信息然后根据用户友好的方式展示出来.首先,新浪的一个url让我 ...

  5. 人脸检测及识别python实现系列(1)——配置、获取实时视频流

    人脸检测及识别python实现系列(1)——配置.获取实时视频流 1. 前言 今天用多半天的时间把QQ空间里的几篇年前的旧文搬到了这里,算是完成了博客搬家.QQ空间里还剩下一些记录自己数学学习路线的学 ...

  6. 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)

     注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...

  7. 中国的 Python 量化交易工具链有哪些

    摘抄自知乎:https://www.zhihu.com/question/28557233 如题,提问的范围限于适合中国大陆金融市场使用的工具链,所以IbPy和Quotopian之类主要面向欧美市场的 ...

  8. Python量化交易

    资料整理: 1.python量化的一个github 代码 2.原理 + python基础 讲解 3.目前发现不错的两个量化交易 学习平台: 聚宽和优矿在量化交易都是在15年线上布局的,聚宽是15年的新 ...

  9. python执行shell获取硬件参数写入mysql

    最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...

随机推荐

  1. Qt 实现文字输入框,带字数限制

    Qt 实现文字输入框,带字数限制 核心构思 核心的点在于,限制输入的字数:主要的方法为创建一个组合窗口 textChanged 这个信号,会在你输入字符之后发射,可以连接这个信号,在发射了信号之后,去 ...

  2. 2021.11.05 eleveni的水省选题的记录

    2021.11.05 eleveni的水省选题的记录 因为eleveni比较菜,但是eleveni不想写绿题(总不能说是被绿题虐得不想写),eleveni决定继续水noip原题. --实际上菜菜的el ...

  3. python学习-Day37

    目录 今日内容详细 GIL全局解释器锁 GIL与普通互斥锁区别 GIL对程序的影响 验证多线程作用 两个大前提 关于CPU的个数 关于任务的类型 死锁现象 避免死锁的解决: 添加超时释放锁 信号量 自 ...

  4. 【导包】使用Sklearn构建Logistic回归分类器

    官方英文文档地址:http://scikit-learn.org/dev/modules/generated/sklearn.linear_model.LogisticRegression.html# ...

  5. keil工程当中实现printf重定向串口打印

    之前是完全不知道printf可以重定向设置 最近才发现还有这等好事,可以让printf直接实现串口打印 在网上找了很多资料,终于实现了我想要的效果 原理:printf是通过调用底部的fputc来实现打 ...

  6. 详解Fiddler Classic过滤、重放、转发HTTP请求

    更多干货文章,更多最新文章,欢迎到作者主博客 菜鸟厚非 一.简介 今天介绍一下 Fiddler Classic 对 HTPP 的过滤.重放.转发操作,这在开发中,尤其在微服务中调试中是经常用到的功能, ...

  7. Linux 实现静态路由实验

    环境: 四台主机: A主机:eth0 NAT模式 R1主机:eth0 NAT模式,eth1 仅主机模式 R2主机:eth0 桥接模式,eth1仅主机模式 B主机:eth0 桥接模式 手动修改IP地址 ...

  8. kernel UAF && tty_struct

    kernel UAF && 劫持tty_struct ciscn2017_babydriver exp1 fork进程时会申请堆来存放cred.cred结构大小为0xA8.修改cred ...

  9. Linux 30岁,这些年经历了什么?

    关注「开源Linux」,选择"设为星标" 回复「学习」,有我为您特别筛选的学习资料~ 3月19日,Linux基金会在Twitter上发布推文宣布,其小企鹅的标志"Tux& ...

  10. 从Windows切换到Linux?看这篇就够了!

    作者:栈栈 链接:CU技术社区 微软已经马上准备在2020年1月份终止对Windows 7的支持,这意味着您将不再获得bug修复或安全更新.如果您是Windows 7的最终支持者之一,并且不想陷入一个 ...