shy3130/tick-stock-panelPublic

TSP自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台 | LLM能力驱使策略定制+个股分析+复盘 | 自由接入第三方数据源与个性化扩展数据 | 个人开源

AI summary: A self-hosted, zero-maintenance quantitative workspace for screening, monitoring, and backtesting Chinese A-shares.

Stars
5.5K
+122 today
Forks
1.3K
Watchers
34
Open issues
19
Open PRs
9
Contributors
~34
Commits
1K
Branches
4

PythonMITCreated Jun 18, 2026Last push 5d ago+244 stars this week+344 this month

Quick answers

What is tick-stock-panel?
A self-hosted, zero-maintenance quantitative workspace for screening, monitoring, and backtesting Chinese A-shares.
What does tick-stock-panel do?
Tick Stock Panel provides an all-in-one platform for quantitative stock analysis focused specifically on the Chinese market. It features a robust data routing engine to pull financial metrics and execute minute-level trading strategies. The system integrates full-time anomaly monitoring to catch sudden market movements and includes an AI conversational assistant for querying data. It is designed to be fully self-hosted, ensuring user privacy and zero ongoing maintenance fees.
Who is tick-stock-panel for?
Quantitative analysts and algorithmic traders operating in the Chinese A-share market. Familiarity with TypeScript and local deployment is helpful.
How do I get started with tick-stock-panel?
npm install && npm start
How popular is tick-stock-panel on GitHub?
shy3130/tick-stock-panel has 5,462 stars and 1,313 forks on GitHub, and gained 244 stars in the last 7 days.
What license does tick-stock-panel use?
shy3130/tick-stock-panel is released under the MIT license.

Star history

since Sep 25, 2026
02K4KSep 2026Sep 2026Sep 2026Oct 2026
5.5K stars as of Oct 3, 2026. Measured daily since Sep 25, 2026; GitHub no longer exposes earlier star timestamps.

Contribution activity

commits per day, last 52 weeks
OctNovDecJanFebMarAprMayJunJulAugSepMonWedFri2025-10-05: 0 commits2025-10-06: 0 commits2025-10-07: 0 commits2025-10-08: 0 commits2025-10-09: 0 commits2025-10-10: 0 commits2025-10-11: 0 commits2025-10-12: 0 commits2025-10-13: 0 commits2025-10-14: 0 commits2025-10-15: 0 commits2025-10-16: 0 commits2025-10-17: 0 commits2025-10-18: 0 commits2025-10-19: 0 commits2025-10-20: 0 commits2025-10-21: 0 commits2025-10-22: 0 commits2025-10-23: 0 commits2025-10-24: 0 commits2025-10-25: 0 commits2025-10-26: 0 commits2025-10-27: 0 commits2025-10-28: 0 commits2025-10-29: 0 commits2025-10-30: 0 commits2025-10-31: 0 commits2025-11-01: 0 commits2025-11-02: 0 commits2025-11-03: 0 commits2025-11-04: 0 commits2025-11-05: 0 commits2025-11-06: 0 commits2025-11-07: 0 commits2025-11-08: 0 commits2025-11-09: 0 commits2025-11-10: 0 commits2025-11-11: 0 commits2025-11-12: 0 commits2025-11-13: 0 commits2025-11-14: 0 commits2025-11-15: 0 commits2025-11-16: 0 commits2025-11-17: 0 commits2025-11-18: 0 commits2025-11-19: 0 commits2025-11-20: 0 commits2025-11-21: 0 commits2025-11-22: 0 commits2025-11-23: 0 commits2025-11-24: 0 commits2025-11-25: 0 commits2025-11-26: 0 commits2025-11-27: 0 commits2025-11-28: 0 commits2025-11-29: 0 commits2025-11-30: 0 commits2025-12-01: 0 commits2025-12-02: 0 commits2025-12-03: 0 commits2025-12-04: 0 commits2025-12-05: 0 commits2025-12-06: 0 commits2025-12-07: 0 commits2025-12-08: 0 commits2025-12-09: 0 commits2025-12-10: 0 commits2025-12-11: 0 commits2025-12-12: 0 commits2025-12-13: 0 commits2025-12-14: 0 commits2025-12-15: 0 commits2025-12-16: 0 commits2025-12-17: 0 commits2025-12-18: 0 commits2025-12-19: 0 commits2025-12-20: 0 commits2025-12-21: 0 commits2025-12-22: 0 commits2025-12-23: 0 commits2025-12-24: 0 commits2025-12-25: 0 commits2025-12-26: 0 commits2025-12-27: 0 commits2025-12-28: 0 commits2025-12-29: 0 commits2025-12-30: 0 commits2025-12-31: 0 commits2026-01-01: 0 commits2026-01-02: 0 commits2026-01-03: 0 commits2026-01-04: 0 commits2026-01-05: 0 commits2026-01-06: 0 commits2026-01-07: 0 commits2026-01-08: 0 commits2026-01-09: 0 commits2026-01-10: 0 commits2026-01-11: 0 commits2026-01-12: 0 commits2026-01-13: 0 commits2026-01-14: 0 commits2026-01-15: 0 commits2026-01-16: 0 commits2026-01-17: 0 commits2026-01-18: 0 commits2026-01-19: 0 commits2026-01-20: 0 commits2026-01-21: 0 commits2026-01-22: 0 commits2026-01-23: 0 commits2026-01-24: 0 commits2026-01-25: 0 commits2026-01-26: 0 commits2026-01-27: 0 commits2026-01-28: 0 commits2026-01-29: 0 commits2026-01-30: 0 commits2026-01-31: 0 commits2026-02-01: 0 commits2026-02-02: 0 commits2026-02-03: 0 commits2026-02-04: 0 commits2026-02-05: 0 commits2026-02-06: 0 commits2026-02-07: 0 commits2026-02-08: 0 commits2026-02-09: 0 commits2026-02-10: 0 commits2026-02-11: 0 commits2026-02-12: 0 commits2026-02-13: 0 commits2026-02-14: 0 commits2026-02-15: 0 commits2026-02-16: 0 commits2026-02-17: 0 commits2026-02-18: 0 commits2026-02-19: 0 commits2026-02-20: 0 commits2026-02-21: 0 commits2026-02-22: 0 commits2026-02-23: 0 commits2026-02-24: 0 commits2026-02-25: 0 commits2026-02-26: 0 commits2026-02-27: 0 commits2026-02-28: 0 commits2026-03-01: 0 commits2026-03-02: 0 commits2026-03-03: 0 commits2026-03-04: 0 commits2026-03-05: 0 commits2026-03-06: 0 commits2026-03-07: 0 commits2026-03-08: 0 commits2026-03-09: 0 commits2026-03-10: 0 commits2026-03-11: 0 commits2026-03-12: 0 commits2026-03-13: 0 commits2026-03-14: 0 commits2026-03-15: 0 commits2026-03-16: 0 commits2026-03-17: 0 commits2026-03-18: 0 commits2026-03-19: 0 commits2026-03-20: 0 commits2026-03-21: 0 commits2026-03-22: 0 commits2026-03-23: 0 commits2026-03-24: 0 commits2026-03-25: 0 commits2026-03-26: 0 commits2026-03-27: 0 commits2026-03-28: 0 commits2026-03-29: 0 commits2026-03-30: 0 commits2026-03-31: 0 commits2026-04-01: 0 commits2026-04-02: 0 commits2026-04-03: 0 commits2026-04-04: 0 commits2026-04-05: 0 commits2026-04-06: 0 commits2026-04-07: 0 commits2026-04-08: 0 commits2026-04-09: 0 commits2026-04-10: 0 commits2026-04-11: 0 commits2026-04-12: 0 commits2026-04-13: 0 commits2026-04-14: 0 commits2026-04-15: 0 commits2026-04-16: 0 commits2026-04-17: 0 commits2026-04-18: 0 commits2026-04-19: 0 commits2026-04-20: 0 commits2026-04-21: 0 commits2026-04-22: 0 commits2026-04-23: 0 commits2026-04-24: 0 commits2026-04-25: 0 commits2026-04-26: 0 commits2026-04-27: 0 commits2026-04-28: 0 commits2026-04-29: 0 commits2026-04-30: 0 commits2026-05-01: 0 commits2026-05-02: 0 commits2026-05-03: 0 commits2026-05-04: 0 commits2026-05-05: 0 commits2026-05-06: 0 commits2026-05-07: 0 commits2026-05-08: 0 commits2026-05-09: 0 commits2026-05-10: 0 commits2026-05-11: 0 commits2026-05-12: 0 commits2026-05-13: 0 commits2026-05-14: 0 commits2026-05-15: 0 commits2026-05-16: 0 commits2026-05-17: 0 commits2026-05-18: 0 commits2026-05-19: 0 commits2026-05-20: 0 commits2026-05-21: 0 commits2026-05-22: 0 commits2026-05-23: 0 commits2026-05-24: 0 commits2026-05-25: 0 commits2026-05-26: 0 commits2026-05-27: 0 commits2026-05-28: 0 commits2026-05-29: 0 commits2026-05-30: 0 commits2026-05-31: 0 commits2026-06-01: 0 commits2026-06-02: 0 commits2026-06-03: 0 commits2026-06-04: 0 commits2026-06-05: 0 commits2026-06-06: 0 commits2026-06-07: 0 commits2026-06-08: 0 commits2026-06-09: 0 commits2026-06-10: 0 commits2026-06-11: 0 commits2026-06-12: 0 commits2026-06-13: 0 commits2026-06-14: 0 commits2026-06-15: 0 commits2026-06-16: 0 commits2026-06-17: 0 commits2026-06-18: 1 commit2026-06-19: 8 commits2026-06-20: 2 commits2026-06-21: 3 commits2026-06-22: 4 commits2026-06-23: 15 commits2026-06-24: 17 commits2026-06-25: 12 commits2026-06-26: 10 commits2026-06-27: 4 commits2026-06-28: 15 commits2026-06-29: 15 commits2026-06-30: 3 commits2026-07-01: 8 commits2026-07-02: 18 commits2026-07-03: 12 commits2026-07-04: 3 commits2026-07-05: 5 commits2026-07-06: 9 commits2026-07-07: 9 commits2026-07-08: 18 commits2026-07-09: 12 commits2026-07-10: 8 commits2026-07-11: 12 commits2026-07-12: 17 commits2026-07-13: 7 commits2026-07-14: 15 commits2026-07-15: 5 commits2026-07-16: 3 commits2026-07-17: 1 commit2026-07-18: 7 commits2026-07-19: 10 commits2026-07-20: 6 commits2026-07-21: 3 commits2026-07-22: 3 commits2026-07-23: 1 commit2026-07-24: 2 commits2026-07-25: 2 commits2026-07-26: 8 commits2026-07-27: 0 commits2026-07-28: 4 commits2026-07-29: 1 commit2026-07-30: 1 commit2026-07-31: 3 commits2026-08-01: 0 commits2026-08-02: 13 commits2026-08-03: 2 commits2026-08-04: 0 commits2026-08-05: 4 commits2026-08-06: 1 commit2026-08-07: 0 commits2026-08-08: 1 commit2026-08-09: 0 commits2026-08-10: 3 commits2026-08-11: 1 commit2026-08-12: 0 commits2026-08-13: 1 commit2026-08-14: 6 commits2026-08-15: 0 commits2026-08-16: 2 commits2026-08-17: 9 commits2026-08-18: 2 commits2026-08-19: 3 commits2026-08-20: 15 commits2026-08-21: 3 commits2026-08-22: 2 commits2026-08-23: 15 commits2026-08-24: 8 commits2026-08-25: 2 commits2026-08-26: 5 commits2026-08-27: 11 commits2026-08-28: 1 commit2026-08-29: 0 commits2026-08-30: 54 commits2026-08-31: 19 commits2026-09-01: 4 commits2026-09-02: 6 commits2026-09-03: 8 commits2026-09-04: 9 commits2026-09-05: 10 commits2026-09-06: 18 commits2026-09-07: 12 commits2026-09-08: 6 commits2026-09-09: 19 commits2026-09-10: 16 commits2026-09-11: 6 commits2026-09-12: 14 commits2026-09-13: 11 commits2026-09-14: 12 commits2026-09-15: 1 commit2026-09-16: 5 commits2026-09-17: 6 commits2026-09-18: 10 commits2026-09-19: 10 commits2026-09-20: 19 commits2026-09-21: 5 commits2026-09-22: 2 commits2026-09-23: 6 commits2026-09-24: 14 commits2026-09-25: 9 commits2026-09-26: 32 commits2026-09-27: 7 commits2026-09-28: 10 commits2026-09-29: 0 commits2026-09-30: 0 commits2026-10-01: 0 commits2026-10-02: 0 commits2026-10-03: 0 commits
792 commits in the last yearLessMore

Signals and awards

derived from tracked data
  • Breakout launch

    5,462 stars in 109 days

  • Very active

    792 commits in 52 weeks

  • Permissive license

    MIT

  • Continuous integration

    Automated checks passing

What tick-stock-panel does

Tick Stock Panel provides an all-in-one platform for quantitative stock analysis focused specifically on the Chinese market. It features a robust data routing engine to pull financial metrics and execute minute-level trading strategies. The system integrates full-time anomaly monitoring to catch sudden market movements and includes an AI conversational assistant for querying data. It is designed to be fully self-hosted, ensuring user privacy and zero ongoing maintenance fees.

Quantitative analysts and algorithmic traders operating in the Chinese A-share market. Familiarity with TypeScript and local deployment is helpful.

  • Data source routing: Aggregates and manages multiple financial data streams to ensure reliable market information.
  • Minute-level execution: Processes and backtests trading strategies with high-resolution minute-by-minute market data.
  • Anomaly detection: Monitors the market continuously for unusual price movements or volume spikes.
  • Conversational AI: Provides an intelligent assistant to query stock data and analyze trends using natural language.
  • Zero maintenance: Designed as a self-contained, self-hosted application that runs without external infrastructure dependencies.

Where teams use it

Quantitative Backtesting

Develop and test custom trading strategies against historical minute-level data for the Chinese stock market.

Real-time Screening

Filter thousands of A-shares instantly based on technical indicators and financial metrics to find trading opportunities.

Market Monitoring

Set up automated watchers to detect unusual volume or price action across the entire market during trading hours.

Data Aggregation

Centralize disjointed financial data sources into a single, queryable database.

Getting started: npm install && npm start

README

main branch

📈 TSP · A股智能量化工作台


个人开源 License: MIT Engine: Polars Open API MCP

Build: Docker CI Test: Backend + Frontend GitHub stars

自托管 · 零运维 · 核心能力全部开放成接口的 A 股量化工作台

选股 · 回测 · 监控 · 因子挖掘 · AI 助手 · Open API · MCP

shy3130%2Ftick-stock-panel | Trendshift shy3130%2Ftick-stock-panel | Trendshift

61
开放 API 端点
6
Token 权限档
12
MCP 工具
2400+
测试全绿 · CI 守护
ms 级
全市场策略扫描
1 容器
零外部数据库

✨ 核心功能 · 📸 界面预览 · 🏛️ 架构 · ⚡ 性能 · 🌐 开放能力 · 🚀 快速开始 · 📚 完整文档


赞助支持 Sponsor

RunningHub API — 单一接口直连 400+ 主流大模型 About RunningHub API — 产品介绍

本项目由 RunningHub 提供支持 · 单一接口直连 400+ 主流大模型 · 免费测试


Important

⚠️ 本项目谨作为本地量化提供解决思路与方案,不作为投资软件或者看盘软件。明确不做:不对标同花顺 / 通达信,不内置「AI 荐股 / 涨停预测」。数据源已插件化,可任意接入第三方数据源。仅供学习研究使用。

📮 有任何项目问题可邮件联系 [email protected] · 觉得有用请点个 ⭐ Star


💡 为什么做 TSP

用脚本/拼凑工具做量化,你大概率遇到过 TSP 的解法
数据源绑死,换一家要重写整套拉数代码 能力路由矩阵:6 类数据集按源能力独立路由,随时换源,指标与回测口径不变
选股、回测、监控各用一套工具,口径对不上 全站统一 enriched 数据口径:选股 → 回测 → 监控 → 复盘一条链
盘中异动靠人盯盘,错过就是错过 竞价/盘中/偏移全时段异动 + 实时弹窗、语音播报、飞书推送
想查个数据要在几个页面之间来回点 AI 对话助手:一句话问出全站数据,取数过程逐条可见、可展开核对;还能经确认卡放行生成信号、跑回测、补数据
想基于面板数据做自己的工具/机器人,只能爬页面 开放接口 + MCP:Token 六档权限、61 端点契约化、SSE 事件流,AI 客户端即插即用
付费终端贵、云端平台数据出不了本地 自托管:Docker 单容器,数据全部落在本地 Parquet,零运维

✨ 核心功能

🔀 能力路由
6 类数据集按源能力独立路由, 换源不换口径

🔍 选股引擎
25 内置策略 + 自定义信号 + AI 生成, 毫秒级扫全 A 股

📊 指标流水线
68 列指标与信号, 一次扫表落盘 enriched Parquet

🧪 回测研究
因子/策略/分钟回测, T+1/费用/滑点, 因子归因

🔬 因子平台
DSL 自定义因子 + 检验组合, 与策略双向联动

⛏️ 因子挖掘
样本外搜索多因子组合, 显式发布、永不上线

🌡️ 市场环境
情绪周期 6 阶段 + 概念/行业主线排名

🚨 异动监控
竞价/盘中/偏移三类异动一页覆盖

📡 监控中心
四类规则 AND/OR + 语音播报 + 飞书推送

📈 个股分析
9 类关键价位 + AI 四维分析

🏆 连板梯队
连板统计 + 概念轮动 + 盘后 AI 复盘

🧰 数据扩展
插件化数据源, 扩展字段成页, 按日历史回补

🌐 开放接口
Token 六档权限, 61 端点契约化, 读+写闭环

🔌 MCP 服务器
12 个工具把面板能力交给任意 AI 客户端

🧠 AI 对话助手
一句话问全站数据, 工具足迹逐条可核对

📦 主要页面与功能

📊 行情总览

  • 看板 Dashboard — 市场情绪评分 + 涨跌/成交额榜单 + 概念/行业领涨领跌(点击板块直达成分股,领涨股带涨跌幅) + 大盘异动事件流,一日全貌; 布局可自定义 — 12 列吸附网格, 组件拖拽换位/角柄自由调宽高, 可增删组件、嵌入外部链接(iframe 沙箱), 跨设备同步, 一键恢复默认
  • 自选 Watchlist — 自选股池,多分组管理(M:N),表格/卡片双视图,换手/量比/RSI 等实时指标,按档位分流实时刷新
  • 指数 Indices — 沪深指数浏览与同步

🔍 选股与回测

  • 策略 Screener — Polars 毫秒级扫描全 A 股,日线/分钟策略统一单池,按策略声明周期自动路由执行
  • 回测 Backtest — 四种研究视图:
    • 因子回测 — IC/IR、分层收益、多空组合,62+ 因子目录先筛掉无效指标
    • 策略回测 — 净值曲线、回撤、夏普、胜率、盈亏比、蒙卡回撤,T+1/手续费/滑点/止损,SSE 流式进度;评分因子策略附带「因子归因」(胜/败单入场信号日因子对比)
    • 分钟策略回测 — 逐交易日回放信号、分钟收盘入场,分钟级成交明细
    • 验证 — 参数敏感性与滚动样本外
    • 研究闭环:结果导出 CSV(概要/净值/交易明细/分标的统计) → 保存候选 → 一键载入复测
  • 因子 Factors — 检验/因子库/编辑器/组合四 tab:IC·分层·Newey-West 检验、自定义 DSL 因子(25 算子点选、双语字段、我的因子模板)、版本与生命周期管理;因子库可一键生成排名策略,策略触发器可直接引用因子条件
  • 挖掘 Mining — 嵌套样本外因子与策略挖掘:训练区间因子方向重估 + 相关性去重 + 多因子排名组合搜索,自有策略作对照轨;候选入库,显式确认后才发布,永不自动上线

📈 个股与板块分析

  • 个股分析 Stock Analysis (Beta) — 日K + 9 类关键价位 + AI 四维分析(技术/基本面/财务/消息面)
  • 财务分析 Financials — 利润表/资负表/现金流/关键指标(多源并集合并,fuyao 财务四表适配) + AI 解读
  • 概念分析 / 行业分析 — ths 维度涨幅轮动矩阵 + 领涨/领跌主线 + 个股穿透
  • 市场环境 Regime — 情绪周期 6 阶段(冰点/启动/主升/高潮/退潮/修复,连板梯队驱动,EMA 平滑 + 2 日确认)+ 概念/行业主线排名,与 5 档环境分并存
  • 连板梯队 Limit Up Ladder — 连板层级统计 + 概念/行业分布 + 封单监控(可切换连跌梯队)

🔔 监控与复盘

  • 监控中心 Monitor — 策略/个股信号/价格/异动四类规则,支持自选分组作用域,盘中实时弹窗 + 语音播报(播报个股名称与信号) + 触发记录持久化
  • 持仓提醒 Lots — 记录个股/ETF 买入批次,自动生成止盈止损/到期监控规则
  • 信号库 Signals — 内置预计算信号 + 自定义条件信号(含因子条件与 AI 生成),供策略触发器/回测/监控统一取用
  • 异动监控 Abnormal Moves — 按交易时间线三 tab:
    • 竞价异动 — 同花顺盘前风向标(含当日/次日真实收益对照、追高风险标记)+ 全市场竞价扫描(待采集任务)
    • 盘中异动 — 涨停/炸板/翘板/跌停/新高/新低/放量当日信号聚合,零新增采集
    • 偏移异动 — 交易所异动偏离值口径(主板 3 日 ±20%、创业板/科创板 ±30%、北交所 ±40%;10 日 +100%/−50%、30 日 +200%/−70%),实时接近度
  • 复盘 Review (Beta) — 盘后 AI 自动生成市场复盘,注入龙虎榜资金动向与盘前风向标对照;可定时执行、推送飞书、下载 Markdown

🗄️ 数据与扩展

  • 数据 Data — 本地数据画像与同步状态(维表/日K/除权/Enriched/指数/ETF/分钟K/财务),盘后管道与历史扩展
  • 扩展分析 (动态菜单) — 把任意第三方/扩展数据字段配成一级菜单,与内置数据同台分析
  • 设置 Settings — 数据源与能力检测(能力路由矩阵、档位徽章)、AI 接口、实时监控、扩展页面、开放接口(Token 管理)、菜单与系统设置

🤖 AI 助手

  • AI 对话助手 — 悬浮球 / 侧栏 AI 徽标旁入口 / ⌘K 呼出; 21 个查询工具覆盖个股·大盘·板块·自选·持仓·信号·策略·因子·数据完整性·扩展数据表, 外加 4 个动作工具(生成信号策略 / 回测 / 加自选 / 数据补全)——写操作先弹确认卡(完整待执行参数可见, 确认/取消/120s 超时自动取消)才执行; 逐字流式输出 + 工具调用足迹卡(参数与耗时可展开核对), 每条回答附风险与数据口径提示; 完全解耦的扩展模块, 删除目录即卸载

📸 界面预览

看板 Dashboard 策略 Screener
看板页面 策略页
回测 Backtest 挖掘 Mining
回测页 挖掘页
监控中心 Monitor 市场环境 Regime
监控中心 市场环境分析

🏗️ 架构

TSP 是一个"数据工程优先"的本地量化工作台 —— 数据源、口径、执行、开放通道做成一套自洽的架构,功能只是长在上面的应用。八个特点,一句话一个:

架构特点 一句话说明
🔀 能力路由矩阵 6 类数据集按源声明能力独立路由——换源不换口径,指标与回测结果不变
🧬 单一 enriched 口径 只存 15 列基础数据、现算 68 列指标信号;选股 → 回测 → 监控 → 复盘吃同一份数据
📁 文件型零运维存储 Parquet + DuckDB,单容器零外部数据库,数据 100% 落在本地
🔁 回测 = 实盘同路径 策略执行只此一条 StrategyEngine.run;分钟策略逐日回放 +「当日已知」纪律,杜绝未来函数
🏛️ 网关居中的开放单体 面板密码会话与 Token 网关双通道并行;61 端点契约快照 + CI 守护,SSE 事件流与 MCP 平等开放
🧩 核心域 / 扩展域边界 8 个核心域拥有数据与语义,5 条扩展通道只消费契约——删除目录即整体卸载,零核心改动
🚀 重活进程隔离 回测跑在 spawn worker 子进程,刷新/切页重连不丢任务,主服务永不被计算卡住
📅 交易日探针 节假日自动停掉实时轮询与分钟增量,零无效请求

总览 · 网关居中的开放单体

双通道并行:面板走密码会话,外部走 Token 网关 —— 互不影响、互不挤占限流。核心域 8 个域是数据与语义的所有者;扩展域 5 条通道只消费契约,零核心改动。

flowchart TB
    subgraph CLIENTS["🖥️ 消费端"]
        direction LR
        UI["面板 UI<br/>React · 19 页面"]
        MCP["MCP 服务器<br/>12 工具 · scope 联动"]
        APPC["外部程序<br/>脚本 · 看板"]
    end

    GW{"开放网关<br/>Token · 六档 scope<br/>限流 120/min · 61 端点契约"}

    API["应用层 · ⚡ FastAPI<br/>REST · SSE 事件流"]

    subgraph CORE["核心域 · 数据与语义的所有者"]
        S1[("能力路由 · 插件化数据源<br/>enriched 分区存储<br/>Parquet · DuckDB")]
        S2["指标流水线 · 存15现算68列<br/>策略 · 因子 · 回测 · 挖掘"]
        S3["监控引擎 · 事件总线 · SSE 出站<br/>扩展数据 · 认证配置"]
        S1 -->|"enriched 口径"| S2
        S2 -->|"信号 · 事件"| S3
    end

    subgraph EXT["🧩 扩展域 · 5 条接入通道 —— 只消费开放契约, 零核心改动"]
        direction LR
        X1["数据源插件"]
        X2["扩展数据表<br/>读 + 写"]
        X3["自定义策略<br/>与信号"]
        X4["声明式页面<br/>前端插槽挂载"]
        X5["custom 后端模块<br/>★ AI 助手参考实现"]
    end

    UI -->|"密码会话"| API
    MCP -->|"Bearer + scope"| GW
    APPC -->|"Bearer + scope"| GW
    GW -->|"契约放行"| API
    API ==> S1
    S3 -.-> X3

    classDef client fill:#eef2ff,stroke:#6366f1,color:#312e81
    classDef gate fill:#faf5ff,stroke:#8b5cf6,color:#6b21a8,stroke-width:2px
    classDef svc fill:#ecfeff,stroke:#06b6d4,color:#164e63
    classDef fdn fill:#ecfdf5,stroke:#10b981,color:#064e3b
    classDef cmp fill:#f0f9ff,stroke:#0ea5e9,color:#0c4a6e
    classDef pdc fill:#fffbeb,stroke:#f59e0b,color:#78350f
    classDef ext fill:#f8fafc,stroke:#94a3b8,color:#334155,stroke-dasharray:5 4
    classDef star fill:#fffbeb,stroke:#d97706,color:#78350f,stroke-width:2px

    class UI,MCP,APPC client
    class GW gate
    class API svc
    class S1 fdn
    class S2 cmp
    class S3 pdc
    class X1,X2,X3,X4 ext
    class X5 star

    style CLIENTS fill:#f5f3ff,stroke:#c4b5fd,stroke-width:1.5px,color:#4c1d95
    style CORE fill:#f8fafc,stroke:#cbd5e1,stroke-width:1.5px,color:#0f172a
    style EXT fill:#f8fafc,stroke:#94a3b8,stroke-width:1.5px,stroke-dasharray:6 4,color:#334155
Loading

核心域 / 扩展域边界

按「数据与语义的归属 + 依赖箭头方向」划分,而非页面外观:

内容 划线依据
核心域 · 8 数据底座 / 能力路由 / 订阅锚点(自选) / 策略与回测 / 因子与挖掘 / 环境数据生产 / 监控推送管道 / 扩展数据存储 + 认证配置 被多个模块消费其数据与语义,自身不依赖外围
扩展域 · 5 通道 数据源插件 · 扩展数据表 · 自定义策略/信号 · 声明式页面/前端插槽 · 后端 custom 模块 只消费核心契约,可整体替换/移除而不伤核心

设置 → 菜单设置里每个页面带 核心 / 扩展 徽标与归属原因;11 个内置页面(概念/行业/个股/财务分析、监控中心、异动、持仓提醒、模拟盘、信号库、复盘、连板梯队)都是可被二开替换的消费页 —— 例如监控中心页面可换,规则引擎与推送管道属核心照常运行。详见 docs/open-platform-plan.md。

关键机制

机制 说明
能力路由矩阵 各数据集按源声明能力独立路由,注册表集中定义、可扩展:TICKFLOW 档位探测(None/Free/Starter/Pro/Expert)+ 插件源能力声明,fail-closed(声明 pct_unit 未声明即拒)。同一数据集可随时换源,指标与回测口径不变
交易日探针 fuyao 交易日历(确定性,含调休)→ tickflow 全市场行情时间戳探针(OR 语义)→ 工作日兜底;节假日自动停掉实时轮询与分钟增量,零无效请求
财务多源合并 按 (symbol, period_end) 报告期累积,多源取并集、逐列按公告日取最新(PIT);公告前一律空值,绝不填 0
非路由数据集直连 龙虎榜/盘前风向标/交易日历等 fuyao 专有能力不进路由矩阵,由独立服务直连消费——按日 JSON 缓存(历史不可变)、交易日回退、四态降级
回测执行隔离 回测在 spawn worker 子进程运行,持久 run ID,刷新/切页重连不丢任务;子进程结果消息经锁保护回传
分层缓存 enriched 读取时现算指标(存储仅 15 列基础数据,现算 68 列指标与信号)+ 进程内快照缓存;扩展字段按日分区快照,页面即配即用
开放网关 Token 通道与面板密码会话并行互不影响:认证 → 六档 scope 校验 → 每 Token 滑动窗口限流(默认 120 次/分,O(1) 内存)→ 放行;管理面(数据同步/表结构/设置)永不开放给 Token
事件总线 进程内发布/订阅(慢消费者丢旧保新,广播失败不反噬主流程),告警落盘唯一入口已挂接;SSE 流按票据 scope 过滤,票据一次性 60 秒过期
完全解耦扩展 后端 app/custom/<包>/ 启动时自动发现、注册独立路由(版本不符或 setup 失败即隔离跳过), 前端 src/custom/*/extension.tsx 构建时自动挂载到插槽; 删除目录即整体卸载, 扩展无需改动核心 —— AI 对话助手即该机制的参考实现

技术栈

层 选型
后端 Python FastAPI Pydantic APScheduler · sse-starlette
数据 Polars(计算)· DuckDB(查询)· Parquet(存储)
回测 自研仓位模拟引擎(T+1/费用/滑点/分钟回放)· vectorbt(部分路径)
数据源 TickFlow 官方 SDK · fuyao(同花顺 REST) · 插件化扩展(stock-sdk 示例插件 · YAML 自定义源)
AI(可选) OpenAI兼容 DeepSeek / 通义 / Ollama 等 · 策略生成 / 报告 / 对话助手(助手依赖工具调用能力, 需 OpenAI 兼容接口)
MCP mcp-server(官方 SDK 2.x, stdio) — 12 工具按 scope 暴露,权限裁决复用开放网关
前端 React 18 Vite TypeScript Tailwind Tanstack Query · Lightweight Charts(TradingView 开源) · ECharts · dnd-kit
部署 Docker 两阶段构建,前端 dist 拷进后端镜像

⚡ 性能

不是口号 —— 每一行都有机制支撑,数字全部来自本仓库的真实测试与实现。

核心引擎

场景 表现 靠什么
全市场策略扫描 毫秒级 Polars 列式引擎 + enriched 预计算,谓词下推过滤
指标与信号 只存 15 列基础数据,现算 68 列指标信号 分层缓存:存储最小化、读取零冗余、写入即失效
盘后管道 增量分区,只算新交易日 enriched 按日分区 + 指标流水线增量帧
实时行情 自选优先,全市场按档位分流 交易日探针,节假日自动停轮,零无效请求
回测 子进程隔离不卡主服务,刷新重连不丢任务 spawn worker + 持久 run ID + 重活并发闸
部署与兼容 单容器零外部数据库(Parquet + DuckDB 文件型) · 新老 CPU 双内核 polars rtcompat 兼容内核,运行时自动探测

开放层(0.3.2 新架构带来)

能力 表现 靠什么
开放 API 61 端点 · 每 Token 120 次/分 进程内滑动窗口限流,O(1) 内存,零外部依赖
网关裁决 认证→scope→限流,纯内存单函数完成 单一裁决点(evaluate),无数据库往返
契约稳定性 机器可读契约 + 快照测试守护 开放面增删必须显式改快照,CI 拦截无意识变更
数据写闭环 外部写入复用管理端同一校验/落盘路径 write:ext 只写行数据,表结构锁死管理面
事件推送 告警落盘即广播,亚秒级到 SSE 流 进程内事件总线(丢旧保新)+ 一次性票据订阅
MCP 工具调用 12 工具按 scope 联动暴露 薄桥零业务逻辑,权限裁决复用网关
质量保障 2400+ 测试全绿,约 100 秒跑完 GitHub Actions CI(后端全量 + 前端构建)

🌐 开放能力(Open API + MCP)

面板的核心能力不只长在页面上 —— 全部开放成受控接口,外部程序与 AI 客户端平等消费:

设置 → 开放接口 · Token 管理
明文只显示一次,六档 scope 按需授予
设置 → 菜单设置 · 架构标注
每页核心/扩展徽标,悬停看归属原因
开放接口 Token 管理 菜单核心/扩展架构标注
能力 说明
API Token 设置 → 开放接口 创建,明文只显示一次,SHA-256 哈希存储,吊销立即生效
六档 scope read:market / read:ext / write:ext / read:analysis / run:backtest / paper:trade,管理面永不开放给 Token
61 端点契约 GET /api/openapi.json?tier=a 机器可读,Postman/代码生成即用;契约快照测试 + CI 守护,开放面变更必须显式确认
数据写闭环 write:ext 程序化写入扩展表行数据(与内置数据同台分析),表结构锁死在管理面
SSE 事件流 60 秒一次性票据订阅实时告警推送,票据只继承 scope 不放大权限
MCP 服务器 12 个精选工具,按 Token scope 暴露;模拟盘交易刻意不交给 AI
示例与文档 examples/open-api 四个零依赖可运行示例 · docs/features.md → 开放接口 · 开放平台设计方案
# 十行内跑通第一个调用
curl -H "Authorization: Bearer tsp_xxxx" \
  "http://localhost:3018/api/kline/daily?symbol=600519.SH&limit=10"

🤖 AI 对话助手

不想挨个页面点着找数据?把问题直接问出来 —— 助手在本地真实数据上调用工具取数, 逐字流式作答, 每次取数都可展开核对。

AI 对话助手 — 市场总览问答

打开方式 说明
悬浮球 可拖动, 位置记忆; 生成中带状态指示点
AI 徽标旁入口 侧栏顶部模型徽标右侧, 一键展开
⌘K / Ctrl+K 全局快捷键随时呼出, Esc 关闭

能问什么 — 21 个查询工具覆盖全站页面能力, 4 个动作工具经确认卡放行:

类别 覆盖能力
个股 实时行情快照(支持批量) · 日线区间 · 关键价位分析 · 财务五表(指标/利润/资负/现金流/股本)
大盘 看板总览(涨跌家数·成交额·涨停连板·情绪雷达) · 指数行情 · 市场环境(regime) · 异动监控
板块 概念/行业板块盘中轮动、切换事件与资金排名
我的数据 自选列表(含备注与实时涨跌) · 持仓提醒 · 信号库
策略与因子 策略目录 · 执行选股策略取标的 · 因子目录 · 因子全市场排名
扩展内容 扩展数据表(列表·字段·数据日期, 读行支持过滤/排序/日期范围) · 自定义策略与信号
数据健康 完整性检查(日线/enriched/分钟K 覆盖区间与停更、财务表缺口、单标的滞后) · 同步任务进度
动作(须确认) 生成信号策略(声明式白名单条件, 落库即用) · 运行策略回测 · 加入自选 · 数据补全(盘后管道/财务表/分钟K扩展, 后台执行·单飞去重)

交互设计

  • 逐字流式输出 — 文本按 token 逐步渲染, 长回答不再"整段蹦出"
  • 分组快捷建议 — 新会话页按 行情与大盘 / 我的与个股 / 策略与信号 / 数据与扩展 分组给出 18 条按文字自适应排布的建议(含策略对比、个股横向对比), 并提示扩展内容同样可以问答
  • 工具足迹卡 — 每次调用的工具名、参数、耗时、结果摘要均可展开核对; 取数可核对是设计铁律
  • 走势双图 — 个股问答自动附工具真实序列的走势小卡(日K蜡烛 + 当日分时), 并排展示且日K固定左侧、分时右侧; 宽表格(>4 列)按内容取宽不折行, 超宽时横向滚动
  • 动作确认卡 — 生成信号/回测/加自选/数据补全等写操作先弹确认卡: 动作名 + 影响说明 + 完整待执行参数, 你点「确认执行」才会真正运行; 拒绝或 120 秒超时自动取消, 模型被明确告知此时不得重试
  • 轮次检查点 — 工具调用不设硬上限, 连续 N 轮未完成时弹「继续 / 停止」选择卡(120 秒未选自动停止), 继续则再跑一个周期, 已生成内容始终保留; 检查点轮数可在 设置→AI 调整(默认 100, 最小 5, 0 = 不检查)
  • 非模态面板 — 从页面右缘滑入, 默认 720px, 左缘拖拽调宽(宽度记忆), 边看行情边问
  • 会话历史 — 本地保存, 支持多会话切换与删除, 刷新不丢
  • 固定合规提示 — 每条回答完成后附风险提示与数据口径提示

完全解耦的扩展模块

助手是项目扩展系统的参考实现: 后端 app/custom/assistant/(启动时自动发现并注册独立路由)与前端 src/custom/assistant/(构建时自动挂载到插槽)各自独立, 删除目录即整体卸载。数据补全工具与数据页共用同一条触发路径(为此在核心 API 层抽取了两个共用触发函数, 端点行为不变), 单飞去重与进度上报天然一致。未配置 AI Key 或使用不支持工具调用的供应商(如 Codex CLI)时 fail-closed, 直接提示前往设置页。

⚠️ 助手是数据分析工具, 不提供买卖指令; 涉及交易决策的问题会转换为客观的技术/财务状态、关键价位、风险因素与条件情景。


🚀 快速开始

已装 Docker?一条命令跑起来 ⬇️

docker run -d --name tsp -p 3018:3018 -v ${PWD}/data:/app/data ghcr.io/shy3130/tick-stock-panel:latest

打开 http://localhost:3018 即可使用 · 多架构镜像(linux/amd64 · arm64)由 CI 自动发布,本地无需 Python / Node


方式 适合谁 前置要求
A · GHCR 现成镜像(即上方一条命令) 多数用户,拿来即用 ⭐ 推荐 Docker
B · Compose 本地构建 跑自己改过的代码 / 全套挂载 Docker
C · 本机 AI 代部署 完全不想碰命令行 任一本机 AI 编程助手
D · Dev 模式 二次开发 Python ≥ 3.11 · Node ≥ 20 · uv · pnpm(npm i -g pnpm)

方式 A:GHCR 现成镜像(免本地构建,多数用户推荐)

本项目每次推送都由 GitHub Actions 自动构建多架构镜像并发布到 GHCR,拿来即用:

  • 需要配置时:从 .env.example 复制出 .env,命令里加 --env-file .env。
  • 跑自己改过的代码:fork 后到仓库 Actions 页启用 workflow(fork 默认禁用),构建出的 ghcr.io/<你的用户名>/tick-stock-panel 用法相同。
  • 想用 compose 编排(挂载 .env / tiers.yaml):参考 docker-compose.yml,把 build: 段换成 image: ghcr.io/shy3130/tick-stock-panel:latest。
  • 现成镜像默认不含 stock-sdk 插件与老 CPU 兼容内核(合规与体积考虑),有此需求请用方式 B 自构建,详见 docs/deployment.md。

方式 B:Docker Compose(本地构建,全套挂载)

cp .env.example .env
docker compose up --build
# 打开 http://localhost:3018
🐳 Codex CLI 挂载、版本覆盖与插件开关(点开查看)

镜像内置固定版本的 Codex CLI,Compose 会将主机 ${HOME}/.codex 只读挂载到容器,因此主机需先完成 Codex 登录。若主机 Codex 使用 loopback local-access provider,容器会保留实际端口并自动将主机名映射为 host.docker.internal。需要覆盖镜像内版本时可设置构建参数:

CODEX_CLI_VERSION=0.144.3 docker compose up --build

Windows 用户注意:纯 PowerShell / CMD 下 HOME 环境变量通常未设置,会导致挂载路径解析失败、容器读不到 Codex 登录态。请在 .env 中显式指定主机 Codex 目录:

# PowerShell 示例(实际路径以本机为准)
echo "CODEX_HOME_HOST=C:\Users\你的用户名\.codex" >> .env

Codex CLI 模式允许 TickFlow 容器读取本机 Codex 登录凭据,仅应在受信任的本机环境启用。凭据目录以只读方式挂载,不会写入镜像。

镜像默认不含 stock-sdk 插件(合规考虑);确需启用执行 docker compose build --build-arg INCLUDE_STOCKSDK=1 后再 docker compose up -d,详见 docs/deployment.md。

📖 Docker 进阶、老 CPU 兼容、访问密码设置等见 docs/deployment.md。

方式 C:本机 AI 代部署(AI玩家首选)

装一个本机 AI 编程助手(Trae / Codex / OpenCode / ZCode / WorkBuddy 等,任选其一),新建一个空文件夹用助手打开,把下面这段话原样发给它:

帮我部署开源项目 https://github.com/shy3130/tick-stock-panel 到本机:
克隆到当前文件夹;有 Docker 优先拉 ghcr.io/shy3130/tick-stock-panel:latest 现成镜像,没有就走 Dev 模式;
缺少的依赖(Docker / Python / Node)帮我一起装好;
最后告诉我浏览器打开哪个地址、需要填哪些 Key。

AI 会自动完成克隆、装依赖、启动服务,完成后浏览器打开 http://localhost:3018 即可;TICKFLOW_API_KEY 等配置按 AI 提示填,详见 配置。

方式 D:Dev 模式(二次开发推荐)

cp .env.example .env       # 按需填 TICKFLOW_API_KEY(留空 = None 模式)
./dev.sh                   # Windows: .\dev.ps1

自动检查 / 下载依赖、释放端口、同时起前后端。后端 → http://localhost:3018 · 前端 → http://localhost:3011。

跑起来后的第一次使用

  1. 设置 → 凭据与能力 → 点 重新检测,确认档位标签与能力路由矩阵
  2. 设置 → 立即跑盘后管道:拉日 K + 计算 enriched 表(None / Free 走 free-api,当日数据盘后 1-2 小时可用)
  3. 自选页加标的 → 选股页点策略卡片扫描 / 配自定义信号
  4. 回测页选策略 + 区间 → 看净值 / 夏普 / 交易明细(SSE 实时进度),结果可导出 CSV、存候选一键复测
  5. 监控中心配规则,盘中实时弹窗 + 持久化记录;异动监控覆盖竞价/盘中/偏移全时段
  6. 配好 AI Key 后,悬浮球 / ⌘K 呼出 AI 对话助手,直接问「今天市场怎么样」「我的自选表现如何」「我的扩展数据表里有什么」,或让它「生成一个放量站上 20 日线的信号」「检查一下数据完整性」——写操作会先弹确认卡, 你点确认才执行
  7. 想接自己的程序?设置 → 开放接口建个 Token,照着 examples/open-api 十分钟跑通第一个脚本;AI 玩家直接配 MCP

⚙️ 配置

所有配置从根目录 .env 读取(复制 .env.example 开始),也可在面板 设置 页修改。最常用的三项:

TICKFLOW_API_KEY=              # 留空 = None 模式(历史日K免费);填 Key 解锁更多
AI_API_KEY=                    # 留空 = 关闭 AI;填 Key 启用策略生成与 AI 对话助手
PORT=3018                      # 服务端口

📖 完整配置项(数据源档位、AI、服务、密码、老 CPU 兼容)见 docs/configuration.md。


🗺️ 路线图

Phase 内容 状态
0-1 仓库骨架 · FastAPI 壳 · 能力探测 · K 线同步与分析页 ✅
2-3 Polars enriched 流水线 · Screener · 回测引擎(T+1/手续费/止损) ✅
4-5 监控引擎 · 四类监控规则 · 实时 SSE 推送 · 持久化记录 ✅
6 个股分析(专用日 K + 9 类关键价位 + AI 四维分析) ✅
v0.2 因子挖掘全链路 · 市场阶段与主线识别 · 异动监控 · 数据源插件化 ✅
v0.3 能力路由矩阵 · fuyao 数据源(财务/龙虎榜/风向标) · 分钟策略与回测 · 交易日探针 · 全时段异动中心 · 回测导出与候选复测 ✅
AI 助手 对话式数据问答与操作: 21 查询 + 4 动作工具(确认卡放行, 含生成信号/回测/加自选/数据补全) · 逐字流式 + 工具足迹卡 · 完全解耦扩展模块 ✅
v0.3.2 开放能力版 API Token + 六档 scope 网关 · 61 端点契约(快照+CI 守护) · 扩展数据读写闭环 · SSE 事件流 · MCP 服务器 · 核心/扩展域边界标注 ✅

📚 完整文档

文档 内容
docs/deployment.md 部署方式(Dev / Docker / GH Actions)、老 CPU 兼容、更新代码、访问密码
docs/configuration.md 所有 .env 配置项详解(数据源、AI、服务、密码、数据目录)
docs/features.md 各功能模块详细说明(选股/指标/回测/监控/个股分析/数据扩展/开放接口)
docs/open-platform-plan.md 开放平台设计:核心域/扩展域边界、Token 体系、Tier 契约与分期路线
mcp-server/README.md MCP 服务器配置(AI 客户端接入)与工具清单
examples/open-api 开放接口可运行示例(行情/写入/回测/事件流)
docs/custom-data-source.md 自定义数据源接入、能力路由契约、YAML 配置与 mock 联调示例
docs/strategy.md 策略体系(25 内置策略 + 三种扩展方式 + 文件结构)
docs/strategy-iteration.md AI 策略迭代协议:台账 / 证据包 / 门槛判定 / 提示词卡片
docs/mining.md 因子与策略挖掘口径、防泄漏、任务隔离和发布边界
docs/market-phase.md 市场情绪周期 6 阶段与概念/行业主线识别的口径与设计
docs/plugin-development.md 数据源插件开发规范(以 stock-sdk / fuyao 为参考实现)
docs/secondary-development.md 代码二次开发、前端插槽、后端策略接口与 AI 开发模板
backend/app/strategy/prompts/strategy-guide.md 策略开发完整规范(AI 生成与手写)

❤️ 支持项目

如果这个项目对你有帮助,欢迎请作者喝杯咖啡 ☕

微信赞赏码 · 感谢道友支持 愿一路长红

作者精力有限,优先响应赞助回馈,希望理解 📈

💬 交流群

欢迎加入交流群,一起讨论交流 · 个人维护了一些个性化接口统一公布在群公告

交流群二维码 · 个人维护的个性化接口见群公告

⚠️ 免责声明

本项目仅供学习与量化研究,不构成任何投资建议。回测结果不代表未来收益。A 股有风险,入市需谨慎。数据准确性以数据源官方为准。

📄 License

MIT © tick-stock-panel contributors

本项目依赖 TickFlow 提供数据服务,使用前请遵守其服务条款

内置数据源插件 fuyao 提供同花顺 REST 数据接口(行情 / 财务 / 龙虎榜 / 盘前风向标 / 交易日历等),需自备 API Key,使用前请遵守其服务条款

数据源插件 stock-sdk 遵循其各自的 ISC 协议。

社区

本开源项目已链接并认可 LINUX DO 社区。


⭐ 觉得有用?点个 Star 就是最大的支持 · fork 时也请顺手点个 star

⬆️ 回到顶部

View on GitHub

Recent activity

commits and pull requests

Commits per week

last 52 weeks
1100Week of 2025-10-05: 0 commitsWeek of 2025-10-12: 0 commitsWeek of 2025-10-19: 0 commitsWeek of 2025-10-26: 0 commitsWeek of 2025-11-02: 0 commitsWeek of 2025-11-09: 0 commitsWeek of 2025-11-16: 0 commitsWeek of 2025-11-23: 0 commitsWeek of 2025-11-30: 0 commitsWeek of 2025-12-07: 0 commitsWeek of 2025-12-14: 0 commitsWeek of 2025-12-21: 0 commitsWeek of 2025-12-28: 0 commitsWeek of 2026-01-04: 0 commitsWeek of 2026-01-11: 0 commitsWeek of 2026-01-18: 0 commitsWeek of 2026-01-25: 0 commitsWeek of 2026-02-01: 0 commitsWeek of 2026-02-08: 0 commitsWeek of 2026-02-15: 0 commitsWeek of 2026-02-22: 0 commitsWeek of 2026-03-01: 0 commitsWeek of 2026-03-08: 0 commitsWeek of 2026-03-15: 0 commitsWeek of 2026-03-22: 0 commitsWeek of 2026-03-29: 0 commitsWeek of 2026-04-05: 0 commitsWeek of 2026-04-12: 0 commitsWeek of 2026-04-19: 0 commitsWeek of 2026-04-26: 0 commitsWeek of 2026-05-03: 0 commitsWeek of 2026-05-10: 0 commitsWeek of 2026-05-17: 0 commitsWeek of 2026-05-24: 0 commitsWeek of 2026-05-31: 0 commitsWeek of 2026-06-07: 0 commitsWeek of 2026-06-14: 11 commitsWeek of 2026-06-21: 65 commitsWeek of 2026-06-28: 74 commitsWeek of 2026-07-05: 73 commitsWeek of 2026-07-12: 55 commitsWeek of 2026-07-19: 27 commitsWeek of 2026-07-26: 17 commitsWeek of 2026-08-02: 21 commitsWeek of 2026-08-09: 11 commitsWeek of 2026-08-16: 36 commitsWeek of 2026-08-23: 42 commitsWeek of 2026-08-30: 110 commitsWeek of 2026-09-06: 91 commitsWeek of 2026-09-13: 55 commitsWeek of 2026-09-20: 87 commitsWeek of 2026-09-27: 17 commitsOct 5, 2025Sep 27, 2026
792 commits in the last 52 weeks.

When work happens

weekday and hour
SunMonTueWedThuFriSat036912151821Sun 0:00 — 4 commitsSun 1:00 — 0 commitsSun 2:00 — 0 commitsSun 3:00 — 0 commitsSun 4:00 — 0 commitsSun 5:00 — 0 commitsSun 6:00 — 0 commitsSun 7:00 — 5 commitsSun 8:00 — 4 commitsSun 9:00 — 3 commitsSun 10:00 — 3 commitsSun 11:00 — 5 commitsSun 12:00 — 11 commitsSun 13:00 — 10 commitsSun 14:00 — 17 commitsSun 15:00 — 1 commitsSun 16:00 — 13 commitsSun 17:00 — 7 commitsSun 18:00 — 18 commitsSun 19:00 — 59 commitsSun 20:00 — 5 commitsSun 21:00 — 4 commitsSun 22:00 — 15 commitsSun 23:00 — 13 commitsMon 0:00 — 5 commitsMon 1:00 — 1 commitsMon 2:00 — 0 commitsMon 3:00 — 1 commitsMon 4:00 — 0 commitsMon 5:00 — 0 commitsMon 6:00 — 1 commitsMon 7:00 — 1 commitsMon 8:00 — 2 commitsMon 9:00 — 1 commitsMon 10:00 — 1 commitsMon 11:00 — 4 commitsMon 12:00 — 8 commitsMon 13:00 — 9 commitsMon 14:00 — 7 commitsMon 15:00 — 8 commitsMon 16:00 — 7 commitsMon 17:00 — 26 commitsMon 18:00 — 7 commitsMon 19:00 — 8 commitsMon 20:00 — 6 commitsMon 21:00 — 2 commitsMon 22:00 — 15 commitsMon 23:00 — 1 commitsTue 0:00 — 2 commitsTue 1:00 — 0 commitsTue 2:00 — 0 commitsTue 3:00 — 0 commitsTue 4:00 — 0 commitsTue 5:00 — 0 commitsTue 6:00 — 0 commitsTue 7:00 — 0 commitsTue 8:00 — 0 commitsTue 9:00 — 2 commitsTue 10:00 — 4 commitsTue 11:00 — 6 commitsTue 12:00 — 2 commitsTue 13:00 — 4 commitsTue 14:00 — 5 commitsTue 15:00 — 2 commitsTue 16:00 — 2 commitsTue 17:00 — 4 commitsTue 18:00 — 7 commitsTue 19:00 — 1 commitsTue 20:00 — 1 commitsTue 21:00 — 13 commitsTue 22:00 — 9 commitsTue 23:00 — 3 commitsWed 0:00 — 2 commitsWed 1:00 — 0 commitsWed 2:00 — 0 commitsWed 3:00 — 0 commitsWed 4:00 — 0 commitsWed 5:00 — 0 commitsWed 6:00 — 0 commitsWed 7:00 — 12 commitsWed 8:00 — 0 commitsWed 9:00 — 1 commitsWed 10:00 — 1 commitsWed 11:00 — 8 commitsWed 12:00 — 9 commitsWed 13:00 — 5 commitsWed 14:00 — 6 commitsWed 15:00 — 7 commitsWed 16:00 — 7 commitsWed 17:00 — 8 commitsWed 18:00 — 5 commitsWed 19:00 — 8 commitsWed 20:00 — 6 commitsWed 21:00 — 3 commitsWed 22:00 — 3 commitsWed 23:00 — 9 commitsThu 0:00 — 4 commitsThu 1:00 — 1 commitsThu 2:00 — 0 commitsThu 3:00 — 0 commitsThu 4:00 — 0 commitsThu 5:00 — 0 commitsThu 6:00 — 0 commitsThu 7:00 — 8 commitsThu 8:00 — 3 commitsThu 9:00 — 0 commitsThu 10:00 — 17 commitsThu 11:00 — 4 commitsThu 12:00 — 5 commitsThu 13:00 — 10 commitsThu 14:00 — 5 commitsThu 15:00 — 6 commitsThu 16:00 — 12 commitsThu 17:00 — 16 commitsThu 18:00 — 1 commitsThu 19:00 — 8 commitsThu 20:00 — 6 commitsThu 21:00 — 1 commitsThu 22:00 — 5 commitsThu 23:00 — 8 commitsFri 0:00 — 3 commitsFri 1:00 — 0 commitsFri 2:00 — 0 commitsFri 3:00 — 0 commitsFri 4:00 — 0 commitsFri 5:00 — 0 commitsFri 6:00 — 0 commitsFri 7:00 — 0 commitsFri 8:00 — 0 commitsFri 9:00 — 2 commitsFri 10:00 — 2 commitsFri 11:00 — 9 commitsFri 12:00 — 8 commitsFri 13:00 — 9 commitsFri 14:00 — 8 commitsFri 15:00 — 4 commitsFri 16:00 — 7 commitsFri 17:00 — 6 commitsFri 18:00 — 0 commitsFri 19:00 — 8 commitsFri 20:00 — 6 commitsFri 21:00 — 5 commitsFri 22:00 — 5 commitsFri 23:00 — 6 commitsSat 0:00 — 2 commitsSat 1:00 — 0 commitsSat 2:00 — 0 commitsSat 3:00 — 0 commitsSat 4:00 — 0 commitsSat 5:00 — 0 commitsSat 6:00 — 0 commitsSat 7:00 — 6 commitsSat 8:00 — 0 commitsSat 9:00 — 4 commitsSat 10:00 — 5 commitsSat 11:00 — 4 commitsSat 12:00 — 1 commitsSat 13:00 — 4 commitsSat 14:00 — 6 commitsSat 15:00 — 6 commitsSat 16:00 — 10 commitsSat 17:00 — 6 commitsSat 18:00 — 6 commitsSat 19:00 — 6 commitsSat 20:00 — 10 commitsSat 21:00 — 4 commitsSat 22:00 — 10 commitsSat 23:00 — 9 commits
Commit volume by weekday and hour (UTC). Larger dots mean more commits.

Who is committing

last 52 weeks
Maintainer commits621 (62%)
Community commits381 (38%)

1,002 commits in total over the last year.

DateListRankStars gained
Sep 26, 2026daily#9+31
Sep 25, 2026daily#9+31