tickflow-stock-panel 项目调研报告
tickflow-stock-panel 项目调研报告
最近在跟踪 A 股量化的开源生态,刷到一个叫 tickflow-stock-panel 的项目。我花了点时间把仓库从 README 到每个 router、从回测引擎到数据源插件都过了一遍,记录下来给同好做个参考。
快照信息: 截至 2026-08-05,仓库 shy3130/tickflow-stock-panel,默认分支
main顶端 commitc278dd3b02d880b867816acbe44bb3cbbe00ddb0(2026-08-02),版本 v0.1.88,License MIT。
先放结论
这是一个认真在做的、围绕 TickFlow 数据源设计的「选股 + 监控 + 回测」一体化工作台,单 Docker 容器跑,内置 18 个 Polars 向量化策略,带可选 AI 生成策略和第三方数据源接入。它不做的事 README 也写得很清楚——AI 荐股、不替代同花顺、不接券商——这点我喜欢,边界感比大多数同类项目都干净。
它是什么,为什么值得看
项目定位在 README 里写得很直白:自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台,基于 TickFlow 数据源。
技术栈是 FastAPI + React 18 + Polars + DuckDB + APScheduler,部署成一个单 Docker 容器。我一开始以为这是个"又一个 Web 看板",但看下来发现它有几个有意思的设计决策:
1. 围绕数据源档位做了完整的能力门控
TickFlow 是分 5 档订阅的(none / free / starter / pro / expert),不同档位能拿到的数据接口(rpm / batch)和能力(实时行情、分钟 K、财务、WebSocket)完全不一样。这个项目把"档位"抽象成 15 个 Cap 枚举,业务代码只读 Cap 不读"档位"。结果就是无 Key 的 None 模式自动走 free-api 服务器只拿历史日K,有 Pro 档的用户自动解锁分钟 K 和盘口——代码不用改一行。
这是量化项目里很常见的痛点——大多数开源面板要么假设用户是全档付费用户,要么写一堆 if tier == "pro" 的分支。这个项目把这层吃透了,业务代码里搜不到 "pro" 这个字符串。
2. Polars 作为唯一计算核心
整个项目主力是 Polars,选股、指标、监控全部走 Polars 表达式和向量化。回测引擎有两套:自研 Matrix 引擎(默认,纯 Polars/NumPy)和 vectorbt(可选 extras,只在 BacktestService 边界用 pandas)。这意味着绝大多数路径都不会被 pandas 的内存/速度拖后腿。
3. 三层数据源抽象,可插拔做得很彻底
- 内置 Provider —— TickFlow
- YAML 自定义源 —— 用户把
data/data_sources/*.yaml丢进去,填 field_map / auth / batch / rpm,设置页"重新加载"就生效,支持 daily / adj_factor / realtime 三类 - 代码级插件 ——
backend/app/plugins/<name>/目录,带plugin.yaml清单,后端启动时loader.py扫描 +check函数检测依赖。已内置 stock-sdk(Node 子进程桥接第三方财经接口,合规自担)
4. AI 策略生成不是噱头
我看了一下 strategy/ai_generator.py 和 services/ai_provider.py,实现是真的能用而不是 demo:
- 支持 OpenAI 兼容接口(默认 DeepSeek)和本地 Codex CLI 子进程
- AI 生成策略时,会读
prompts/strategy-guide-compact.md精简指南作为系统提示词 - 前端流式接收生成代码,后端
ast.parse+ 禁 importos / sys / subprocess等危险模块的安全校验 - 保存时落
data/strategies/ai/,ai_前缀,绝不污染内置目录 - 每日 token 预算(
AI_DAILY_TOKEN_BUDGET=500000)超限当日不再调用
更重要的是个股 AI 分析(stock_analysis.py + market_recap.py)——技术 / 基本面 / 财务 / 消息面四维流式生成。关键: 作者在 _FOCUS_BLOCKLIST 里把"买入 / 加仓 / 目标价 / 预测涨 / 抄底 / 追高 / 卖吗"等全屏蔽了,防止用户通过"focus"输入绕过系统提示词红线诱导 AI 给买卖建议。这个细节真的能看出来作者对"边界感"的坚持。
18 个内置策略一览
策略代码在 backend/app/strategy/builtin/,每个文件 ~2.5-3.5 KB,Polars 表达式 + META 参数化实现。我把目录里 18 个文件列一下,按类型分组:
- 趋势 / 形态:趋势突破、均线多头、MA 金叉、MACD 金叉放量、布林突破
- 量价 / 涨停:量价齐升、高换手强势、连板股、断板反包、涨停动量、接近涨停
- 反转 / 波动:超跌反弹、超卖反转、新低反转、低波动龙头、回踩 MA20、回踩支撑、强势开盘
每个策略都是独立的 Python 文件,通过 META 字典声明参数(用户可以在 UI 调整阈值),通过 basic_filter(df, params) 返回 Polars 表达式过滤,通过 scoring 加权排序。回测和监控都复用同一套评分口径。
4 类实时监控 + 多通道推送
监控中心是我比较喜欢的一块。统一规则引擎覆盖 4 类规则:
- 策略型 —— 策略扫描结果新增符合标的
- 个股信号型 —— 特定标的的指标条件(如
RSI > 80) - 价格涨跌型 —— 涨跌幅 / 价格突破阈值
- 全市场异动型 —— 快速拉升 / 跌停
每条规则支持多条件 AND/OR + cooldown 去重 + 严重级别(info/warn/critical)。命中后三路推送:右下角弹窗(可配声效)、飞书 Webhook(签名校验)、企业微信智能机器人长连接。
持久化很轻量——data/user_data/alerts.jsonl JSONL 追加写,7 天 / 5000 条滚动清理。这块设计跟大厂那种写 Kafka + ClickHouse 的完全不同,但对个人散户够用。
双引擎回测
回测这块我想单独说。backend/app/backtest/engine.py 是个 139 KB 的大文件,Matrix 引擎(默认)是作者自研的 Polars/NumPy 实现:
- 撮合口径:
close_t/open_t+1/signal_next_minute三选 - 成本模型:佣金双边 + 印花税仅卖出 + 滑点双边,拆分口径,不像有些项目糊在一起
- T+1、止损 / 止盈 / 移动止损、最大持仓天数 / 数 / 敞口
- 等权 / score 加权仓位
- 分钟 K 精确成交(有参考线用穿越价,无参考线用 VWAP)
- 数据缺失时降级为日 K 口径
回测矩阵有磁盘缓存,启动时按 backtest_matrix_cache_prewarm_years=5 在后台线程预热。第一次跑全市场回测不卡,这点很重要。
vectorbt 是 [backtest] 可选 extras,装上后可以用更完整的分析栈,但默认不装——因为 vectorbt 拉来 numba + llvmlite + 绘图依赖太重,macOS Intel 用户还得装 cmake 现场编译。
部署三选一
我自己跑过 ./dev.sh,体验很顺。脚本做几件事:
- 检查
uv/pnpm是否装(没装就报错并给安装指引) - 检查 3018 / 3011 端口是否被占用,占用就直接 kill
- 没装依赖就
uv sync+pnpm install - 同时起 backend(3018)和 frontend(3011),Ctrl-C 一并关
老 CPU 无 AVX2/FMA 是个常见坑——直接给 BACKEND_EXTRAS=legacy-cpu 让 Polars 切到 rtcompat 运行时,dev.sh 会自动从 .env 读这个值同步到 uv sync --extra …。
Docker 部署是单容器,前端 dist 拷进后端镜像,./data 挂到 /app/data。国内网络构建默认走清华 PyPI + 阿里云备用,UV 同时挂两个 index,主源缺包时另一源补位。
这里有个特别重要的合规细节: stock-sdk 插件默认不打包(INCLUDE_STOCKSDK=0),Dockerfile 注释写得很直白——它抓第三方财经网站接口,未经授权,存在版权与反爬风险。如确需启用,构建时传 --build-arg INCLUDE_STOCKSDK=1,使用风险自负。开发模式下需要手动 cd backend/app/plugins/stocksdk && npm install。这是我看到过最干净的合规边界设计,比大多数同类项目把"灰产工具"塞进默认 release 要好得多。
它不能做什么(明文 + 隐含)
边界感是这项目最值得说的地方。README 里明文写了:
- 不对标同花顺 / 通达信(无 K 线画线工具、无完整 Level-2 行情)
- 不内置「AI 荐股 / 涨停预测」
隐含的限制:
- 不做真实交易 —— 纯研究工具,无券商对接,无量化订单通道
- 不做 T+0 撮合模拟 —— 回测默认 T+1
- 不做港美股 —— 数据源只覆盖 A 股(沪深京),Issue #135 用户强呼声但路线图没提
- 不做多用户 —— 单密码 PBKDF2,无 user/role 模型
- None/Free 模式 —— 只能拿历史日K(当日数据盘后 1-2 小时可用),无实时行情、无分钟 K、无财务数据,回测功能完全受限
- 0 个 release tag —— 没有版本回溯锚点,
git log是唯一时间线
几个值得注意的坑
我在扒代码时记了几个用户实操会踩的坑:
-
data/目录完全不入 git。迁移直接拷整目录就行,但千万别git clean -fdx/git reset --hard/ 删整个项目重 clone——会一次性把行情 K 线、自选股、回测记录、监控历史全干掉。README 红字警告,我把这条单独提出来,因为这种"自托管项目最容易出事的命令"真有人会无脑执行。 -
公网部署必须先设密码。未设密码时只放行
127.0.0.1 / ::1 / 10.x / 192.168.x / 172.16-31.x,公网 403 防裸奔也防抢占。公网服务器推荐在.env一次性预置AUTH_PASSWORD=xxx(已设过则不读,改密码走 UI)。或者用 SSH 端口转发:ssh -L 3018:127.0.0.1:3018 user@server,设完密码后 SSH 可以断。 -
Windows Docker 注意: PowerShell/CMD 下
HOME环境变量常未设置,会导致 Docker 挂载${HOME}/.codex路径解析失败、容器读不到 Codex 登录态。.env里加CODEX_HOME_HOST=C:\Users\你的用户名\.codex显式覆盖。 -
Issue #137 "回测矩阵准备失败: matrix parquet root contains no dated partitions" 至今 open(2026-07-22 报,作者回复"更新一下代码",但没确认是否真修了)。如果你打算跑回测,先更新到最新代码,跑一次盘后管道把 enriched 数据灌满,再回测。
-
CORS 取舍:
allow_origins=['*']必须allow_credentials=False,认证走 header(API Key)而非 cookie。这是浏览器规范——cookie + 通配来源是不允许的,所以自托管场景下认证走 header 是合理选择。
我的判断
这是个给个人散户用的"研究 + 监控 + 复盘"台子,不是生产交易系统。
如果你想找一个能直接跑策略 + 看回测净值 + 盘中弹窗 + 飞书推送 + 不用天天折腾环境的 A 股一体化工具,这是个认真的候选。技术新、stars 高、节奏密,但贡献集中作者一人(351/430 commits),出问题你基本只能等作者——这是个人开源项目的常态,你要能接受。
但它深度绑定 TickFlow。如果不愿意用 TickFlow,YAML 自定义源只覆盖 daily / adj_factor / realtime 三类,分钟 K / 财务 / 深度盘口暂时必须走 TickFlow。这是个架构决策而不是 bug——5 档能力门控本来就是围绕 TickFlow 设计的。
我目前的结论:我会持续关注这个项目的迭代,特别是作者画过的 v2 路线图(Webhook 推送、板块异动、早晚报、更多扩展)。如果哪天它支持美股 / 港股 / 自定义数据源覆盖分钟 K,我会考虑迁移我自己的研究流程上去。
不确定项
调研中有几件事我没法 100% 确认,留个尾巴:
- 完整 ~600 个 API 端点我只抽样了用户决策路径上的高频 ~50 个,鉴权边界没逐个审计
- 18 个内置策略的具体 Polars 表达式只看了文件大小和分类,每个的 META 参数没逐个解读
tiers.yaml部分 rpm/batch 数值标注[新增-推断],未到 tickflow.org/pricing 实测确认- Issue #137 是否在最新 commit 修复,未在源码 grep 验证
- Codex CLI 镜像内置 v0.144.3 与本机 Codex 是否真兼容,未实测
- desktop 打包(Python + pywebview + Inno Setup)是否有实际 release artifact 证明成功,无证据
以上这些都引自 https://github.com/shy3130/tickflow-stock-panel,commit SHA c278dd3b02d880b867816acbe44bb3cbbe00ddb0(2026-08-02)。有兴趣深挖的可以拿这份 commit SHA 自己 clone 看。
参考资料
主要源文件(均 pinned 到上述 SHA):
- README.md — 项目主文档
- backend/app/main.py — FastAPI 入口 + lifespan 编排
- backend/app/config.py — pydantic-settings 全局配置
- backend/app/tickflow/capabilities.py — 5 档能力抽象
- backend/app/tickflow/client.py — TickFlow SDK 单例封装
- tiers.yaml — 5 档能力对照表
- backend/app/strategy/engine.py — 策略引擎
- backend/app/strategy/ai_generator.py — AI 策略生成器
- backend/app/services/ai_provider.py — AI 适配器 + 敏感词黑名单
- backend/app/strategy/monitor.py — 监控引擎
- backend/app/backtest/engine.py — Matrix 回测引擎
- backend/app/jobs/daily_pipeline.py — APScheduler 盘后管道
- backend/app/data_providers/base.py — Provider 抽象
- backend/app/plugins/stocksdk/plugin.yaml — 插件清单
- docs/custom-data-source.md — YAML 自定义数据源指南
- docs/deployment.md — 部署 + 老 CPU 兼容
- Dockerfile — 双阶段构建
- Issue #137 回测矩阵 partition 缺失
- Issue #144 策略界面 ETF 加载异常
- Issue #135 美股 + 港股