如何用 easyquotation 新浪行情接口免费获取实时行情:200 毫秒全市场快照实战
【免费下载链接】easyquotation实时获取免费股票行情,支持新浪 / 腾讯(港股) / 集思录项目地址: https://gitcode.com/gh_mirrors/ea/easyquotation
easyquotation 新浪行情接口是一个面向 Python 开发者的免费实时行情数据方案:不需要申请 token、不需要付费订阅,几行代码就能拿到沪深京全市场的行情快照。它适合两类人——想自建盯盘或行情监控工具的普通开发者,以及需要稳定免费数据源来支撑策略的量化爱好者。本文将带你从零跑通第一个请求,再逐步解锁批量获取、指数混查、代码库自动更新等进阶能力。
一、为什么自己抓行情总踩坑:先看一个真实场景
你有没有这样的经历:收盘后想复盘某只股票的关键价位,才发现当时忘了记录,只能翻行情软件的历史界面。于是你想写个小程序自动盯盘,让电脑替你记录和提醒。
真动手时问题就来了:
- 商业行情接口要注册、要审核、要按年付费,个人用不划算;
- 免费的公开接口文档零散,返回的文本格式要靠正则硬啃;
- 自选股一多,逐只请求又慢又不稳定。
手动盯盘太累,付费数据源太贵,裸调接口太麻烦——这就是 easyquotation 要解决的中间地带。它把新浪财经的免费行情接口封装成了几个直观的方法,你只需要关心"要哪只股票",至于市场前缀、请求拼接、响应解析,统统交给库来处理。
二、三步完成安装,跑通第一个新浪行情请求
安装非常简单,依赖只有requests一个包,对 Python 3.6+ 都友好:
pip install easyquotation想从源码运行也可以:git clone https://gitcode.com/gh_mirrors/ea/easyquotation后在项目目录执行pip install -e .,两种方式效果一致。
装好后,运行下面这段最短的代码:
import easyquotation quotation = easyquotation.use('sina') # 选择新浪行情接口 data = quotation.real('000001') # 查询平安银行 print(data)这段代码在做三件事:加载新浪接口、建立会话、请求指定股票并解析成字典。你会得到一个字段相当齐全的行情对象,包含名称、现价、今开、昨收、最高、最低,以及买一到买五、卖一到卖五的完整五档盘口:
{'name': '平安银行', 'now': 11.28, 'open': 11.20, 'high': 11.35, 'low': 11.15, 'close': 11.18, # close 是昨日收盘价,涨跌幅靠它算 'buy': 11.27, 'sell': 11.28, 'bid1': 11.27, 'bid1_volume': 123400, 'ask1': 11.28, 'ask1_volume': 56700, 'turnover': 4852300, 'volume': 54821000.0, # 股数 / 金额 'date': '2026-08-18', 'time': '14:30:00'}到这里,你的第一个实时行情就拿到了。整个过程 10 秒以内,值得留意的是:real()的参数必须是字符串,写成数字000001会直接报错,因为库内部依赖字符串前缀来做市场判断。
三、从单只到批量获取股票行情的正确姿势
real()的入参既支持单个字符串,也支持列表,所以批量查询和单只查询的写法几乎一样:
data = quotation.real('162411') # 单只基金 data = quotation.real(['000001', '162411', '600519']) # 多只混查返回结果是一个以股票代码为键的字典,键的顺序和传入顺序无关,建议用代码去索引而不是依赖顺序。
批量场景下有两个数字值得记住:
- 单次请求最多 800 只股票,超过的部分会自动分批;
- 分批后请求通过线程池并发发出,而不是逐只串行等待。
也就是说,你传 50 只和传 500 只,耗时不会线性增长。这正是它适合做全市场快照的原因——见后文第五节。
四、指数与个股混查:prefix 前缀参数的用法
这里有一个新手最容易踩的坑。上证指数代码是000001,平安银行的代码也是000001,六个数字完全一样,怎么区分?
答案是市场前缀:sh000001是上证指数,sz000001是平安银行。easyquotation 支持直接传入带前缀的代码:
data = quotation.real(['sh000001', 'sz000001'], prefix=True) print(data.keys()) # dict_keys(['sh000001', 'sz000001'])注意prefix=True这个参数:它决定返回字典的键是否带市场前缀。如果你同时查指数和同名个股,却忘了传prefix=True,两个000001就会互相覆盖,安静地丢掉一半数据。
反过来,如果只查个股,prefix保持默认的False即可,返回的键就是纯六位代码,处理起来更清爽。规则一句话总结:混查指数和个股时务必prefix=True,只查个股时随意。
五、全市场行情快照:200 毫秒背后的设计思路
很多场景需要的不是一两只股票,而是整个市场。此时用market_snapshot():
all_data = quotation.market_snapshot(prefix=True) print(len(all_data)) # 数千只股票这一下会返回 A 股全市场的实时行情。网络正常时,整个流程只需要200 多毫秒——这个数字不是夸大,它的来源是库内的几个设计决策:
- 初始化即加载代码表:
use('sina')时会读取内置的stock_codes.conf,一次性生成好带前缀的代码清单,后续请求零准备时间; - 代码拼接代替逐只请求:800 只以内的一次 HTTP 请求里塞进全部代码,把请求次数压到最少;
- 线程池并发:超过 800 只时自动切分,多个分片并行拉取,再把结果合并;
- 会话复用:底层使用
requests.Session,连接被反复利用,省掉重复握手的开销。
理解了这套设计,你就知道为什么同样是免费接口,easyquotation 用起来明显更跟手。需要提醒的是:免费接口没有 SLA,请把轮询频率控制在 3 秒以上,避免对上游造成压力;遇到休市时段,返回的数据可能为空或缺失,代码里记得做空值判断。
六、股票代码库自动更新:跟上新股上市的节奏
新股不断上市、老股偶尔更名,内置的代码表(stock_codes.conf)会随时间慢慢过时。如果你发现全市场快照里少了新上市的股票,只需要一行代码更新:
import easyquotation easyquotation.update_stock_codes()它会从远端拉取最新的代码表并写回本地文件,之后新建的quotation实例就会包含新代码。如果你只想在程序运行时临时拿一份最新列表,而不落盘,可以这样:
from easyquotation import get_stock_codes codes = get_stock_codes(realtime=True) # 强制联网获取建议把更新动作做成每周一次的计划任务,成本极低,却能避免"新股缺席"这类隐蔽的数据问题。
七、新浪行情接口避坑清单与常见问题
把最容易出问题的地方集中列出来,遇到报错时先对照一遍:
- 代码必须是字符串:
real(1)会断言失败,要写real('000001'); - 市场前缀是自动判断的:
43/83/87/92开头归北交所,5/6/7/9/110/113/118/132/204开头归上交所,其余默认深交所。你也可以直接传sh600000手动指定,优先级更高; prefix的语义别搞反:它控制返回键带不带前缀,不是控制请求带不带前缀;- 旧接口已弃用:
all、all_market、stocks都会触发弃用警告,统一改用real()和market_snapshot(); - 裸调新浪接口可能被拒:接口校验
Referer请求头,库已经帮你处理好了,不建议绕过库自行拼接; close是昨日收盘价:别拿它当"今天的收盘价"用,涨跌幅要靠(now - close) / close计算;- 数据为空先别怀疑代码:先确认是否休市、停牌,或者代码是否带错了市场前缀。
八、立刻能落地的三个使用场景
- 自建盯盘提醒:定时调用
real()扫描自选股,价格突破阈值时通过企业微信或邮件通知自己,摆脱手动盯盘; - 量化策略的数据源:用
market_snapshot(prefix=True)定期抓全市场快照落库,作为选股策略的输入,配合get_stock_codes(realtime=True)保持标的池新鲜; - 教学与数据分析:在课堂演示中 200 毫秒拉一份全市场快照,比截图生动得多;也可以定时采集存档,做成交分布、波动率之类的统计研究。
动手:30 秒拿到你的第一份行情
现在打开编辑器,把第二节那段代码原样贴进去跑一遍,30 秒内你就能看到第一份带五档盘口的实时行情。跑通之后,试着把real('000001')换成market_snapshot(prefix=True),感受一下全市场快照的速度,再对照第七节的避坑清单排查可能遇到的问题。数据源有了,剩下的就是你自己的想象力了。
【免费下载链接】easyquotation实时获取免费股票行情,支持新浪 / 腾讯(港股) / 集思录项目地址: https://gitcode.com/gh_mirrors/ea/easyquotation
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考