1. 痛点突围:它究竟击穿了什么工程死穴?
自研 A 股量化系统通常会陷入多套异构工具拼接的泥潭。行情数据源紧耦合在特定 SDK 中,导致更换数据提供商需要重写整套拉数逻辑;选股、回测、盘中异动监控使用各自独立的脚本与数据库,最终因指标计算口径不一致产生严重的逻辑漂移;面向大模型的量化助手往往停留在浅层的文本问答,无法安全地操作底层交易策略或回测管道。tick-stock-panel 通过自托管单容器架构和统一的 enriched 数据口径切入,将数据路由、指标流水线、回测研究与 AI 客户端执行引擎收敛至单一控制平面。
💡 架构核心洞见:通过将多源数据归一化至本地 Parquet 并通过能力路由矩阵隔离上游变更,该架构在确保极低运维成本的同时,建立了从原始 Tick 到 AI 动作用例的确定性契约。
2. 核心架构与底层数据流向解析
整个系统的核心计算依赖 Polars 内存向量化引擎,结合本地 Parquet 文件实现高性能查询。底层数据同步管道通过插件化数据源拉取原始行情,流经指标流水线计算 68 列核心指标与信号,最终持久化落盘为 enriched 数据。AI 对话助手则通过 MCP(Model Context Protocol)协议与 61 个开放 API 端点进行交互,任何写操作均强制触发确认卡机制。
[ Third-party Data Sources ] ---> [ Capability Routing Matrix ]
│
▼
[ AI Clients / MCP ] <---> [ API Gateway (61 Endpoints) ]
│
▼
[ Polars Calculation Engine ]
│
▼
[ Local Enriched Parquet Disk ]
数据流在架构中采用显式分层设计。计算任务根据策略声明周期自动路由至对应的执行池,历史回测与实时监控共享相同的信号定义库,从而消除了传统多套系统并行带来的指标不一致风险。
3. 技术选型与性能横向硬核对比
| 选型维度 | 本方案 (tick-stock-panel) | 传统 Python 脚本拼凑 | SaaS 量化终端平台 | 商业券商行情软件 |
|---|---|---|---|---|
| 数据存储 | 本地 Parquet 零外部数据库 | CSV/SQLite 杂乱无章 | 云端专有数据库 | 闭源私有格式 |
| AI 集成 | 12 个 MCP 工具 + 61 API 端点 | 无原生 API,需逆向爬虫 | 平台内置沙箱黑盒 | 不支持开放集成 |
| 全市场扫描 | Polars 毫秒级内存并行向量化 | Pandas 单线程循环迭代 | 服务端限频排队计算 | 依赖本地客户端算力 |
| 私有部署 | Docker 单容器完全自托管 | 极度依赖开发者本地环境 | 无法私有化导出核心资产 | 纯客户端运行无后端控制 |
| 二次开发 | 开放契约化 API 与 Token 档位 | 无统一接口规范 | API 额度昂贵且受限 | 无法修改底层核心逻辑 |
表格中的技术对比表明,该项目在保持自托管数据主权的前提下,通过 MCP 协议向 AI 客户端暴露了完整的读写闭环,彻底打破了商业终端的数据孤岛与定制开发限制。
4. 手把手极客实操:从零构建最小闭环
通过 Docker 快速启动本地量化工作台,无需配置复杂的 PostgreSQL 或 Redis 等外部依赖组件。
# 克隆官方代码库到本地
git clone https://github.com/shy3130/tick-stock-panel.git
cd tick-stock-panel
# 配置环境变量文件,指定数据存储路径与 API 密钥
cp .env.example .env
# 使用 Docker Compose 启动单容器自托管实例
docker compose up -d --build
启动完成后,服务默认监听本地端口。以下是通过 Python 调用其开放 API 执行策略扫描的最小生产脚本:
import httpx
# 定义本地工作台 API 基础地址与访问令牌
API_BASE_URL = "http://localhost:8000/api/v1"
API_TOKEN = "your_generated_token_here"
headers = {
"Authorization": f"Bearer {API_TOKEN}",
"Content-Type": "application/json"
}
# 发起毫秒级全市场策略扫描请求
response = httpx.post(
f"{API_BASE_URL}/screener/run",
json={"strategy_id": "momentum_breakout_v1", "date": "2023-10-25"},
headers=headers,
timeout=30.0
)
# 解析返回的量化信号结构
if response.status_code == 200:
result_data = response.json()
print(f"扫描成功,触发标的数量: {len(result_data.get('signals', []))}")
else:
print(f"API 调用失败,状态码: {response.status_code}, 错误信息: {response.text}")
执行上述脚本后,控制台将输出指定策略在目标交易日筛选出的股票信号集合。
5. 生产落地踩坑指南与避坑建议 (Gotchas)
在将该系统部署至生产或进行高频二次开发时,必须注意本地文件锁与并发写入的性能边界。Parquet 文件虽然提供了极高的压缩比与查询性能,但在多进程同时写入时可能引发文件句柄冲突。
⚠️ 避坑预警 [并发写入冲突]:在编写自定义数据同步脚本时,严禁多个定时任务同时对同一个日K或 Enriched Parquet 分区进行写操作。必须通过内部的任务调度管道串行化落盘动作。
大模型通过 MCP 触发写操作时,由于系统设置了默认的 120 秒超时确认卡机制,用户必须在前端界面及时点击确认,否则处于挂起状态的动作参数将自动作废。
⚠️ 避坑预警 [AI 动作超时失效]:当 AI 助手调用涉及生成策略或修改自选股的写操作工具时,请确保在前端控制面板的待办确认卡中于 120 秒内人工放行,否则自动化管道会因安全超时主动熔断该次变更。
