如何使用tushare获取实时股票数据

企业微信

为什么你需要tushare

做股票交易、写量化策略、盯盘复盘,数据是第一脚油门。tushare是国内做A股数据最常用的Python库,免费、接口稳定、社区活跃。它把交易所、行情商的数据整理成统一的DataFrame格式,你写几行代码就能拿到开盘价、最高价、最低价、成交量这些基础字段。

tushare分两个版本。老版叫tushare,接口用ts.get_realtime_quotes();新版叫tushare pro,需要注册拿token,接口更规范但部分功能要积分。实时数据这块,新版用ts.pro_bar()配合realtime_quote或专门的实时行情源。

实时数据的两种获取方式

免费版:延迟三到五秒

免费用户调用ts.get_realtime_quotes('000001')能拿到当前最新的快照,包含买卖五档、最新价、成交量。这个接口底层是新浪财经或腾讯财经的公开页面,更新频率大概每3到5秒一次。对做日线级别交易的人完全够用,但做日内高频就不行了。

免费接口有频率限制。一分钟内调用超过500次会被封IP,封了得等十分钟自动解。写循环遍历全市场5000只股票,别傻乎乎一只一只拿,tushare支持传入股票列表,一次拿几十只没问题。

如何使用tushare获取实时股票数据

付费版:毫秒级推送

tushare pro的积分用户可以用realtime_quote接口,数据源换成万得或东财的付费通道,延迟压到毫秒级。积分门槛不低,通常要充个几百块一年。好处是支持websocket长连接,行情来了主动推给你,不用轮询。

写量化策略建议用付费版。轮询方式每3秒拉一次全市场数据,网络开销大,还容易漏掉中间的价格跳动。websocket连接一次建立后,服务端每笔成交都往你这边推,策略能及时响应。

实操代码:拉取实时行情


import tushare as ts

import pandas as pd

# 设置token(免费版也要,去官网注册)

ts.set_token('你的token')

pro = ts.pro_api()

# 方式一:免费快照接口

df = ts.get_realtime_quotes(['000001', '600519', '300750'])

print(df[['code', 'name', 'price', 'bid', 'ask', 'volume', 'amount']])

# 方式二:pro版实时接口(需积分)

df2 = pro.realtime_quote(ts_code='000001.SZ,600519.SH')

get_realtime_quotes返回的字段里,price是最新价,pre_close是昨收,volume单位是股,amount单位是元。买卖五档用bid1到bid5和ask1到ask5,配合bid_vol1到bid_vol5看挂单量。

注意几个坑

第一,免费接口的price字段在集合竞价阶段可能是0。9:15到9:25之间调用,拿到的数据不完整,等9:30后再拉。

第二,tushare返回的股票代码格式不统一。老接口用000001,pro接口用000001.SZ。写策略时统一转成带后缀的格式,免得匹配不上。

第三,批量拉取时控制并发。用time.sleep(0.1)在每次请求之间加个短睡眠,避免触发频率限制。5000只股票分100批,每批50只,加0.5秒间隔,全部拉完大概一分钟。

把数据用起来

拿到实时数据后别直接塞进策略。先做本地缓存,用sqlite或redis存最近十分钟的tick数据。策略读缓存而不是频繁调API,既降低被封风险,又加快回测速度。

定时任务用schedule库每3秒跑一次拉取函数,把新数据追加到DataFrame。判断盘中还是盘后看当前时间是否在9:30到15:00之间,非交易时段直接跳过。

做期货的话,tushare的实时接口覆盖有限。国内期货实时数据用ctp接口或vnpy更合适,tushare主要强在股票和指数。想同时监控股票和期货,建议分开数据源。

延迟和稳定性取舍

做趋势跟踪,免费版三秒延迟无所谓。做套利或打板,必须上付费版或交易所直连。tushare的付费通道也有波动,重要策略建议同时接两个数据源做交叉验证,一个断了另一个顶上。

数据质量比速度更重要。收盘后拿tushare的日线数据跟行情软件对一遍,看看有没有明显错漏。发现异常及时换源或联系客服。

说到底,tushare是个工具箱,不是印钞机。工具用顺手了,还得靠策略逻辑和风控活着。

转载请注明出处:https://www.lianghuajiaoyi.top/wenzhang/tushare-shishi-gupiao-shuju-894.html