21
0

tickflow-stock-panel 项目调研报告

2026-08-05 14:42:07
2026-08-05 14:57:49
文章摘要
|

tickflow-stock-panel 项目调研报告

最近在跟踪 A 股量化的开源生态,刷到一个叫 tickflow-stock-panel 的项目。我花了点时间把仓库从 README 到每个 router、从回测引擎到数据源插件都过了一遍,记录下来给同好做个参考。

快照信息: 截至 2026-08-05,仓库 shy3130/tickflow-stock-panel,默认分支 main 顶端 commit c278dd3b02d880b867816acbe44bb3cbbe00ddb0(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.pyservices/ai_provider.py,实现是真的能用而不是 demo:

  • 支持 OpenAI 兼容接口(默认 DeepSeek)和本地 Codex CLI 子进程
  • AI 生成策略时,会读 prompts/strategy-guide-compact.md 精简指南作为系统提示词
  • 前端流式接收生成代码,后端 ast.parse + 禁 import os / 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,体验很顺。脚本做几件事:

  1. 检查 uv / pnpm 是否装(没装就报错并给安装指引)
  2. 检查 3018 / 3011 端口是否被占用,占用就直接 kill
  3. 没装依赖就 uv sync + pnpm install
  4. 同时起 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 是唯一时间线

几个值得注意的坑

我在扒代码时记了几个用户实操会踩的坑:

  1. data/ 目录完全不入 git。迁移直接拷整目录就行,但千万别 git clean -fdx / git reset --hard / 删整个项目重 clone——会一次性把行情 K 线、自选股、回测记录、监控历史全干掉。README 红字警告,我把这条单独提出来,因为这种"自托管项目最容易出事的命令"真有人会无脑执行。

  2. 公网部署必须先设密码。未设密码时只放行 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 可以断。

  3. Windows Docker 注意: PowerShell/CMD 下 HOME 环境变量常未设置,会导致 Docker 挂载 ${HOME}/.codex 路径解析失败、容器读不到 Codex 登录态。.env 里加 CODEX_HOME_HOST=C:\Users\你的用户名\.codex 显式覆盖。

  4. Issue #137 "回测矩阵准备失败: matrix parquet root contains no dated partitions" 至今 open(2026-07-22 报,作者回复"更新一下代码",但没确认是否真修了)。如果你打算跑回测,先更新到最新代码,跑一次盘后管道把 enriched 数据灌满,再回测。

  5. 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):

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或者给予支持!

评论