>_ DevTrendszh

语言

首页

语言

板块

前端 后端 移动端 DevOps AI / ML 游戏开发 区块链 嵌入式 安全
Python

如何使用 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——整个数据库完全本地化。

平台主要功能

开发者将功能划分为四个核心模块:筛选、假设验证、市场跟踪和个股分析。

仪表盘 策略选股器
Status Panel Strategies
回测 因子搜索
Backtest Factors

选股器与内置策略

系统内置了 18 个现成的选股策略。筛选机制基于 Polars 运行:收盘后管道计算丰富化数据集,用户的查询条件在全部标的数据表中进行校验。可以组合标准指标、成交量和 K 线形态,也可以编写自定义信号。

回测与 Alpha 因子搜索

测试分为两种模式:

  1. 单因子评估,计算 IC 和 IR 指标、分位数收益和多空组合收益。这有助于在建仓前过滤噪音。
  2. 完整策略回测,包含 T+1 结算规则、滑点、券商佣金和止损机制。

因子挖掘模块的实现方式很有意思。系统在训练集上搜索因子排名组合,过滤相关性较高的指标,并在样本外数据上验证结果。但发现的规则不会盲目应用:候选因子会保存到草稿箱,需要手动确认后才加入工作池。

监控中心 涨停梯
Monitor Limits
板块分析 自选股
Sectors Watchlist

实时监控与异动预警

仪表盘包含实时监控模块。可以设置基于价格水平、指标或偏离均值的触发规则。事件触发时,面板会发送 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、包管理器 uvpnpm

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 的组合,使系统在普通笔记本上也能流畅运行。

如果你在中国市场交易,项目开箱即用,可以作为现成的工作工具。如果你的兴趣在其他交易所,仓库代码将成为构建自己分析终端的绝佳模板。

相关项目