如何使用 Polars 和 DuckDB 构建个人量化分析终端
任何尝试用代码分析股票行情的开发者都经历过同样的场景。首先打开 Jupyter Notebook,连接 Pandas,通过某个免费的随机 API 拉取历史 K 线数据。用不了几天,Notebook 就膨胀到数百个难以阅读的单元格,指标计算开始卡顿数分钟,而所谓的界面不过是眯着眼看 Matplotlib 图表。
最近我在 GitHub 上发现了 shy31/tick-stock-panel 这个项目。作者构建了一个完整的开源量化分析平台,集回测、选股和股票监控于一体,可通过单个 Docker 容器本地运行。项目最初面向中国 A 股市场设计,但其架构决策和技术栈选择值得单独探讨,无论你交易什么品种。
核心架构与实现原理
大多数自制选股工具的核心问题在于性能。如果通过 Pandas 循环对数千只股票计算均线、MACD、RSI 和布林带,机器很快就会不堪重负。
tick-stock-panel 通过现代化的数据栈解决了这个问题:
- Polars 处理并行指标计算和市场全量筛选,可在毫秒级完成。
- Parquet 作为本地存储格式,用于存储丰富化后的数据表。
- DuckDB 直接在 Parquet 文件上执行快速分析查询,无需启动重型数据库。
- vectorbt 用于隔离的回测模块。
- FastAPI 和 sse-starlette 提供数据服务,并通过 Server-Sent Events 流式推送耗时计算的进度。
- React 18 配合 Lightweight Charts 和 ECharts 库构建简洁的控制面板。
架构非常紧凑:后端和打包后的前端被封装在一个两阶段 Dockerfile 中。应用无需外部 PostgreSQL 或 Redis——整个数据库完全本地化。
平台主要功能
开发者将功能划分为四个核心模块:筛选、假设验证、市场跟踪和个股分析。
| 仪表盘 | 策略选股器 |
![]() |
![]() |
| 回测 | 因子搜索 |
![]() |
![]() |
选股器与内置策略
系统内置了 18 个现成的选股策略。筛选机制基于 Polars 运行:收盘后管道计算丰富化数据集,用户的查询条件在全部标的数据表中进行校验。可以组合标准指标、成交量和 K 线形态,也可以编写自定义信号。
回测与 Alpha 因子搜索
测试分为两种模式:
- 单因子评估,计算 IC 和 IR 指标、分位数收益和多空组合收益。这有助于在建仓前过滤噪音。
- 完整策略回测,包含 T+1 结算规则、滑点、券商佣金和止损机制。
因子挖掘模块的实现方式很有意思。系统在训练集上搜索因子排名组合,过滤相关性较高的指标,并在样本外数据上验证结果。但发现的规则不会盲目应用:候选因子会保存到草稿箱,需要手动确认后才加入工作池。
| 监控中心 | 涨停梯 |
![]() |
![]() |
| 板块分析 | 自选股 |
![]() |
![]() |
实时监控与异动预警
仪表盘包含实时监控模块。可以设置基于价格水平、指标或偏离均值的触发规则。事件触发时,面板会发送 webhook、弹出浏览器通知,甚至通过 Web Speech API 语音播报股票代码。
大语言模型集成
项目通过 OpenAI 兼容接口集成了大语言模型。可以连接 Ollama、DeepSeek 或闭源 API。模型承担两个实用角色:根据文本描述生成选股规则代码,以及在收盘后撰写包含板块涨跌分析的晚间报告。
如何部署与运行
最快的启动方式是使用 Docker Compose:
cp .env.example .env
docker compose up --build
构建完成后,面板在 http://localhost:3018 打开。
本地开发需要 Python 3.11+、Node.js 20、包管理器 uv 和 pnpm:
cp .env.example .env
./dev.sh
脚本会检查环境,通过 uv 安装后端依赖,通过 pnpm 安装前端依赖,然后启动 FastAPI(端口 3018)和 Vite 开发服务器(端口 3011)。
配置在 .env 文件中设置:
TICKFLOW_API_KEY= # Ключ источника данных TickFlow (можно оставить пустым для базового режима)
AI_API_KEY= # Ключ LLM-провайдера для генерации стратегий
PORT=3018 # Порт приложения
接入自有数据源
基础项目配置了中国的 TickFlow 服务 SDK,但开发者将数据层设计为可插拔的。仓库包含一个 Node.js 插件 stock-sdk 和通过 YAML 声明式描述数据源的示例。
如果想将面板适配到莫斯科交易所、加密货币交易所或 Yahoo Finance,只需实现日线数据提供者接口并以 Parquet 格式输入数据。其他所有机制——均线计算、回测引擎、Lightweight Charts 图表和预警系统——都会继续正常工作。
是否值得一试
tick-stock-panel 项目最值得关注的是其架构的整洁性。作者放弃了重型关系型数据库,转而采用 Polars + DuckDB + Parquet 的组合,使系统在普通笔记本上也能流畅运行。
如果你在中国市场交易,项目开箱即用,可以作为现成的工作工具。如果你的兴趣在其他交易所,仓库代码将成为构建自己分析终端的绝佳模板。
相关项目







