Python量化-如何获取实时股票信息
如何获取实时股票信息
股票信息的接口有很多,之前大家常用的是新浪的,但在年初的时候,新浪的接口突然不能使用,给大家造成了很大的困扰,为此网上也有很多教程教大家如何从新浪获取数据,跟着教程弄了半天也不行,索性换到126(也就是网易了),感觉速度都还不错。
首先我们看下接口地址:http://api.money.126.net/data/feed/1000001,money.api
其中的1000001
就是股票代码了,跟新浪的不同,他的第一位代表交易所,后面6位是股票代码
- 0:上交所
- 1:深交所
- 2:北交所
先通过浏览器看下数据结构:
_ntes_quote_callback({
"1000001": {
"code": "1000001",
"percent": 0.002113,
"high": 14.25,
"askvol3": 1026758,
"askvol2": 810700,
"askvol5": 290493,
"askvol4": 461100,
"price": 14.23,
"open": 14.2,
"bid5": 14.18,
"bid4": 14.19,
"bid3": 14.2,
"bid2": 14.21,
"bid1": 14.22,
"low": 14.11,
"updown": 0.03,
"type": "SZ",
"bidvol1": 323600,
"status": 0,
"bidvol3": 244200,
"bidvol2": 673474,
"symbol": "000001",
"update": "2022/06/25 17:59:57",
"bidvol5": 343500,
"bidvol4": 145200,
"volume": 86604061,
"askvol1": 817268,
"ask5": 14.27,
"ask4": 14.26,
"ask1": 14.23,
"name": "平安银行",
"ask3": 14.25,
"ask2": 14.24,
"arrow": "↑",
"time": "2022/06/24 16:00:58",
"yestclose": 14.2,
"turnover": 1227798687.09
}
});
可以看出_ntes_quote_callback()
中的就是标准的json数据,我们只要通过正则表达式就可以取出。
我们先定义一个数据结构:
class NetTick:
def __init__(self, dict={}):
self.name = dict.get('name') # 股票名称
self.yestclose = dict.get('yestclose') # 昨日收盘价
self.bidvol5 = dict.get('bidvol5') # 买5数量
self.bidvol4 = dict.get('bidvol4') # 买4数量
self.bidvol3 = dict.get('bidvol3') # 买3数量
self.bidvol2 = dict.get('bidvol2') # 买2数量
self.bidvol1 = dict.get('bidvol1') # 买1数量
self.bid5 = dict.get('bid5') # 买5价格
self.bid4 = dict.get('bid4') # 买4价格
self.bid3 = dict.get('bid3') # 买3价格
self.bid2 = dict.get('bid2') # 买2价格
self.bid1 = dict.get('bid1') # 买1价格
self.askvol5 = dict.get('askvol5') # 卖5数量
self.askvol4 = dict.get('askvol4') # 卖4数量
self.askvol3 = dict.get('askvol3') # 卖3数量
self.askvol2 = dict.get('askvol2') # 卖2数量
self.askvol1 = dict.get('askvol1') # 卖1数量
self.ask5 = dict.get('ask5') # 卖5价格
self.ask4 = dict.get('ask4') # 卖4价格
self.ask3 = dict.get('ask3') # 卖3价格
self.ask2 = dict.get('ask2') # 卖2价格
self.ask1 = dict.get('ask1') # 卖1价格
self.symbol = dict.get('symbol') # 股票代码 第一位1:深交所 0:上交所 2北交所
self.volume = dict.get('volume') # 成交量
self.price = dict.get('price') # 当前价格
self.open = dict.get('open') # 开盘价
self.low = dict.get('low') # 最低价
self.high = dict.get('high') # 最高价
self.code = dict.get('code') # 去除标记为的股票代码
self.turnover = dict.get('turnover') # 成交额
self.percent = dict.get('percent') # 涨跌幅
self.updown = dict.get('updown') # 涨跌金额
通过研究,我们发现126的接口支持多个股票查询,那我们可以定义两个方法,一个查单个,一个查多个,具体实现如下:
import requests
import re
from models.nettick import NetTick
from utils.packages import *
class NetEaseData:
@staticmethod
def get_realtime_data(symbol):
"""
网易的实时数据接口
:param symbol: 股票代码
:return: Tick
"""
code = NetEaseData.convert_market(symbol)
try:
response = requests.get("http://api.money.126.net/data/feed/{},money.api".format(code)).text
re_find = NetEaseData.__re_find(response)
if re_find is not None:
find_stock = re_find.get(code)
if find_stock is not None:
return NetTick(find_stock)
except Exception as e:
logger.error('请求网易接口出错,错误信息:{}'.format(e))
return None
@staticmethod
def convert_market(other_market_code=str):
"""
转换通用股票代码 sz sh bj开头+股票代码
"""
if other_market_code[0:2].lower() == 'sh':
return '0' + other_market_code[2:]
elif other_market_code[0:2].lower() == 'sz':
return '1' + other_market_code[2:]
else:
return '2' + other_market_code[2:]
@staticmethod
def get_realtime_datas(symbols=[]):
"""
网易的实时数据接口
:param symbols: 股票代码列表
:return: Ticks列表
"""
codes = [NetEaseData.convert_market(code) for code in symbols]
result = []
try:
response = requests.get("http://api.money.126.net/data/feed/{},money.api".format(','.join(codes))).text
re_find = NetEaseData.__re_find(response)
if re_find is not None:
for code in re_find:
item = re_find[code]
result.append(NetTick(item))
except Exception as e:
logger.error('请求网易接口出错,错误信息:{}'.format(e))
return result
@staticmethod
def __re_find(response):
find = re.findall(r"_ntes_quote_callback\((.*)\);", response)
if len(find) >= 1:
return to_obj(find[-1])
return None
if __name__ == '__main__':
ticks = NetEaseData.get_realtime_datas(['sh588000', 'sz000001', 'bj831010'])
[print(tick.symbol, tick.name, tick.price) for tick in ticks]
tick = NetEaseData.get_realtime_data('sz127045')
print(tick.symbol, tick.name, tick.price)
使用也非常简单
NetEaseData.get_realtime_data
:获取单个股票NetEaseData.get_realtime_datas
: 获取多个股票数据
这里我股票代码用的是兼容原有新浪模式的,你可以自己做下修改。
目前正在升级自己的量化平台,也会将之前的一些代码公布出来,如果喜欢请点个推荐,谢谢
Python量化-如何获取实时股票信息的更多相关文章
- python获取实时股票信息
Python3获取股票行情数据(中国个股/中国指数/全球指数) #!/usr/local/bin/python3 #coding=utf-8 #source http://www.cnblogs.co ...
- python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据
python量化分析系列之---5行代码实现1秒内获取一次所有股票的实时分笔数据 最近工作太忙了,有一个星期没有更新文章了,本来这一期打算分享一些对龙虎榜数据的分析结果的,现在还没有把数据内的价值很好 ...
- 金融量化分析-python量化分析系列之---使用python获取股票历史数据和实时分笔数据
财经数据接口包tushare的使用(一) Tushare是一款开源免费的金融数据接口包,可以用于获取股票的历史数据.年度季度报表数据.实时分笔数据.历史分笔数据,本文对tushare的用法,已经存在的 ...
- Python脚本:获取股票信息
在水木上看到有人在问到想用python去获取股票的信息,sina finance上面的那些数据的是通过js控制的,会根据股票代码去获取实时信息然后根据用户友好的方式展示出来.首先,新浪的一个url让我 ...
- 人脸检测及识别python实现系列(1)——配置、获取实时视频流
人脸检测及识别python实现系列(1)——配置.获取实时视频流 1. 前言 今天用多半天的时间把QQ空间里的几篇年前的旧文搬到了这里,算是完成了博客搬家.QQ空间里还剩下一些记录自己数学学习路线的学 ...
- 目前比较流行的Python量化开源框架汇总(交易+风险分析工具)
注:点击框架名称通往Github talib talib的简称是Technical Analysis Library,主要功能是计算行情数据的技术分析指标 numpy 介绍:一个用python实现的 ...
- 中国的 Python 量化交易工具链有哪些
摘抄自知乎:https://www.zhihu.com/question/28557233 如题,提问的范围限于适合中国大陆金融市场使用的工具链,所以IbPy和Quotopian之类主要面向欧美市场的 ...
- Python量化交易
资料整理: 1.python量化的一个github 代码 2.原理 + python基础 讲解 3.目前发现不错的两个量化交易 学习平台: 聚宽和优矿在量化交易都是在15年线上布局的,聚宽是15年的新 ...
- python执行shell获取硬件参数写入mysql
最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python ...
随机推荐
- Ubu18开机自启动
Ubu开机自启动 简单示例 在/etc/init.d/目录下新建启动脚本Test #!/bin/bash ### BEGIN INIT INFO # Provides: Test # Required ...
- Lumia一键刷稳定版 Win10 arm 及其报错处理
前言 之前我发了一篇Lumia1520 刷Win10 arm双系统的文章,不过后来发现那个方法对小白来说太不友好,且系统也不稳定,所以我找到了更好的方法 刷机 我们可以利用刷机迷进行刷机,支持一键刷机 ...
- ASP.NET Core WebApi返回结果统一包装实践
前言 近期在重新搭建一套基于ASP.NET Core WebAPI的框架,这其中确实带来了不少的收获,毕竟当你想搭建一套框架的时候,你总会不自觉的去想,如何让这套框架变得更完善一点更好用一点.其中在关 ...
- 元素偏移量 offset 系列
offset 概述 offset翻译过来就是偏移量,我们使用offset系列相关属性可以动态的得到该元素的位置(偏移).大小等. 获得元素距离带有定位父元素的位置 获得元素自身的大小(宽度高度) 注意 ...
- JavaScript函数中的arguments对象
ECMAScript标准中,每个函数都有一个特殊的内置对象arguments.arguments对象是一个类Array对象(object),用以保存函数接收到的实参副本. 一.内置特性 说它是一个内置 ...
- MySQL进阶之常用函数
我的小站 有时候,除了简单的数据查询,我们还有一些高级的函数. MySQL 包含了大量并且丰富的函数,这套 MySQL 函数大全只收集了几十个常用的,剩下的比较罕见的函数我们就不再整理了,读者可以到M ...
- SpringMVC的文件上传下载,异常处理,拦截器的小总结
文件的上传和下载 我们通常在访问网页时会使用到文件的上传与下载的功能,那么他是如何实现的呢? 1 下载: ResponseEntity :用于控制器方法的返回值类型,该控制器方法的返回值就是响应到浏览 ...
- zookeeper篇-zk的选举机制
点赞再看,养成习惯,微信搜索「小大白日志」关注这个搬砖人. 文章不定期同步公众号,还有各种一线大厂面试原题.我的学习系列笔记. 说说zk的选举机制 基础概念 zxid=事务id=一个时间戳,代表当前事 ...
- [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算
[源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 目录 [源码解析] TensorFlow 分布式之 MirroredStrategy 分发计算 0x1. 运行 ...
- 各种查找算法的选用分析(顺序查找、二分查找、二叉平衡树、B树、红黑树、B+树)
目录 顺序查找 二分查找 二叉平衡树 B树 红黑树 B+树 参考文档 顺序查找 给你一组数,最自然的效率最低的查找算法是顺序查找--从头到尾挨个挨个遍历查找,它的时间复杂度为O(n). 二分查找 而另 ...