功能总览

A股量化回测与信号监控平台 · 完整功能说明 正式入口:https://quant.quasarxode.cn


  1. 平台概览
  2. 用户端功能
  3. 管理后台功能
  4. 产品官网
  5. 量化核心能力
  6. 安全体系
  7. 技术架构
  8. 测试基线
  9. 产品边界

一、平台概览

私有化部署的 A 股策略研究平台。围绕「策略 → 回测 → 监控 → 信号 → 下单」这条主线, 提供完整闭环,同时具备细粒度 RBAC、审计日志与多层安全防护。

1.1 四端形态

平台按同域名不同路径拆成四个独立前端产物,互不耦合:

路径产物目录技术形态说明
/website/纯静态 HTML/CSS/JS产品官网(对外展示,不含业务数据)
/docs/website/docs/纯静态 HTML部署文档页
/app/frontend/Vue 3 SPA用户端:策略、回测、监控、信号、订单
/admin/frontend-admin/Vue 3 SPA管理后台:用户、权限、日志、全站资源

后端只提供 /api,四端共用同一套 JWT 鉴权与 localStorage 会话。

用户端与后台是两个完全独立的应用 —— 独立入口、独立产物目录、独立路由表。 后台不打包用户端任何业务页面,用户端也不包含任何管理功能。

1.2 能力地图

                    ┌─────────────────────────────────────┐
 浏览器 ───────────▶ │ Nginx (同域,按路径分流)              │
                    └──────────┬───────────┬───────────┬──┘
                               │           │           │
              /  /docs/        │  /app/    │  /admin/  │  /api/  /health
                               ▼           ▼           ▼       ▼
                          website/    frontend/  frontend-admin/  FastAPI
                         (纯静态)      (dist)        (dist)      (uvicorn)
                                        └───────┬───────┘
                                                │ 共用
                                       frontend-shared/src

1.3 核心数据流

① 用户配置策略(快慢均线 / 波动率过滤 / 风控 / 成本)
        ↓
② 运行回测 → 生成报告(净值曲线 / K 线买卖点 / 交易明细 / 分标的统计)
        ↓
③ 创建监控任务(绑定策略,定时扫描)
        ↓
④ 扫描命中 → 生成信号(数据库唯一索引去重)
        ↓
⑤ 推送(QXBot Webhook,XML 卡片 / 纯文本)
        ↓
⑥ 模拟撮合下单(paper 模式记账 / live 模式需二次确认)

二、用户端功能

访问路径:/app/ 共 13 个页面

2.1 账号体系

页面路径功能
登录/app/login用户名 + 密码 + 图形验证码;失败锁定策略;登录后按 redirect 参数跳回
注册/app/register用户名 / 邮箱 / 密码 + 图形验证码;用户名规则:字母开头,仅含字母数字下划线,3-20 位
找回密码/app/forgot用管理员发放的一次性重置码改密(不开放邮件自助找回,避免邮箱枚举)

图形验证码:纯标准库画的 PNG,一次性使用,恒定时间比较,防重放。

2.2 概览页 /app/dashboard

2.3 我的策略 /app/strategies

2.4 回测记录 /app/backtests

回测报告内容:

2.5 行情监控 /app/monitors

2.6 信号记录 /app/signals

2.7 交易下单 /app/orders

2.8 个人中心 /app/profile

四个标签页:

标签功能
基本资料昵称、手机、邮箱;修改密码
推送配置QXBot Webhook 地址 + 卡片格式(XML / 纯文本);发送测试消息
券商配置券商账号密码(AES 加密入库,接口只回显掩码);自动交易开关
外观设置浅色 / 深色 / 跟随系统三选一,偏好持久化到浏览器

2.9 其他


三、管理后台功能

访问路径:/admin/ 共 14 个页面

后台采用独立应用形态,不打包用户端任何页面。共用同一套 JWT 会话, 但有独立的路由表和守卫(非管理员访问 → 403)。

3.1 数据概览 /admin/overview

3.2 用户管理 /admin/users

3.3 角色权限 /admin/roles

3.4 系统设置 /admin/settings

以下设置改完立即生效,不用重启:

tushare_token、rate_limit_per_minute、token_expire_minutes、 login_max_failed、login_lock_minutes、webhook_timeout、 allow_registration、allow_mock_data、signal_push_enabled、 max_backtest_codes、max_backtest_days、auto_trade_enabled、allow_live_trade

3.5 策略模板 /admin/templates

3.6 操作日志 /admin/logs

3.7 报错日志 /admin/errors

3.8 缓存管理 /admin/cache

3.9 IP 黑名单 /admin/blacklist

3.10 全站数据 /admin/data

三个子视图,均支持用户名 / 状态筛选:

3.11 全站监控 /admin/monitors

3.12 全站策略 /admin/strategies

管理员的权限边界(刻意设计,不是功能缺失): 只读为主,操作受限。管理员可以停用监控任务、停用策略, 但不替用户改参数、不替用户删数据、不代用户下单 —— 参数错了会污染用户自己的回测记录,那是用户的配置,不该由管理员代劳。 停用策略不等于删除,策略与历史回测记录都保留,用户可随时恢复。 恢复策略时监控任务不会自动启动:监控开关归用户, 管理员替他打开会产生他没预期的推送。


四、产品官网

访问路径:/

纯静态站点,无构建步骤,不含任何业务数据。

部署文档页 /docs/

10 章完整部署指南:

  1. 方案概览(三端路径表)
  2. 环境要求
  3. 目录结构
  4. 本地构建
  5. 启动后端(含「必须 --workers 1」警示)
  6. Nginx 配置(含 named location 说明)
  7. 首次上线
  8. 上线验证
  9. 常见问题(6 个真实踩坑)
  10. 版本升级

左侧目录随滚动高亮,移动端折叠为横向标签条。


五、量化核心能力

5.1 策略模型

双均线 + 波动率过滤,是一个可解释的研究起点。

维度参数
信号快慢均线周期(fast_ma / slow_ma)
过滤波动率窗口与阈值(vol_window / vol_threshold)
标的股票池,最多 50 只
区间自定义回测起止时间
风控单笔仓位上限、组合回撤止损线、连续亏损暂停阈值
成本佣金(含最低佣金)、印花税(仅卖出)、滑点

5.2 回测引擎

最终权益 - 初始资金 - 已实现盈亏 ≈ 0(浮点误差 < 0.1)

5.3 行情服务

5.4 信号与推送

5.5 下单

模式行为
paper按最新行情价立即成交并记账,不涉及真实资金(默认)
live受三层开关控制,订单先进入 pending,需人工二次确认

幂等去重:去重窗口 10 秒,键里含 10 秒时间片。 查重要同时看当前片 + 上一片,否则跨片边界的重试会算出另一个键 → 重复下单。


六、安全体系

项目实现
认证JWT(HS256),payload 不含 PII
密码存储bcrypt cost=12,绝不明文
SQL 注入全项目零字符串拼接,全部走 ORM 参数绑定
越权防护owned_query 统一附加 owner 条件;assert_owner 校验单条记录归属;越权返回 404 而非 403,避免探测资源存在性
接口限流滑动窗口,按 IP + 路由分组;登录 10 次/分、注册 5 次/分
验证码一次性使用,恒定时间比较,防重放
账号锁定连续失败 5 次锁定 15 分钟(可配)
IP 黑名单中间件层拦截,支持过期时间
审计日志所有 API 请求 + 业务动作,记录用户/IP/耗时/结果
异常处理堆栈只入库,不返回客户端
SSRF 防护Webhook 地址白名单校验,拒绝内网与云元数据地址
目录穿越静态文件路径解析后校验是否在 dist 内
敏感配置tushare token、券商密码 AES 加密入库,接口只回显掩码
限流绕过防护Nginx X-Forwarded-For 用 $remote_addr 覆盖而非追加

已知的安全设计取舍

  1. 不开放邮件自助找回密码 —— 避免邮箱枚举。用管理员发放的一次性重置码替代。
  2. 越权返回 404 而不是 403 —— 让攻击者无法区分「资源不存在」和「资源是别人的」。
  3. 不实现券商实盘直连 —— A 股散户没有公开、合法、标准化的委托下单 API。

平台只提供模拟撮合;live 模式仅解除前置检查,订单不会真的到达券商。


七、技术架构

7.1 技术栈

层选型
后端FastAPI 0.115 + SQLAlchemy 2.0 + SQLite(WAL)+ Pydantic v2 + PyJWT + bcrypt
前端Vue 3.5 + Element Plus 2.9 + ECharts 5.5 + Pinia + Vite 6
官网原生 HTML + CSS + JS(无框架,无构建步骤)
部署Nginx + systemd / Supervisor

刻意不用:Celery/Redis(单机 SQLite 下队列是过度设计)、Pillow(验证码用标准库画 PNG)、 python-dotenv(自写 20 行解析器)、APScheduler(自写线程调度器)、官网前端框架。

7.2 数据模型

19 张表。核心表:

表用途
users / roles / permissions用户与 RBAC
strategies策略配置
backtest_runs回测记录与报告
monitor_tasks监控任务
signals买卖信号
orders订单
audit_logs操作审计
error_logs异常日志
market_cache行情缓存

7.3 前端关键约定

约定说明
Vite base = Router createWebHistory(base)用户端 /app/,后台 /admin/。不一致时刷新深链接直接 404
resolve.dedupe共享包在应用目录之外,强制依赖从应用根 node_modules 解析
跨应用跳转用整页导航window.location.href,不能用 router.push
路径常量集中管理frontend-shared/src/config/paths.js,不硬编码
主题令牌双主题都要定义--q-* 只在 html.dark 定义会导致浅色下整条 CSS 声明作废
触摸目标尺寸small 控件桌面端 ≥28px,移动端 ≥32px

7.4 Nginx 三端分流(三个必踩的坑)

  1. try_files 的 fallback 参数会被重新做一次 location 匹配 ——

/index.html 会命中官网 root,必须改用 named location。

  1. location = /app/ 要单独处理 —— 通用段的 rewrite 对 /app/ 得 $uri = /,

触发 index 指令时 location 上下文已丢失。

  1. 外层 ^~ 时嵌套的正则 location 永不命中 —— 静态资源要用更长的独立前缀 location。

完整配置见 deploy/nginx.conf(已在生产验证)。


八、测试基线

脚本项数覆盖
backend/tests/smoke_test.py143鉴权、越权、参数校验、SQL 注入、SSRF、限流、回测引擎、信号去重、RBAC、审计导出、下单边界、后台写操作、三端静态回落
backend/tests/idempotency_test.py5订单幂等去重跨片边界
deploy/verify_deployment.py82直连后端,业务逻辑 + 三端静态资源 + 敏感文件防护
deploy/verify_domain.py59走真实域名,证书 / 跳转 / 三端分流 / API 转发 / 安全防护
frontend/tests/theme-responsive.prod.cjs27双主题 + 响应式,19 个页面无溢出无 JS 报错
frontend/tests/admin-new-features.prod.cjs20后台概览趋势图与 Top 榜、全站监控、全站策略
frontend/tests/click-audit.prod.cjs87 按钮实点逐页逐按钮真点,找出「点了没反应」
frontend/tests/split-e2e.test.cjs27三端拆分后路由分流、鉴权守卫、跨应用跳转
frontend/tests/mobile-layout.test.cjs884 视口 × 22 页面的排版检查

接口总量:88 个接口 / 71 个路径(详见 接口文档)


九、产品边界

9.1 引擎层面的建模缺陷

缺陷影响严重程度
不处理涨跌停主板 ±10%、创业板/科创板 ±20%。一字板时真实市场根本买不进卖不出,引擎仍按可成交处理,显著高估收益高
不模拟流动性冲击大资金买入会推高价格。引擎按固定滑点估算,忽略成交量对价格的冲击。小盘股上偏差尤其大高
不处理停牌退市停牌期间无法交易,退市造成本金永久损失。引擎均未覆盖中
分红送转仅近似用后复权价近似,但实际税费、除权日跳空对策略的影响未精确建模低
T+1 撮合简化用「前一日信号 + 当日开盘价」成交。实际开盘可能直接涨停,无法买入中
不考虑交易门槛科创板需 50 万资产 + 2 年经验,创业板需 10 万 + 2 年。引擎不做资格校验低

9.2 策略本身的局限

双均线 + 波动率过滤是一个可解释的研究起点,不是一个能稳定盈利的策略。

  1. 震荡市反复挨刀 —— 横盘震荡中产生大量假信号,来回被止损。
  2. 趋势市吃不到头尾 —— 均线是滞后指标,只能吃到趋势中段。
  3. 参数过拟合陷阱 —— 反复调参直到曲线漂亮,本质是拟合历史噪声。
  4. 单一技术指标的天花板 —— 不含基本面、资金面、情绪面信息。
  5. 股票池选择偏差 —— 手工填标的,只挑「现在涨得好」的结果必然好看但无意义。
  6. 成本被低估 —— 默认参数下单次往返约 0.35%,年换手 20 次吃掉约 7% 收益。

9.3 合规与风险

如果你不能接受以上任何一条,请不要使用本平台。


相关文档