数据口径 · 指标与管道
tick-stock-panel 的指标存在哪里:15 列存储与 68 列现算的口径
选股、回测与监控口径对不上,是自托管工作台最难排查的一类问题。本页把 tick-stock-panel 的口径设计拆开:存什么、什么时候算、复权怎么处理、财务数据为什么不能提前用,以及官方主动披露的一个偏差。
tick-stock-panel 为什么只存 15 列,却能用 68 列指标?
这是一个存储与计算分离的设计选择,它直接影响你日常使用时会遇到什么。
| 层 | 官方口径 | 对使用者的含义 |
|---|---|---|
| 存储层 | 仅保留 15 列基础数据(行情与成交等原始列) | 存储体积不会随着你加指标而膨胀,新增指标不需要回填数据库 |
| 计算层 | 读取时现算 68 列指标与信号 | 指标定义可随版本更新,不会出现“历史指标用旧公式、新指标用新公式”的不一致 |
| 缓存层 | 带进程内快照缓存 | 同一次请求内不重复计算;但进程重启后首次读取会重算 |
| 写入层 | 向后兼容合并:新增列只追加不改旧列 | 老策略不会因为新增字段而报错 |
TSP 的指标与信号包含哪些类别?
官方在功能文档里列了四大类;下表同时标出它们常用于什么场景。
| 类别 | 官方列举的内容 | 常用场景 |
|---|---|---|
| 均线与趋势 | MA 5–60、EMA、MACD、动量、布林带 | 趋势跟随类策略、均线多头排列、MACD 金叉死叉条件 |
| 震荡与波动 | RSI、KDJ、ATR、年化波动率、振幅 | 超买超卖过滤、风险度量与仓位控制、振幅筛选 |
| 量能与涨跌停 | 量比、量均线、涨停信号、连板数 | 放量突破筛选、连板梯队观察、涨停封板监控 |
| 原子信号 | MA / MACD 金叉死叉、N 日新高新低、布林突破 | 直接用作监控规则的触发条件、或作为策略的入场信号 |
tick-stock-panel 的盘后管道几点跑?都做什么?
理解这段就能解释很多「为什么数据还没到」的疑问。
盘后定时管道默认 15:35 CST
官方把触发时间定在 15:35,而不是收盘的 15:00,因为盘后固定价 15:30 才终止、且供应商日线需要定稿缓冲。
拉日 K
按股票池拉取当日日 K,幂等合并写入分区。首次跑或长时间未跑时量会比较大。
重算 enriched
这一步不产生新的持久化列,而是让后续读取时能拿到最新口径的指标与信号。
跑监控规则
按你配的四类规则评估当日数据,命中则弹窗、入库并推送。
财务数据为什么要按公告日取值?不这样会怎样?
这一节是整个口径体系里最容易被忽略、但对回测结果影响最大的一处。
| 现象 | 官方做法 | 为什么这么重要 |
|---|---|---|
| 同一报告期有多个数据源 | 按 (symbol, period_end) 累积,多源取并集 | 单个源欄列时不会整表缺失,只会少几列 |
| 同一字段多个源都有值 | 逐列按公告日取最新(PIT) | 避免用到当时还没公告的数据——这是回测里最典型的未来函数之一 |
| 公告前的日期 | 一律空值,绝不填 0 | 填 0 会让策略看到一个不存在的事实(例如 PE=0),比空值危害大得多 |
| 本地完全没有财务数据 | 财务因子回测返回明确错误,而不是全空结果 | 全空结果会被误读成“这个因子没效”,实际只是数据没到 |
| 财务因子的生效时点 | 只在晚于公告日的交易日生效(保守取公告次一交易日) | 否则你会在公告当天就“知道”了次日才能知道的事 |
tick-stock-panel 的情绪周期和主线到底怎么算?
这是本项目最容易被误用的一块:它是环境描述,不是交易信号。
| 概念 | tick-stock-panel 的口径 | 对应用户的含义 |
|---|---|---|
| 两套市场状态 | 原有五档 state(强/偏强/震荡/偏弱/弱)与新的 phase(六阶段)并存 | 不是替代关系:一个给机器过滤用,一个给人看周期位置 |
| 六阶段名称 | 冰点 / 启动 / 主升 / 高潮 / 退潮 / 修复 | 驱动量来自连板梯队的高度、宽度、晋级率与梯队完整度 |
| 平滑与确认 | EMA 平滑(alpha=1/3,约 5 日)+ 2 日确认 | 避免每天跳来跳去;代价是转折点会慢一点点 |
| 实测段长 | 平均段长 9.7 天(对比原五档的 1.1–1.5 天) | 旧口径几乎每天都在换状态,改之后才能当周期位置看 |
| 阈值标定来源 | 官方用 2020-08 至 2026-08 全市场 1454 个交易日的 p10/p60/p90 标定,集中在模块顶部常量 | 阈值不是拍脑袋定的,但晚上市场结构变了就需要重标 |
| 弱档否决权 | 当五档 state 为弱或偏弱时,正向阶段一律降为修复 | 修正了「连板梯队很强但大盘崩」被误判为主升的情形 |
| 诚实披露 | 退潮与冰点天然短段(平均 2.8 / 2.5 天);修复占约 74% 天数 | 官方自己写明:A 股大部分时间没有可辨认的周期位置 |
| 主线识别 | 主线分 = 0.35×涨停数 + 0.25×最高板 + 0.25×梯队档位数 + 0.15×二板宽度;每概念当日涨停 <3 家不参与排名 | 排名对散点异动不敏感,但也会漏掉刚起步的小板块 |
| 宽基过滤 | 成员数上限默认 600(夹取 50–5000)、下限默认 4(夹取 1–200)、名称黑名单 | 避免把宽基指数当主线;修改后会自动全量重算主线 |
| 快照回填偏差(重要) | 概念成分用当前快照回看历史,本地自 2026-07 起才留存版本 | 新纳入或改名的个股会出现在旧时段,越早的历史主线越不准;官方以 membership_note 字段随接口返回该提示 |
| 不产生交易信号 | 阶段体系本身不生成信号;挖掘、回测环境过滤与因子 regime 统计仍用原五档 | 不要把 phase 当交易信号用,它只是环境描述 |
同一份数据在四五个页面上是否一致?
tick-stock-panel 把这件事做成了架构保证:下表列出五个消费方各自看到什么。
| 消费方 | 看到的数据 | 与其他地方一致吗 |
|---|---|---|
| 选股扫描 | enriched 指标与信号列 | 与回测同源;策略编辑器里试算的结果就是扫描跑出的结果 |
| 回测引擎 | 同一份前复权序列 | 与选股一致;不会出现“选中了但回测不买”的口径差 |
| 监控中心 | 同一套指标与信号(以及分钟信号的日内口径) | 日线与分钟两套时间级分开定义,不混用 |
| AI 助手 | 通过只读工具取数 | 取数口径与页面一致,且足迹卡可展开核对参数与结果摘要 |
| 因子平台与挖掘 | DSL 字段清单来自同一数据集 | 新增字段会自动出现在因子编辑器可用字段里(包括扩展数据字段) |
关于 tick-stock-panel 数据口径,有哪些常见误解?
下表把易错的理解与实际口径对照,每一条都能在官方文档里找到依据。
| 常见理解 | 实际口径 | 会带来什么后果 |
|---|---|---|
| “指标应该存在数据库里,这样才快” | TSP 反过来做:只存原始列,指标现算 | 代价是首次读取慢一些;换来的是指标定义可随版本统一更新 |
| “不复权也能看趋势” | 对看图确实如此,但对策略不行 | 除权日的向下跳空会误触发均线/MACD 信号,回测与实盘不一致 |
| “财务数据只要拉到就能用” | 还要看公告日 | 同一个报告期可能在不同时间被腾探到,不按公告日取值就是未来函数 |
| “空值影响不大,填 0 也行” | TSP 一律保留空值 | 填 0 会让排序与分层统计出现假值(例如市盈率 0),比缺数据危害大 |
| “情绪周期可以直接当卖点” | 它不生成信号 | 把环境描述当成交易信号,会得到一个看上去很好、实际无效的回测 |
| “历史主线可以直接做回测标签” | 快照回填偏差存在 | 越早的历史越可能归属错位,它更适合做近期环境描述而非长历史因子标签 |
| “多存一些列反正不占地” | 新增列从不覆盖旧列 | 这是为了保证老策略不报错;也意味着你无法通过改列名来“修复”旧策略 |
如果只记一个结论,应该记什么?
这一节把前面八个板块收成一条可复用的判断法。
排查口径问题的三步顺序:① 先看同一天的 enriched 值,判断两处看到的是不是同一份数据;② 再看复权与股票池口径是否一致(这两项最常造成「选中了但回测不买」);③ 最后才去看策略逻辑本身。大多数口径类问题在第一步就能定位。反过来说,如果你每次改完策略都需要靠“跑一遍看看”来验证口径,那就说明口径还没固定下来,先把这三步跑一遍比改策略更值得。
选股与回测口径对不上时,应该按什么顺序排查?
下面这五步是本站基于官方口径归纳的顺序:先固定单一日,再逐层向下比,避免一上来就改策略。
口径对不上时,按这五步排查最快
第一步 · 先固定一天
选一个你熟悉的交易日,而不是抽一个区间。口径对不上的问题,在单一日上最容易看出来。
第二步 · 比基础列
先比开高低收与成交量——这四列一致,才能继续往下查;如果这四列都不一样,问题不在指标层。
第三步 · 比复权方式
看它是不是前复权。如果你从别处导入了已复权的价格,系统又叠了一次除权因子,这里就会偏。
第四步 · 比股票池
选股扫全 A 股,回测只跑你选的标的——两者的可选集不同,结果当然不同。先确认池子,再怀疑逻辑。
第五步 · 最后才看策略
到这一步仍不一致,才值得逐行看策略的过滤条件与评分权重。前四步没做就直接改策略,很容易把口径问题当成策略问题来修。
tick-stock-panel 数据口径与指标常见问题
以下答案基于官方仓库与文档的核验结果;涉及版本、数据源口径与许可条款的内容一律以官方仓库与官方文档为准。指标到底是存在数据库里还是现算的?
两者都有,但分工明确:存储层只保留 15 列基础数据(行情与成交等原始列),68 列指标与信号在读取时现算,并带进程内快照缓存。这样好处是新增指标不需要回填历史;代价是进程重启后首次读取会重算一遍。官方在 README 的「关键机制」里描述了这一设计,具体列清单以官方实现为准。实际体验上,你会在两个地方感受到它:一是刚安装完第一次打开选股页时会等一下,二是指标相关的功能在升级后无需回填历史数据就能直接用上新口径。
为什么一定要用前复权?不复权会怎样?
TSP 基于除权因子自动进行前复权,并且让指标与回测共用同一份复权后数据。如果不复权,除权当日会出现一个并非真实跌幅的向下跳空,均线、MACD、涨跌幅策略都会被误触发。反过来说,前复权也意味着历史价格会随最新除权事件变化,不要把它当永久归档。
为什么我的财务因子回测报错?
因为本地完全没有财务数据时,官方会返回明确错误而不是全空结果——全空结果会被误读成「这个因子没效」。处理方式是先把财务数据拉到本地(需相应能力),再回头跑因子。另外财务因子只在晚于公告日的交易日生效,公告前的日期一律空值并从截面剔除,绝不填 0。
情绪周期六阶段准不准?能当交易信号吗?
不能当交易信号——这是官方明确的口径:阶段体系本身不生成任何交易信号,挖掘、回测环境过滤与因子 regime 统计仍然用原来的五档口径。至于准不准,官方自己写了两个诚实边界:一是修复段占约 74% 天数,说明 A 股大部分时间没有可辨认的周期位置;二是快照回填偏差。
什么是「快照回填偏差」?影响大吗?
概念成分是用当前快照回看历史的,而本地只从 2026-07 起留存版本。结果就是:后来新纳入或改名的个股会出现在它真正归属之前的时段,成分调整会造成归属错位。越早的历史主线越不准,越近越准。这不是缺陷而是真实限制,官方以 membership_note 字段随接口返回,看历史主线时应该把它当作参考信息而不是定论。
为什么非交易日点运行盘后管道没反应?
因为交易日探针会把它跳过。探针是三级的:fuyao 交易日历(确定性最高)、tickflow 全市场行情的时间戳探针(多源取 OR)、工作日兑底。这个设计让节假日自动停掉实时轮询与分钟增量,几乎不产生无效请求;代价是三级都不明确时会按工作日兑底,而不是直接报错停摆。实际使用中你会发现一个好处:因为停掉了无效轮询,不会把限频预算浪费在节假日;它也避免了另一类常见问题——节假日拉到一批空数据后把当日分区写成空分区,导致第二天幂等跳过、数据永远缺一天。