2026-07-01 22:07:55 +08:00
2026-07-01 22:07:55 +08:00
2026-07-01 22:07:55 +08:00
2026-07-01 22:07:55 +08:00
2026-07-01 22:07:55 +08:00
2026-07-01 22:07:55 +08:00
2026-07-01 22:49:32 +08:00
2026-07-01 22:07:55 +08:00
2026-07-01 22:59:07 +08:00
2026-07-01 22:07:55 +08:00
2026-07-01 22:07:55 +08:00

📈 A股智能量化工作台

自托管、零运维的 A 股「选股 + 监控 + 回测」量化工作台

License: MIT Python React Deploy: Docker

🚀 开箱即用(单容器 / 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 用例。


🧭 第一次使用

  1. 打开面板 → 设置 → 凭据与能力 → 点 重新检测,确认 Tier Label
  2. 立即跑盘后管道 —— 拉日 K + 计算 enriched 表
    • Free 用户:只同步内置 DEMO_SYMBOLS(浦发 / 招商 / 茅台等 10 只)
    • Starter+:同步全 A 或根据数据源能力获取的 instruments 列表
  3. 自选页:添加跟踪标的;点代码进 K 线页看蜡烛图 + 买卖点
  4. 选股页:点任一内置策略卡片即时扫描;或用自定义信号组合条件
  5. 回测页:选策略 / 信号 + 时间区间 → 跑回测 → 看净值 / 夏普 / 交易明细(SSE 实时进度)
  6. 监控中心页:配置监控规则(策略/个股信号/价格/市场异动),盘中 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/掘金下单) · 板块异动 · 早晚报 · 更多扩展 🚧

📚 文档


🤝 贡献

欢迎 Issue 和 PR。请通过 Docker 进行本地验证:

# 启动应用
docker compose up --build -d

# 运行测试
docker compose run --rm test

新增内置策略:在 backend/app/strategy/builtin/ 参照现有策略文件,实现 StrategyDef 即可被引擎自动发现。


⚠️ 免责声明

本项目仅供学习与量化研究,不构成任何投资建议。回测结果不代表未来收益。A 股有风险,入市需谨慎。数据准确性以数据源官方为准。

S
Description
No description provided
Readme 102 MiB
Languages
TypeScript 57.9%
Python 40.2%
Inno Setup 1.1%
PowerShell 0.3%
Shell 0.2%
Other 0.1%