数据口径 · 指标与管道

tick-stock-panel 的指标存在哪里:15 列存储与 68 列现算的口径

选股、回测与监控口径对不上,是自托管工作台最难排查的一类问题。本页把 tick-stock-panel 的口径设计拆开:存什么、什么时候算、复权怎么处理、财务数据为什么不能提前用,以及官方主动披露的一个偏差。

本页回答:指标存在哪 / 什么时候算 / 口径一致吗依据:官方 README 关键机制、docs/features.md、docs/market-phase.md本站未实机验证字段清单:列数为官方口径
存储 15 列
现算 68 列
快照缓存
盘后管道
tick-stock-panel 的数据口径与盘后管道示意(依据官方 README 关键机制与 docs/features.md、docs/market-phase.md 整理,非官方数据流图)。图中列数为官方口径,本站未实机核对具体字段清单。
Storage vs compute

tick-stock-panel 为什么只存 15 列,却能用 68 列指标?

这是一个存储与计算分离的设计选择,它直接影响你日常使用时会遇到什么。

层官方口径对使用者的含义
存储层仅保留 15 列基础数据(行情与成交等原始列)存储体积不会随着你加指标而膨胀,新增指标不需要回填数据库
计算层读取时现算 68 列指标与信号指标定义可随版本更新,不会出现“历史指标用旧公式、新指标用新公式”的不一致
缓存层带进程内快照缓存同一次请求内不重复计算;但进程重启后首次读取会重算
写入层向后兼容合并:新增列只追加不改旧列老策略不会因为新增字段而报错
为什么说这是一个「修正成本很低」的设计:如果指标是预算好写进库的,那么每次修正口径(比如发现某个均线算错了一个参数)都要重算全部历史,而且你永远不知道哪些旧据是旧口径算的。现算的代价只是首次读取慢,但它换来两件事:口径永远一致,以及回测可复现。对一个你要拿来审计结果的工具来说,后者比前者重要得多。
Indicator list

TSP 的指标与信号包含哪些类别?

官方在功能文档里列了四大类;下表同时标出它们常用于什么场景。

类别官方列举的内容常用场景
均线与趋势MA 5–60、EMA、MACD、动量、布林带趋势跟随类策略、均线多头排列、MACD 金叉死叉条件
震荡与波动RSI、KDJ、ATR、年化波动率、振幅超买超卖过滤、风险度量与仓位控制、振幅筛选
量能与涨跌停量比、量均线、涨停信号、连板数放量突破筛选、连板梯队观察、涨停封板监控
原子信号MA / MACD 金叉死叉、N 日新高新低、布林突破直接用作监控规则的触发条件、或作为策略的入场信号
复权口径是这一层最关键的约定:TSP 基于除权因子自动进行前复权,且指标与回测共用同一份复权后数据。这意味着你不会遇到「指标看着金叉了,但回测因为用了不复权价而没买入」这种事。但它也带来一个你需要知道的后果:历史价格会随最新除权事件变化,所以不要把某天拄下来的绝对价格当成永久不变的归档值。
After-hours pipeline

tick-stock-panel 的盘后管道几点跑?都做什么?

理解这段就能解释很多「为什么数据还没到」的疑问。

  • 盘后定时管道默认 15:35 CST

    官方把触发时间定在 15:35,而不是收盘的 15:00,因为盘后固定价 15:30 才终止、且供应商日线需要定稿缓冲。

  • 拉日 K

    按股票池拉取当日日 K,幂等合并写入分区。首次跑或长时间未跑时量会比较大。

  • 重算 enriched

    这一步不产生新的持久化列,而是让后续读取时能拿到最新口径的指标与信号。

  • 跑监控规则

    按你配的四类规则评估当日数据,命中则弹窗、入库并推送。

  • 交易日探针是三级的,不是单一判定:第一级用 fuyao 交易日历(确定性最高,含调休);第二级用 tickflow 全市场行情的时间戳探针(多个源取 OR);第三级才是工作日兑底。好处是节假日会自动停掉实时轮询与分钟增量,几乎不会产生无效请求。代价是:当三级都没给出明确答案时,它会按工作日兑底——这是为了不让流水线因为探针失败而整体停摆。
    Financial PIT merge

    财务数据为什么要按公告日取值?不这样会怎样?

    这一节是整个口径体系里最容易被忽略、但对回测结果影响最大的一处。

    现象官方做法为什么这么重要
    同一报告期有多个数据源按 (symbol, period_end) 累积,多源取并集单个源欄列时不会整表缺失,只会少几列
    同一字段多个源都有值逐列按公告日取最新(PIT)避免用到当时还没公告的数据——这是回测里最典型的未来函数之一
    公告前的日期一律空值,绝不填 0填 0 会让策略看到一个不存在的事实(例如 PE=0),比空值危害大得多
    本地完全没有财务数据财务因子回测返回明确错误,而不是全空结果全空结果会被误读成“这个因子没效”,实际只是数据没到
    财务因子的生效时点只在晚于公告日的交易日生效(保守取公告次一交易日)否则你会在公告当天就“知道”了次日才能知道的事
    这一层的共同原则只有一条:宁可缺,不可假。缺数据会让因子在那一天被剔除,你能看到样本变少;假数据会让因子看起来在那一天表现很好,而你不会发现任何异常。对一个要拿回测结果做判断的人来说,前者只是麻烦,后者是危险。
    Market regime

    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 当交易信号用,它只是环境描述
    Consistency matrix

    同一份数据在四五个页面上是否一致?

    tick-stock-panel 把这件事做成了架构保证:下表列出五个消费方各自看到什么。

    消费方看到的数据与其他地方一致吗
    选股扫描enriched 指标与信号列与回测同源;策略编辑器里试算的结果就是扫描跑出的结果
    回测引擎同一份前复权序列与选股一致;不会出现“选中了但回测不买”的口径差
    监控中心同一套指标与信号(以及分钟信号的日内口径)日线与分钟两套时间级分开定义,不混用
    AI 助手通过只读工具取数取数口径与页面一致,且足迹卡可展开核对参数与结果摘要
    因子平台与挖掘DSL 字段清单来自同一数据集新增字段会自动出现在因子编辑器可用字段里(包括扩展数据字段)
    Myths

    关于 tick-stock-panel 数据口径,有哪些常见误解?

    下表把易错的理解与实际口径对照,每一条都能在官方文档里找到依据。

    常见理解实际口径会带来什么后果
    “指标应该存在数据库里,这样才快”TSP 反过来做:只存原始列,指标现算代价是首次读取慢一些;换来的是指标定义可随版本统一更新
    “不复权也能看趋势”对看图确实如此,但对策略不行除权日的向下跳空会误触发均线/MACD 信号,回测与实盘不一致
    “财务数据只要拉到就能用”还要看公告日同一个报告期可能在不同时间被腾探到,不按公告日取值就是未来函数
    “空值影响不大,填 0 也行”TSP 一律保留空值填 0 会让排序与分层统计出现假值(例如市盈率 0),比缺数据危害大
    “情绪周期可以直接当卖点”它不生成信号把环境描述当成交易信号,会得到一个看上去很好、实际无效的回测
    “历史主线可以直接做回测标签”快照回填偏差存在越早的历史越可能归属错位,它更适合做近期环境描述而非长历史因子标签
    “多存一些列反正不占地”新增列从不覆盖旧列这是为了保证老策略不报错;也意味着你无法通过改列名来“修复”旧策略
    Reading the contract

    如果只记一个结论,应该记什么?

    这一节把前面八个板块收成一条可复用的判断法。

    如果只记一个结论,记这个:tick-stock-panel 把「什么是原始事实」与「怎么算出结论」分开了。原始事实(行情、成交、财务披露)落盘且不再改;结论(指标、信号、因子、环境标签)在读取时算出来。这个分界线是理解后续所有口径问题的钥匙:为什么新增指标不需要回填历史,为什么旧策略不会因新字段而报错,以及为什么你看到的「历史价格」会随最新除权而变。

    排查口径问题的三步顺序:① 先看同一天的 enriched 值,判断两处看到的是不是同一份数据;② 再看复权与股票池口径是否一致(这两项最常造成「选中了但回测不买」);③ 最后才去看策略逻辑本身。大多数口径类问题在第一步就能定位。反过来说,如果你每次改完策略都需要靠“跑一遍看看”来验证口径,那就说明口径还没固定下来,先把这三步跑一遍比改策略更值得。
    Check order

    选股与回测口径对不上时,应该按什么顺序排查?

    下面这五步是本站基于官方口径归纳的顺序:先固定单一日,再逐层向下比,避免一上来就改策略。

    口径对不上时,按这五步排查最快

  • 第一步 · 先固定一天

    选一个你熟悉的交易日,而不是抽一个区间。口径对不上的问题,在单一日上最容易看出来。

  • 第二步 · 比基础列

    先比开高低收与成交量——这四列一致,才能继续往下查;如果这四列都不一样,问题不在指标层。

  • 第三步 · 比复权方式

    看它是不是前复权。如果你从别处导入了已复权的价格,系统又叠了一次除权因子,这里就会偏。

  • 第四步 · 比股票池

    选股扫全 A 股,回测只跑你选的标的——两者的可选集不同,结果当然不同。先确认池子,再怀疑逻辑。

  • 第五步 · 最后才看策略

    到这一步仍不一致,才值得逐行看策略的过滤条件与评分权重。前四步没做就直接改策略,很容易把口径问题当成策略问题来修。

  • FAQ

    tick-stock-panel 数据口径与指标常见问题

    以下答案基于官方仓库与文档的核验结果;涉及版本、数据源口径与许可条款的内容一律以官方仓库与官方文档为准。
    指标到底是存在数据库里还是现算的?

    两者都有,但分工明确:存储层只保留 15 列基础数据(行情与成交等原始列),68 列指标与信号在读取时现算,并带进程内快照缓存。这样好处是新增指标不需要回填历史;代价是进程重启后首次读取会重算一遍。官方在 README 的「关键机制」里描述了这一设计,具体列清单以官方实现为准。实际体验上,你会在两个地方感受到它:一是刚安装完第一次打开选股页时会等一下,二是指标相关的功能在升级后无需回填历史数据就能直接用上新口径。

    为什么一定要用前复权?不复权会怎样?

    TSP 基于除权因子自动进行前复权,并且让指标与回测共用同一份复权后数据。如果不复权,除权当日会出现一个并非真实跌幅的向下跳空,均线、MACD、涨跌幅策略都会被误触发。反过来说,前复权也意味着历史价格会随最新除权事件变化,不要把它当永久归档。

    为什么我的财务因子回测报错?

    因为本地完全没有财务数据时,官方会返回明确错误而不是全空结果——全空结果会被误读成「这个因子没效」。处理方式是先把财务数据拉到本地(需相应能力),再回头跑因子。另外财务因子只在晚于公告日的交易日生效,公告前的日期一律空值并从截面剔除,绝不填 0。

    情绪周期六阶段准不准?能当交易信号吗?

    不能当交易信号——这是官方明确的口径:阶段体系本身不生成任何交易信号,挖掘、回测环境过滤与因子 regime 统计仍然用原来的五档口径。至于准不准,官方自己写了两个诚实边界:一是修复段占约 74% 天数,说明 A 股大部分时间没有可辨认的周期位置;二是快照回填偏差。

    什么是「快照回填偏差」?影响大吗?

    概念成分是用当前快照回看历史的,而本地只从 2026-07 起留存版本。结果就是:后来新纳入或改名的个股会出现在它真正归属之前的时段,成分调整会造成归属错位。越早的历史主线越不准,越近越准。这不是缺陷而是真实限制,官方以 membership_note 字段随接口返回,看历史主线时应该把它当作参考信息而不是定论。

    为什么非交易日点运行盘后管道没反应?

    因为交易日探针会把它跳过。探针是三级的:fuyao 交易日历(确定性最高)、tickflow 全市场行情的时间戳探针(多源取 OR)、工作日兑底。这个设计让节假日自动停掉实时轮询与分钟增量,几乎不产生无效请求;代价是三级都不明确时会按工作日兑底,而不是直接报错停摆。实际使用中你会发现一个好处:因为停掉了无效轮询,不会把限频预算浪费在节假日;它也避免了另一类常见问题——节假日拉到一批空数据后把当日分区写成空分区,导致第二天幂等跳过、数据永远缺一天。

    口径看懂了,下一步怎么用 tick-stock-panel 选股?

    先看选股与信号体系(含内置策略口径冲突的说明),再进回测可信度审计页。