📈 A股智能量化工作台
自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台
🚀 开箱即用(单容器 / Free 模式无需 Key) · 能力驱动,适配 Free → Expert 全档位订阅 · 🔌 自由接入第三方扩展数据(Tushare、自有量化项目数据等)
⚠️说明:目前项目默认接入内置数据源。自有数据源需二次开发修改字段映射即可;后续需求人多的话可能会实现切换数据源功能。
🎯 项目定位
让任何个人散户 / 量化爱好者,零运维地拥有一套与自己订阅档位严格匹配的 A 股分析、选股、监控工作台。
任意接入第三方数据(Tushare 等),页面可视化自定义配置扩展数据表。
项目所需配置:
| 配置项 | 说明 | 是否必填 |
|---|---|---|
| 数据源 API Key | 数据源凭证,留空启用 Free 模式(无需注册即可体验) | 可选 |
| AI 大模型 API Key | 用于 AI 生成策略、个股分析(开发中)、行情分析(开发中),任意 OpenAI 兼容接口,留空关闭 | 可选 |
| 看板 Dashboard | 策略 Screener |
![]() |
![]() |
| 回测 Backtest | 监控中心 Monitor |
![]() |
![]() |
| 连板梯队 Limit Ladder | 概念分析 Concept |
![]() |
![]() |
⚠️ 🚧 项目持续优化,功能陆续开放,敬请期待。
明确不做:不对标同花顺/通达信的全功能股票软件;不内置任何「AI 荐股 / 涨停预测」。
✨ 核心功能
🔍 选股引擎(Screener)
20+ 个内置策略 —— 每个策略是一个独立 Python 文件(backend/app/strategy/builtin/),基于 Polars 表达式实现:
| 类型 | 代表策略 |
|---|---|
| 趋势 | 趋势突破 · 均线多头 · 缩量回踩 |
| 形态 | MA 金叉 · MACD 金叉放量 · 布林突破 |
| 量价 | 量价齐升 · 高换手强势 · 强势高开 |
| 涨停 | 连板股 · 断板反包 · 逼近涨停 · 涨停动量 |
| 反转 | 超跌反弹 · 超卖反转 · 新低反转 |
| 波动 | 低波动龙头 · 回踩 MA20 反弹 |
- 自定义信号系统 —— 在 UI 上用
字段 + 操作符 + 阈值组合(entry / exit / both),编译成 Polars 表达式热加载,无需写代码即可定义自己的买卖信号。 - 策略商店 —— 内置策略 + 用户自定义策略统一管理,支持参数覆盖(
params暴露阈值)。
➕ 添加自己的策略
除 20 个内置策略外,你可以用三种方式扩展:
| 方式 | 说明 | 前提 |
|---|---|---|
| 🤖 AI 生成 | 用自然语言描述策略思路,LLM 读取 strategy-guide.md 自动生成完整 Polars 策略文件(经 ast 安全校验,限定 import polars as pl)。生成后落入 data/strategies/ai/,即刻可用 |
需先在 配置 中填入 AI Key |
| 📝 代码自定义 / 策略迁移 | 参照 策略开发指南 的文件结构模板,把你已有的自有策略改写为 Polars 文件放入 data/strategies/custom/(文件名/ID 建议 custom_时间戳),引擎自动发现加载——轻松迁移你现成的量化项目策略,无需从头重写 |
无 |
| 🎛️ 自定义信号配置 | 不写代码,在 UI 上用 字段 + 操作符 + 阈值 组合(entry / exit / both),编译成 Polars 表达式热加载,即可定义自己的买卖信号 |
无 |
引擎按
source标记来源:builtin(内置)/custom(手写或迁移)/ai(生成),三者统一进入策略商店管理。
📊 指标流水线(Indicators)
原生 Polars 向量化计算,全 A 股一次扫表落盘为 enriched Parquet:
| 分类 | 指标 |
|---|---|
| 均线系 | MA(5/10/20/30/60)· EMA(5/10/12/20/26/30/60) |
| 趋势系 | MACD(DIF/DEA/HIST)· 动量(5/10/20/30/60d)· 布林带(上/下轨) |
| 震荡系 | RSI(可配周期)· KDJ(K/D/J) |
| 波动系 | ATR(14)· 年化波动率(20d)· 振幅 |
| 量能系 | 量比(5d/10d)· 量均线 |
| 涨跌停 | 涨停信号 · 连板数 · 涨跌幅 · 涨跌额 |
| 原子信号 | MA 金叉/死叉 · MA20 突破/跌破 · MACD 金叉/死叉 · N 日新高/新低 · 布林突破 |
| 复权 | 基于除权因子自动计算前复权(ex_factor / cum_factor),回测与指标一致 |
🧪 回测引擎(Backtest)
自研 Polars/NumPy 撮合引擎为主,兼容 vectorbt 作为可选依赖:
- 三种回测模式:个股 · 策略组合 · 自由信号组合
- 真实约束:T+1 · 手续费 · 滑点(基点) · 止损 · 最大持仓天数
- 组合管理:最大持仓数 · 最大敞口 · 等权 / 自定义仓位
- SSE 流式进度:长任务实时推送进度,支持刷新 / 切页后重连恢复(相同参数任务只启动一次)
- 统计输出:净值曲线 · 夏普 · 最大回撤 · 胜率 · 每笔交易明细
📡 监控中心(Monitor)
统一监控规则引擎 —— 一个页面管理所有类型的监控,实时推送 + 持久化触发记录:
- 四类监控:策略监控 · 个股信号监控(选信号即加) · 个股价格/涨跌监控 · 全市场异动监控
- 灵活条件:多条件 AND/OR 组合 + 冷却期去重(防刷屏) + 严重级别(info/warn/critical)
- 多入口配置:监控中心页面新建规则 · 个股详情页「加监控」· 策略卡片一键开启
- 实时 SSE 推送:命中规则后右下角弹窗通知(可配声效) + 持久化到
alerts.jsonl - 触发记录:时间倒序展示,支持按来源过滤 · 单条删除 · 清空 · 点击查看个股日K
- 菜单未读徽标:离开监控中心后有新触发,菜单显示未读数;进入页面后清零
🤖 AI 策略生成(可选)
- 自然语言 → 策略代码:用一句话描述策略思路,LLM 读取
docs/strategy-guide.md生成完整 Polars 策略文件 - 沙箱约束:生成代码经
ast校验、限定import polars as pl,避免逐行循环,优先向量化表达 - 可插拔:留空 AI 配置即跳过整个模块,不影响核心功能
🧰 数据与扩展
- 多源数据:日 K / 分钟 K / 指数 / 财务(利润 / 资产负债 / 现金流)/ 自选行情
- 🔌 第三方数据接入(重点) —— 内置数据源之外的数据也能用:
- 支持 Tushare 等第三方数据源,通过 HTTP 定时拉取自动入库
- 支持 CSV / Excel 上传 · JSON 写入,自动 schema 发现与符号归一
- 页面可视化配置扩展数据表,无需改代码
- 可接入你自己的量化项目数据,统一并入 DuckDB 查询面,与内置数据同台分析
- 盘后定时管道:APScheduler 15:30 CST 自动拉日 K + 重算 enriched 表 + 跑监控
- 令牌桶限流:适配各档位 rpm / batch 上限,批量合并 + 增量拉取,同一份数据多面板复用
🚀 快速开始
本项目仅通过 Docker 部署,无论是本地体验还是服务器部署都使用同一套镜像。
前置依赖
- Docker
- Docker Compose(已随 Docker Desktop 自带,Linux 需单独安装)
启动
cp .env.example .env # 按需填写 Key(留空即 Free 模式,可直接体验)
docker compose up --build
# 打开 http://localhost:3018
运行测试
# 运行后端全部测试(含回测引擎)
docker compose run --rm test
测试镜像已包含回测依赖,可直接运行
backend/tests下的全部 pytest 用例。
🧭 第一次使用
- 打开面板 → 设置 → 凭据与能力 → 点 重新检测,确认 Tier Label
- 点 立即跑盘后管道 —— 拉日 K + 计算 enriched 表
- Free 用户:只同步内置 DEMO_SYMBOLS(浦发 / 招商 / 茅台等 10 只)
- Starter+:同步全 A 或根据数据源能力获取的 instruments 列表
- 自选页:添加跟踪标的;点代码进 K 线页看蜡烛图 + 买卖点
- 选股页:点任一内置策略卡片即时扫描;或用自定义信号组合条件
- 回测页:选策略 / 信号 + 时间区间 → 跑回测 → 看净值 / 夏普 / 交易明细(SSE 实时进度)
- 监控中心页:配置监控规则(策略/个股信号/价格/市场异动),盘中 SSE 实时弹窗通知 + 持久化触发记录;或在个股详情页点「加监控」快速添加
🏗️ 架构
技术栈
| 层 | 选型 |
|---|---|
| 后端 | FastAPI · Pydantic v2 · APScheduler · sse-starlette |
| 数据 | Polars(计算)· DuckDB(查询)· Parquet(存储)· PyArrow |
| 回测 | 自研 Polars/NumPy 撮合引擎 · vectorbt(可选依赖) |
| 数据源 | A 股数据源 SDK(tickflow[all]) |
| AI(可选) | OpenAI 兼容接口(DeepSeek / 通义 / Ollama 等) |
| 前端 | React 18 · Vite · TypeScript · Tailwind CSS · Framer Motion · Tanstack Query · Lightweight Charts · ECharts · dnd-kit |
| 部署 | Docker 两阶段构建,前端 dist 拷进后端镜像,单容器 |
目录结构
backend/app/
├── api/ # FastAPI 路由(选股/回测/监控/数据/设置等)
├── services/ # 业务服务(选股/行情/数据同步/告警存储等)
├── strategy/ # 策略引擎(内置/自定义/AI生成/监控规则)
├── indicators/ # Polars 指标流水线
├── backtest/ # 自研回测引擎
├── tickflow/ # 数据源 SDK 适配层
└── jobs/ # 盘后定时管道任务
frontend/src/
├── pages/ # 页面组件(Dashboard/Screener/Backtest/Monitor 等)
├── components/ # 可复用组件(图表/表格/选股/监控等)
└── lib/ # API 客户端/QueryKey/格式化工具等
data/ # 本地数据目录(Parquet 分区文件)
├── kline_daily/ # 原始日 K
├── kline_daily_enriched/ # 带指标日 K
├── instruments/ # 标的维表
├── financials/ # 财务数据
├── ext_data/ # 用户扩展数据
└── backtest_results/ # 回测结果
数据流
tickflow 数据源
↓
kline_sync / instrument_sync / index_sync / financial_sync
↓
Parquet 分区文件 (data/)
↓
DuckDB 内存视图
↓
Polars 内存缓存
↓
选股 / 回测 / 监控 / 行情服务
↓
FastAPI → React 前端
档位能力体系
tiers.yaml 定义了 Free → Expert 五档能力,启动时自动探测真实可用能力:
| 档位 | 能力 |
|---|---|
| none | 无 Key,仅历史日 K(批量) |
| free | 免费有效 Key,能力与 none 等价 |
| starter | 实时行情、批量、标的池、除权因子 |
| pro | 增加分钟 K、五档盘口 |
| expert | 增加财务数据、WebSocket |
UI 会显示友好标签(如「≈ Pro」),未解锁的功能自动灰显。
安全
/api/*路径通过auth.py中间件校验访问令牌- 支持
admin/user两种角色,管理员令牌可在.env中配置 - AI 生成策略经
ast安全校验,禁止open/exec/eval/os/sys/subprocess,限定import polars as pl
⚙️ 配置
所有配置通过项目根目录的 .env 文件读取(复制 .env.example 开始)。配置也可在面板 设置 页面内修改。
数据源
当前默认接入内置数据源提供的订阅制 A 股数据。留空 TICKFLOW_API_KEY 即启用 Free 模式,无需注册即可体验。
TICKFLOW_API_KEY= # 留空 = Free 模式;填入 Key = 按订阅档位解锁
系统启动时会自动探测你的真实能力集,UI 显示「≈ Pro」等友好标签。
AI(可选):策略生成
AI 模块用于「自然语言生成策略代码」。所有配置留空即跳过 AI 功能,不影响核心使用。支持任何 OpenAI 兼容接口:
AI_PROVIDER=openai_compat # openai_compat | ollama
AI_BASE_URL=https://api.deepseek.com/v1
AI_API_KEY= # 留空 = 关闭 AI
AI_MODEL=deepseek-chat
AI_DAILY_TOKEN_BUDGET=500000 # 每日 token 预算上限
切换
AI_PROVIDER=ollama时无需AI_API_KEY,适合本地部署大模型。
服务与数据
HOST=0.0.0.0 # 监听地址
PORT=3018 # 服务端口
LOG_LEVEL=INFO # DEBUG | INFO | WARNING | ERROR
DATA_DIR=./data # Parquet / DuckDB 数据存储目录
ACCESS_UUID= # 访问控制 UUID(可选)
ADMIN_TOKEN=admin # 管理员令牌
🗺️ 路线图
| Phase | 内容 | 状态 |
|---|---|---|
| 0 | 仓库骨架 / FastAPI 壳 / Vite + React SPA / Docker 一键起 | ✅ |
| 1 | 能力探测 + Kline 同步 + K 线分析页 | ✅ |
| 2 | Polars enriched 流水线 + Screener + 信号扫描 | ✅ |
| 3 | 自研回测引擎 + T+1 + 手续费 + 止损 + max-hold | ✅ |
| 4 | 监控引擎 + 告警规则 + Webhook + APScheduler 盘后定时 | ✅ |
| 5 | 统一监控中心 + 四类监控规则 + 实时推送 + 持久化触发记录 + 声效通知 | ✅ |
| v2 | Webhook 推送(QMT/掘金下单) · 板块异动 · 早晚报 · 更多扩展 | 🚧 |
📚 文档
- docs/strategy-guide.md —— 策略开发指南(AI 生成器与手写策略的规范)
- docs/strategy-example.md —— 策略示例
- docs/strategy-builder-step1.md / step2.md —— 策略构建步骤
🤝 贡献
欢迎 Issue 和 PR。请通过 Docker 进行本地验证:
# 启动应用
docker compose up --build -d
# 运行测试
docker compose run --rm test
新增内置策略:在 backend/app/strategy/builtin/ 参照现有策略文件,实现 StrategyDef 即可被引擎自动发现。
⚠️ 免责声明
本项目仅供学习与量化研究,不构成任何投资建议。回测结果不代表未来收益。A 股有风险,入市需谨慎。数据准确性以数据源官方为准。





