Tickflow Stock Panel:如何构建自己的量化股票分析终端
当你开始深入研究算法交易和市场分析时,很快就会遇到同样的瓶颈。成品终端要么价格高昂,要么绑定了专有云服务,你无法自行处理原始数据。如果你尝试用零散的 Python 脚本自己搭建一个“弗兰肯斯坦”,最终只会变成一堆处理几年历史数据时就会内存耗尽崩溃的 Jupyter 笔记本。
最近偶然发现了一个有趣的项目叫做 tickflow-stock-panel(简称 TSP)。这是一个开源自托管的股票筛选、回测和监控面板。项目最初聚焦于中国 A 股市场和 TickFlow API,但从工程角度来看构建得非常精心。内部采用了扎实的现代化技术栈:Polars 用于快速表格处理、DuckDB 配合 Parquet 进行存储和查询、FastAPI 作为后端、前端则使用简洁的 React。
面板功能介绍
项目作者在开头明确声明:该项目无意取代通达信或 Thinkorswim 这类券商终端,也没有“保证盈利的 AI 魔法按钮”。这是一个用于验证假设和追踪信号的工作站。

从功能划分来看,这是一套扎实的工具组合:
- 股票筛选和过滤。内置 18 种策略,支持自定义条件配置或通过 LLM 生成规则(支持任何兼容 OpenAI 的 API,如 DeepSeek 或本地 Ollama)。得益于 Polars,在指标列表上扫描整个市场仅需不到一秒。
- 技术指标计算管道。系统实时计算经典指标(MA、EMA、MACD、RSI、KDJ、布林带)并将丰富后的数据保存到本地 Parquet 文件。
- 回测模块。引擎支持多种模式的回测(因子分析含 IC/IR 指标,以及完整策略回测)。它计算权益曲线、回撤、夏普比率,并考虑佣金、滑点和止损的交易胜率。执行进度通过服务器端推送事件(SSE)实时流式传输到客户端。
- 监控和告警。可以将规则绑定到策略、价格水平或市场异常。支持浏览器内语音信号和通过 Webhook 的通知推送。

底层技术栈
项目架构值得特别关注。这里没有臃肿的关系型数据库或繁重的消息队列。
┌─────────────────────────────────────────────────────────┐
│ React 18 UI │
│ (Vite, Tailwind, Lightweight Charts, ECharts, dnd) │
└────────────────────────────┬────────────────────────────┘
│ REST / SSE
┌────────────────────────────▼────────────────────────────┐
│ FastAPI Backend │
│ (Pydantic v2, APScheduler, sse-starlette) │
└──────────────┬───────────────────────────┬──────────────┘
│ │
┌──────────────▼──────────────┐ ┌──────────▼──────────────┐
│ Вычисления │ │ Хранение │
│ Polars / vectorbt │ │ DuckDB + Parquet │
└─────────────────────────────┘ └─────────────────────────┘
开发者押注于本地机器性能:
- Polars 处理所有重型表格转换。它充分利用所有 CPU 核心,不像原生 Pandas 那样在处理数百万行数据时卡顿。
- DuckDB 和 Parquet 负责分析查询。数据以紧凑的二进制格式存储在本地,无需运行 PostgreSQL 或 ClickHouse 即可即时读取。
- vectorbt 仅在回测阶段使用,作为经过验证的用于交易模拟的向量化库。
- Docker 多阶段构建 将编译后的前端和后端打包成单个轻量级容器。

本地运行指南
可以通过两种方式部署系统。如果你想深入源代码并自行添加功能,开发模式是最简单的选择。
需要 Python 3.11+、Node 20+、包管理器 uv 和 pnpm:
# Клонируем проект и настраиваем переменные окружения
git clone https://github.com/shy3130/tickflow-stock-panel.git
cd tickflow-stock-panel
cp .env.example .env
# Запуск dev-скрипта (поднимет фронтенд на :3011 и бэкенд на :3018)
./dev.sh
第二种选择是使用 Docker Compose:
cp .env.example .env
docker compose up --build
启动后,Web 界面可在 http://localhost:3018 访问。

基础配置位于 .env 中,配置项很少:
TICKFLOW_API_KEY= # Ключ данных (можно оставить пустым для базовой истории)
AI_API_KEY= # Ключ LLM (OpenAI-compatible) для автогенерации стратегий
PORT=3018 # Порт веб-сервера
如果你不交易中国市场,这个项目仍然很有价值。连接自定义数据源的架构在 docs/custom-data-source.md 中有文档说明。你可以接入自己的 CSV、JSON,或为 MOEX / Yahoo Finance / 加密交易所编写适配器,复用现成的筛选界面、图表和向量化回测引擎。


适用人群
首先,对金融科技和算法交易感兴趣的开发者会欣赏这个仓库。
一方面,对于寻求轻量级自托管监控系统而不想处理额外基础设施的人来说,这是一个现成可用的工具。另一方面,代码库清晰地展示了如何将 FastAPI、Polars 和 DuckDB 正确地整合到一个具有流式响应和交互式图表的响应式应用中。
如果你一直想编写自己的筛选器或回测工具,至少值得查看 shy3130/tickflow-stock-panel 仓库的数据处理方法。
相关项目