☰
tick-stock-panel零运维的秘密:15:30盘后定时管道全流程解析
2026/10/10 2:33:14 网站建设 项目流程

tick-stock-panel零运维的秘密:15:30盘后定时管道全流程解析

【免费下载链接】tick-stock-panelTSP自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台 | LLM能力驱使策略定制+个股分析+复盘 | 自由接入第三方数据源与个性化扩展数据 | 个人开源项目地址: https://gitcode.com/GitHub_Trending/ti/tick-stock-panel

tick-stock-panel 是一个自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台。它的零运维核心,是一条在收盘后自动执行的盘后定时管道:同步日K、补除权因子、重算指标、结算模拟盘、推送复盘报告——全程无需人工干预。本文带你完整拆解这条 A 股量化盘后管道是如何做到"开机即忘"的。

为什么默认设在 15:35,而不是 15:30?

A 股的盘后固定价格交易要到 15:30 才彻底终止,且供应商的日线数据还需要一点时间定稿。所以管道默认15:35触发,用 5 分钟缓冲保证拿到的是"官方收盘价",而非 15:30 前的盘中快照(源码注释里明确写着这个原因)。

调度器start_scheduler在 backend/app/jobs/daily_pipeline.py#L1271-L1397 里注册了整套工作日(mon-fri、Asia/Shanghai)定时任务:

时间任务说明
09:10盘前维表同步同步个股维表(含当日涨跌停价),刷新缓存
15:02五档盘口定版收盘快照 sealed 定版
15:35盘后管道本文主角,日K + 除权 + 指标 + 结算
15:40AI 定时复盘可选,流式生成报告并归档、推送

时间均可在面板设置页调整,偏好读取逻辑见 backend/app/services/preferences.py#L490-L512。

管道全流程:从维表到视图刷新的 8 个阶段

整条管道的主函数是run_now(backend/app/jobs/daily_pipeline.py#L192-L800),每个阶段都会向前端汇报进度,你在数据页能看到实时进度条:

1. 同步个股维表

先更新 instruments 维表,确保涨跌停价、连板梯队等读到的是当日最新值,避免"前一日残留"。

2. 解析标的池

_resolve_universe优先拉取沪深京 A 股全市场(约 5500+ 只);无批量拉取能力时自动降级为"自选 + 维表"兜底,免费用户也能跑通管道。

3. 日K同步(最聪明的一步)

这里不是无脑全量拉取,而是按场景分四条路径:

  • 今天已有数据→ 用一次实时行情请求覆写全市场(1 个请求搞定)
  • 有历史缺口→ 从最新日期或"最早坏日"批量补齐
  • 首次运行→ 拉取 1 年历史
  • 数据修正→ 指定起始日强制批量回补

拉取前还有一道完整性自愈:data_integrity扫描会检查最近交易日是否存在盘中快照残留或分区缺口(比如服务器中午停机留下的半截数据),命中后自动把拉取起点提前到坏日,降级为范围拉取修复——这正是"零运维"的关键一环。

4. 除权因子增量同步

从已有数据最新日期的下一天开始增量获取,与日K范围对齐;实时增量分支则兜底拉最近 15 天,覆盖春节/国庆长假期间的新除权事件。merge + unique幂等设计让多拉无副作用。

5. enriched 指标计算(全量/增量四分支)

指标宽表的计算策略非常精细:首次运行或往前扩展历史 → 全量重建;往后新增日期 → 增量补新区块 + 受除权影响个股全日期重算;无新日期但有新除权 → 只重算受影响个股;毫无变化 → 直接跳过。计算前还会剪枝两类脏分区:覆盖不全的分区(#L37-L73)和收盘价停留在竞价前快照的分区(#L76-L115),删掉后当"新日期"重算,实现值级自愈。

管道产出的指标数据直接驱动连板梯队、选股等页面

6. 指数 / ETF 同步

物理分开存储(指数不复权、ETF 可复权),支持独立开关,起点取本地最新日期到今天,完整性修复时自动提前到最早坏日。

7. 市场环境 + 市场主线增量计算

regime聚合每日环境指标(情绪周期、阶段切换),检测到阶段切换(如退潮→冰点)还会通过监控通道推送告警;mainline聚合概念/行业的涨停梯队,增量通常只有 1 天,开销可忽略。

盘后管道第 7 步产出的市场环境分析页

8. 模拟盘结算 + 刷新视图

按当日开盘/收盘价撮合模拟盘顺延单 → 除权调整 → 定版净值。订单状态与除权台账双重守卫保证幂等:重跑同日不会重复成交或二次除权。最后刷新全部 DuckDB 视图并失效内存缓存,次日开盘连板梯队等基准列不会停留在旧交易日。

零运维的 5 个工程细节

读懂源码后会发现,"自动"背后是一组防御性设计:

  1. 单飞 + 执行槽:调度或手动触发时,若已有活跃任务直接复用/跳过,杜绝并发写同一批 parquet(backend/app/services/pipeline_jobs.py);管道运行期间还会暂停实时行情取数,防覆写竞态。
  2. 软失败不误报:非关键阶段(环境、主线、结算)单独 try/except 不阻断主管道,但只要有阶段失败,管道末尾抛出PipelineStageError,任务终态如实标记为 failed——不再"部分失败却报成功"(#L118-L128)。
  3. 卡死自愈:任务按"进度停滞"而非总时长判定卡死,reap_stale在轮询时自动收割僵尸任务,无需人工重启。
  4. 北京时间锚定:管道内的"今天"用cn_today()计算(backend/app/market_time.py),美西主机 15:35 仍是本地昨天,不锚定北京时间会把昨日日K误判为已齐。
  5. 能力热更新:每小时重探一次数据源能力,Key 过期/续费无需重启服务即可被感知。

监控中心可看到盘后结算成交留痕与各类触发记录

管道跑完之后:AI 复盘自动接力

盘后管道成功后,若开启了 AI 定时复盘(默认 15:40),系统会流式生成当日大盘复盘报告:边生成边推送到打开的页面,断流自动重试 2 次,完成后归档并可选推送到飞书 / 企业微信 / Webhook / 邮箱(#L1046-L1113)。另外每周挖掘任务也会在管道成功后自动入队。

盘后定时任务自动生成的 AI 复盘报告

上手三步 & 源码索引

  • 首次使用:设置里配置数据源 → 立即跑一次盘后管道(拉日K + 算指标)→ 选股/监控页面即可用,顺序建议见 docs/features.md
  • 调整时间/拉取范围:面板设置页可视化修改,配置项说明见 docs/configuration.md
  • 手动触发:POST /api/pipeline/run异步返回 job_id,轮询进度,AI 助手也走同一条触发路径(backend/app/api/pipeline.py)

想深入阅读,从这几个文件开始:

  • 管道主体与调度:backend/app/jobs/daily_pipeline.py
  • 指标计算:backend/app/indicators/pipeline.py
  • 完整性自愈:backend/app/services/data_integrity.py
  • 任务化执行:backend/app/services/pipeline_jobs.py

【免费下载链接】tick-stock-panelTSP自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台 | LLM能力驱使策略定制+个股分析+复盘 | 自由接入第三方数据源与个性化扩展数据 | 个人开源项目地址: https://gitcode.com/GitHub_Trending/ti/tick-stock-panel

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询