源码级核验:packages/marketdata + server.py DATA_SOURCE_SEEDS

PanWatch 的数据从哪来:11 类行情、主备降级规则与「未校准字段」清单

PanWatch 的行情不是「接一个接口」,而是一层可插拔的数据包:每类数据有多个厂商候选,按优先级尝试、失败就换下一个,并把每次成败记进健康度。本页把覆盖矩阵、默认源与优先级、降级行为与官方自己标注的未校准字段放在一起——最后这一项,几乎没有任何第三方介绍会提。

数据类型:11 类结构化 + 热门榜 + 指数默认源:腾讯 / 新浪 / 东方财富 / 财联社 / Stooq / 同花顺需要自备的:雪球 cookie、yfinance 包、Yahoo 代理依据:packages/marketdata/README.md + server.py(固定 commit)
调用方
Engine(按 priority)
主源
备源 / 兜底
健康度记录
依据 packages/marketdata/README.md 整理的行情取数链路示意图;非官方架构图,默认源与优先级见本页表格。
Coverage matrix

PanWatch 的 11 类数据 + 2 类特殊入口:每类有哪些厂商、覆盖哪些市场

官方 packages/marketdata/README.md 把 VENDOR_CLASSES_BY_TYPE 定义为权威清单——这是「某个类型到底能用哪些源」的权威依据,不是文档转述。

类型含义已实现厂商(覆盖市场)粒度
quote实时报价tencent(CN+HK+US)、sina(US+HK)、eastmoney(CN)、yfinance(HK+US,可选)按标的
kline日 K 线tencent(CN+HK+US)、eastmoney(CN+HK)、stooq(US)、yahoo(US+HK)按标的
capital_flow资金流向eastmoney(CN+HK+US)、sina(CN)按标的
events结构化事件(公告)eastmoney(CN)按标的
flash_news7×24 快讯cls 财联社、sina、eastmoney(均 CN)市场级
fundamentals估值与财报指标tencent(CN)、eastmoney(CN+HK+US)按标的
dragon_tiger龙虎榜eastmoney(CN)市场级(单日快照)
margin融资融券eastmoney(CN)按标的(最新一条)
shareholders股东户数eastmoney(CN)按标的(最新一期)
dividend分红送转eastmoney(CN)按标的(全部历史)
northbound北向资金ths 同花顺(CN)市场级(当日末值)
discovery(特殊)热门榜:个股 / 板块 / 板块成分eastmoney 单源,直连不走 Engine市场级
index(特殊)指数行情与指数日 K行情走腾讯原始符号;日 K 仅映射过的指数(沪深300/上证/深成指/创业板指/恒生)市场级
三类「覆盖度」差异需要注意。① 事件、龙虎榜、两融、股东户数、分红、北向资金只有 A 股;港股与美股拿不到这些维度,深度分析的输入维度自然会变窄。② 美股指数日 K 属于「未映射即返回空」的 fail-soft:代码里只显式映射了少数 A 股与港股指数。③ 资金流向虽然有 eastmoney 覆盖三个市场,但美股与港股的资金流口径与 A 股不同,不宜直接横向比较。
Failover

PanWatch 一次取数失败之后会发生什么:主备链与降级规则

PanWatch 官方把数据包的路径描述为「一条路径,两层」,核心规则只有四条,但决定了所有「行情为空」类现象的成因。

主备故障转移的四个规则

  • 按优先级取候选源:某类型在某市场的启用源,按 priority 从小到大排序(数字越小越先试)。
  • 逐个尝试并过滤:跳过未启用的源和不支持该市场的源;每类数据只认自己的厂商。
  • 取到成功且非空的结果就返回并缓存:K 线还要求条数 ≥ min_count;若所有源都不足,返回条数最多的那一个。
  • 全部失败返回空,而不是抛错:调用方拿到空结果继续跑,所以「页面空着」往往不是崩溃,而是降级。
  • 情形系统的行为你会看到什么怎么确认
    主源失败、备源可用自动切到备源并缓存结果功能正常,但延迟或字段完整度可能不同查数据源页的 health():主源成功率下降、备源上升
    所有源都失败返回空值,不抛异常自选页/详情页数据为空;Agent 仍会跑但输入不完整数据源页逐个点「测试」;看日志里的取数失败记录
    源返回的数据条数不足K 线按 min_count 判定不足后继续试下一个源K 线条数偏少但页面有数据核对 min_count 配置与源的历史深度
    源需要凭据但未配置该源被跳过(默认关闭时就属于未启用)表现为「怎么都用不到那个源」看该源在数据源页是否启用,config 里 cookie/代理是否为空
    缓存命中直接返回缓存,不再请求源数据看起来「没更新」包内 TTL 见下一节;K 线、资金流、事件不在包内缓存
    配置端口的降级特例(src/platform/marketdata/marketdata_client.py)# 腾讯美股接口在当前网络出口稳定返回 501;A/HK 仍保留腾讯作为主源。
    if (datatype == "kline" and market_code == "US"
            and row.provider == "tencent" and has_us_fallback):
        continue
    上面这段是宿主侧写死的规避:当存在 stooq 或 yahoo 兜底时,美股 K 线会主动跳过腾讯源。它的含义是「A 股/港股的主源经验不适用于美股」——如果你自己新增数据源,也要考虑这种按市场分叉的处理。
    Defaults

    PanWatch 默认启用了哪些源?优先级是多少?

    下表来自 server.py 的 DATA_SOURCE_SEEDS(只增不删的 upsert 种子):它是「开箱即用」的真实状态,而不是文档里的能力清单。

    类型默认启用的源(优先级)默认关闭的源说明
    报价 quote腾讯(0)→ 东方财富(3)→ 新浪(5)YFinance(10)YFinance 需 pip install yfinance,且不支持 A 股
    日 K kline腾讯(0)→ 东方财富(5)→ Stooq(15)Yahoo(20)Yahoo 国内访问通常需代理,官方建议配好 proxy 再开
    资金流 capital_flow东方财富(0)→ 新浪(5)—新浪仅含主力/超大单净额,无大/中/小单细分
    事件 events东方财富(0)—基于公告结构化
    快讯 flash_news财联社(0)→ 新浪(5)→ 东方财富(10)—市场级,7×24;与市场级数据不按标的过滤
    基本面 fundamentals腾讯(0)→ 东方财富(5)—腾讯只覆盖 A 股;东财覆盖 CN/HK/US
    龙虎榜 / 两融 / 股东户数 / 分红东方财富(0)—均为 A 股,注意龙虎榜是市场级单日快照
    北向资金 northbound同花顺(0)—种子描述写明「东财已断供;深股通近期不可靠」
    资讯 news东方财富资讯(1)→ 东方财富公告(2)雪球资讯(0)雪球需要登录 cookie,所以虽然优先级最高但默认关闭
    K 线截图 chart雪球(0,视口 1280×900,额外等待 3000ms)东方财富截图(1,额外等待 2000ms)这一项依赖 Playwright/Chromium,是首次启动要下载浏览器的原因
    看这张表的正确方式:「支持」不等于「默认开启」。三类需要额外条件的源(雪球 cookie、YFinance 依赖、Yahoo 代理)默认都是关闭的,理由是官方在贡献指南里写的原则——需要凭据或代理的服务商通常应默认关闭。如果你看到某个源「怎么都不生效」,先去数据源页确认它是否被启用。
    Cache and health

    PanWatch 缓存与健康度:为什么数据看起来没更新

    缓存分两层:数据包内的 TTL 与宿主侧的采集缓存。下表是包内的默认 TTL(写在代码里,不是配置)。

    数据类型包内缓存 TTL含义与影响
    报价 quote5 秒防止同一轮里重复打源;提醒引擎自己还有一层 5 秒缓存
    快讯 flash_news30 秒7×24 快讯的刷新下限
    北向资金 northbound60 秒当日末值快照
    基本面 / 龙虎榜 / 两融 / 股东户数 / 分红300 秒(5 分钟)低频数据,长缓存可显著减少请求
    日 K kline、资金流 capital_flow、事件 events不在包内缓存(0)由宿主自己缓存;这也是为什么这类数据的实时性取决于宿主 collector
    健康度 health()内存滚动窗口最近 100 次每个厂商的成功率 / p50 延迟 / 最近错误 / 样本数
    排查「数据没更新」的顺序:① 看是不是命中缓存(报价 5s、低频 5 分钟);② 看数据源页健康度里该源的成功率与最近错误;③ 看该类型是不是压根不在包内缓存——K 线/资金流/事件的刷新由宿主 collector 决定,与上面的 TTL 无关。
    Uncalibrated fields

    PanWatch 官方标注的「未校准字段」有哪些?七类数据的解析没经过真实抓取验证

    这是本站认为 PanWatch 最值得单独成节的一条:packages/marketdata/README.md 用一整段写明——新增类型的字段解析多数未经真实网络抓取验证,因为开发沙箱的代理会拦截东财与同花顺接口。

    packages/marketdata/README.md(原文节选)⚠️ 字段映射校准现状
    
    B 阶段新增类型(flash_news / fundamentals / dragon_tiger / margin /
    shareholders / dividend / northbound)的字段解析,多数未经真实网络抓取验证
    (开发沙箱代理会拦截东财/同花顺等接口,只能靠接口文档 + 历史 PanWatch
    collector 实现推断字段映射)。各 dataclass 的 docstring 里已标注"字段待实抓校准"。
    涉及类型为什么容易出问题官方建议的验证方式
    flash_news 快讯三个源的字段结构不同,且有市场级/标的级两套语义在数据源页对该 (type, provider) 点「测试」,核对返回字段
    fundamentals 基本面腾讯只给 A 股估值快照,东财走另一套接口(美股/港股用 GMAININDICATOR)分别用 A 股与美股标的测试,确认字段能对上
    dragon_tiger 龙虎榜市场级单日快照,需要 test_date;日期不给就返回空配一个已知有龙虎榜的交易日再测
    margin / shareholders / dividend取最新一条 / 最新一期 / 全部历史三种不同语义重点核对时间口径是否与你以为的一致
    northbound 北向资金官方种子描述直接写「东财已断供;深股通近期不可靠」,且 sgt_net 被点名为已知不稳定字段以同花顺源测试,并把该数值视为「参考」而非「权威」
    这条对你意味着什么:如果你打算把 PanWatch 的新闻、基本面、龙虎榜或北向资金数据用于严肃判断,先自己做一次字段校准,不要假设它能开箱即对。官方给的建议是「若字段错位/为空,对照 vendor 源码与实际响应调整解析逻辑,而不是照抄文档字段名」——也就是说,这属于需要你自己承担的数据质量风险,而不是一个已经闭环的能力。
    FAQ

    PanWatch 数据源与行情为空常见问题

    答案基于固定 commit 的源码与官方包文档;数据源可用性会随上游接口变化,请以你部署时的实际测试为准。

    相关页面:自动化 Agent 与条件提醒 · 故障排查手册

    PanWatch 需要买行情数据吗?

    默认不需要。开箱即用的源都是免 key 的公开接口:腾讯、新浪、东方财富、财联社、Stooq、同花顺。雪球资讯需要登录 cookie,YFinance 需要额外装包,Yahoo 需要代理——这三项默认关闭。免费源的代价是:延迟不保证、字段稳定性不保证、可能随时变动。

    「11 类数据」具体指什么?

    报价、日 K、资金流、事件(公告)、快讯、基本面、龙虎榜、融资融券、股东户数、分红、北向资金。除此之外还有两类不进主引擎的特殊入口:热门榜(个股/板块/板块成分)与指数行情/指数日 K。每类的厂商覆盖与市场范围不同,详见本页覆盖矩阵。

    为什么我的自选页行情是空的?

    最可能是降级的结果而不是崩溃:所有候选源都失败时,系统返回空值并继续运行。排查顺序是:① 数据源页逐个点「测试」看哪个源活着;② 看健康度的成功率与最近错误;③ 确认该源是否启用(需要凭据/代理的源默认关闭);④ 确认标的代码符合该市场的正则(A 股 6 位、港股 5 位、美股字母)。

    主源挂了会自动切换吗?

    会。按 priority 顺序尝试,取到成功且非空的源就返回并缓存。K 线还有条数门槛:某源返回条数少于 min_count 会被视为不足并继续试下一个;全部不足时返回条数最多的那个。每次取数都会记进健康度,可在数据源页查看。

    港股和美股能用哪些数据?

    报价与日 K 覆盖较好(报价:腾讯/新浪/yfinance;日 K:腾讯/东财/Stooq/Yahoo)。基本面靠东财(CN+HK+US);资金流向东财也覆盖三个市场,但口径与 A 股不同。事件、龙虎榜、两融、股东户数、分红、北向资金只有 A 股,港股/美股拿不到这些维度。

    数据看起来没更新,是卡住了吗?

    先看缓存:报价 5 秒、快讯 30 秒、基本面/龙虎榜/两融/股东户数/分红 5 分钟、北向资金 60 秒。而日 K、资金流与事件不在包内缓存,刷新节奏由宿主采集层决定。如果超过这些窗口仍然不动,再去数据源页看该源的健康度。

    官方的数据源可靠吗?有没有已知问题?

    官方在包文档里主动披露了两类问题:① 七类新增数据(快讯/基本面/龙虎榜/两融/股东户数/分红/北向)的字段解析多数未经真实网络验证,dataclass 里标注「字段待实抓校准」;② 北向资金条目写明「东财已断供;深股通近期不可靠」。本站把这看作可信度信号——但使用时必须自己先做一次字段校准。

    数据能取到了,接下来它什么时候会提醒你?

    提醒不是「命中就推」:要依次过启用、过期、交易时段、日上限、冷却与去重六道门槛,静默时段还有自己的时区。