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 : 获取多个股票数据

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

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

Original: https://www.cnblogs.com/inday/p/python-get-stock-realtime-price.html
Author: James.Ying
Title: Python量化-如何获取实时股票信息

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/602713/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

  • Django?保姆级地学习Python Web上手框架:Flask与数据库进阶-对象关系映射(ORM)

    这不,一年一度的寒假又来啦,又是一次拉开差距,提升自我的机会,这个寒假我打算专门攻击Python,全方位学习。首当其冲的就是Python Web了,为什么看好PyWeb,理由很简单…

    Python 2023年8月15日
    054
  • Pandas深入浅出

    ; 4.Pandas新增数据列 文章目录 4.Pandas新增数据列 前言 一、直接赋值 二、df.apply方法 三、df.assign方法 四、按条件选择分组分别进行赋值 总结…

    Python 2023年8月7日
    067
  • padans读取excel

    Pandas:是一个强大的分析结构化数据的工具集(官方网址:https://www.pypandas.cn),功能很多,本篇只介绍下excel数据读取的一些方法。 安装:pip i…

    Python 2023年9月13日
    044
  • 分享60个PHP源码,总有一款适合您

    PHP源码 分享60个PHP源码,总有一款适合您 下面是文件的名字,我放了一些图片,文章里不是所有的图主要是放不下…, 60个PHP源码下载链接:https://pan…

    Python 2023年11月6日
    034
  • 【数模之文本文件操作】

    趣玩目录 文本文件操作 * – 文件自行准备: 例题1: – 相关程序代码如下: + 运行结果如下: 写入的文件内容如下: 例题2: – 相关程…

    Python 2023年8月24日
    052
  • jmeter 压测java代码

    一、背景 直接压测、调用java工程中的方法。(没有http等的入口) 二、java项目改造 一个java项目,想要压测其中的几个方法。我们需要在该工程中,添加一个压测入口的类, …

    Python 2023年11月7日
    044
  • Javaweb-购物商城实现展示商品,实现购物车购物,结算(Servlet+mysql+jsp+tomcat)

    演示视频: 购物网站 代码: https://github.com/wu1369955/shopping 购物网站首页 首先说明:这个是花几天搭建出来玩的,从github上拉到找好…

    Python 2023年11月7日
    048
  • 【MySQL】如何构建一个完整的MySQL知识体系(MySQL专栏启动)

    📫作者简介: 小明java问道之路,专注于研究 Java/ Liunx内核/ C++及汇编/计算机底层原理/源码,就职于大型金融公司后端高级工程师,擅长交易领域的高安全/可用/并发…

    Python 2023年11月7日
    040
  • python 全局莫兰指数和局部莫兰指数

    import esda import pandas as pd import geopandas as gpd from geopandas import GeoDataFrame…

    Python 2023年8月23日
    0108
  • Linux下MMDetection环境配置

    1. 准备工作 Linux发行版。 Pop!_OS 22.04 LTS (NVIDIA) (Ubuntu衍生) 对Linux进行配置,更改国内镜像源。 安装conda环境。官网下载…

    Python 2023年10月25日
    039
  • git相关

    基础概念 首先, git有三个分区,分别是: 工作区(Working Directory):开发者直接编辑的地方,只要文件发生了更改,在这就会显示出来,包含追踪与未追踪文件。通过 …

    Python 2023年6月11日
    062
  • 10 个杀手级的 Python 自动化脚本

    重复性任务总是耗时且无聊,想一想你想要一张一张地裁剪 100 张照片或 Fetch API、纠正拼写和语法等工作,所有这些任务都很耗时,为什么不自动化它们呢?在今天的文章中,我将与…

    Python 2023年8月3日
    045
  • 一篇文章带你了解python数据分析岗位怎么样

    前言 嗨喽,大家好呀~这里是爱看美女的茜茜呐 又到了学Python时刻~ ; 分析目标 各城市对数据分析岗位的需求情况 不同细分领域对数据分析岗的需求情况 数据分析岗位的薪资状况 …

    Python 2023年8月21日
    049
  • 2021/10/12

    zli while True:遍历事件,当事件等于退出时,程序结束speed = [0, 0]for event in pygame.event.get():if event.ty…

    Python 2023年9月22日
    043
  • pandas DataFrame多行,上行下行相互比较 2行比较

    Lx A Ratioupper 0.6 0.36 0.00value 0.6 0.36 0.00lower 0.9 0.81 0.85 upper是上限,lower是下限,找出va…

    Python 2023年8月18日
    055
  • python中.shape() 常见的返回值

    ① 返回值为(一个数+ ‘,’ )的情况。如:返回值为(4,),返回值为(20,) 这种情况:返回的是一个数组。返回值表示数组中元素个数 当我们输入一个列表…

    Python 2023年8月26日
    055
亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球