Skip to content

longyi-xw/quantitative-value-system

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

26 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

QVS - 量化价值分析系统

一个面向中国 A 股市场的全栈投研系统,用来把价值投资研究流程串成一套可落地的工作台。

它不是单一的”估值计算器”,而是围绕以下研究闭环构建的:

  1. 看市场当前处于什么阶段(估值、情绪、广度、资金面)
  2. 找到估值、质量、动量兼具的候选股票
  3. 深入查看个股财务、行业位置、估值区间和技术面
  4. 将候选标的纳入自选股持续跟踪,目标价命中自动推送通知
  5. 通过投资备忘录和复盘记录沉淀决策过程

项目采用 FastAPI + Vue 3 + TimescaleDB + Redis + Celery + Docker Compose,默认以 Docker 方式一键启动。

系统定位

QVS 当前更适合以下场景:

  • A 股价值投资研究与候选池筛选
  • 个股基本面与估值的辅助判断
  • 行业横向比较与市场情绪观察
  • 自选股跟踪与投资复盘记录

它当前不属于:

  • 自动交易系统
  • 回测与组合优化平台
  • 完整券商交易终端
  • 多用户 SaaS 投研平台

当前已实现的核心能力

1. 市场仪表盘

  • 展示上证指数、沪深 300、深证成指、创业板指等主要指数
  • 展示行业热力图,支持按 PE / PB 快速观察行业估值
  • 展示基于融资余额与市场 PB 分位计算的情绪指标
  • 市场广度快照:上涨 / 下跌 / 平盘家数、涨跌停、大涨大跌分布、领涨领跌股
  • 首页缓存展示”近期价值信号”,用于快速查看高分候选标的

2. 情绪观测台

  • 采集微博舆情、股吧帖子等社区文本
  • 使用词典规则和可选 FinBERT 做情绪打分
  • 按小时 / 按日生成情绪快照并落库到 TimescaleDB 超表
  • 输出 z-score、PB 十年分位、流动性分值、恐惧贪婪指数、风险摘要
  • 前端提供市场时钟、周期象限、趋势曲线、帖子明细等可视化
  • 情绪过热 / 过冷、目标价命中等事件会写入站内通知中心

3. 选股器

  • 手动多因子筛选:PE / PB / PS / ROE / 毛利率 / 净利率 / 流动比率 / 负债权益比 / 市值 / 行业
  • 自动筛选:/screener/auto-screen 支持多算法并跑
    • graham / graham+moat:价值 + 护城河叠加
    • momentum:MA 多头排列 + 突破 + 相对强度共振
    • canslim:O'Neil 七因子成长股
  • 首页”价值信号”与自动选股共用同一套筛选引擎
  • 支持筛选结果导出 CSV、空结果给出行业命中诊断

4. 行业分析

  • 提供行业列表、行业估值统计、行业成分股列表
  • 计算行业 PE / PB / ROE 中位数
  • 在行业详情页中查看估值分布和成分股横向对比
  • 支持从本地数据库数据和实时数据做兜底融合

5. 个股详情

  • 个股实时价格、成交量、市值、估值指标
  • 日 / 周 / 月 K 线,支持前复权、后复权、不复权
  • 多期财务报表查看与同比指标展示
  • 多年平均 EPS / 净利润,帮助识别”便宜但不稳定”的标的
  • 公司资料、主营业务、概念标签、护城河得分
  • 内嵌质量分析模块,如 Piotroski F-Score
  • 技术指标面板:均线、MACD、KDJ、RSI、布林带、量能、技术面文字解读

6. 量化工具(单股估值 + 全市场扫描)

单股估值(前端工具 Tab):

  • Monte Carlo DCF
  • Quality-Adjusted Graham Number
  • NCAV / NNWC
  • CAN SLIM 七因子
  • Piotroski F-Score

全市场扫描(均支持行业过滤、市值 / ST 过滤、候选池采样、Redis 30 分钟缓存):

  • Magic Formula 扫描(Joel Greenblatt)
  • Davis Double-Click 扫描(戴维斯双击:EPS 增速 + 估值扩张)
  • RS Rating + 52 周新高突破 扫描(O'Neil 动量因子,1-99 百分位打分)

可调用但暂未接入前端的后端接口

  • EPV
  • Magic Formula 单股评分
  • Moat Score
  • Graham 7 Criteria

7. 资金面

专门的 A 股资金面模块(/capital-flow/*):

  • 北向资金:沪股通 / 深股通净流入历史、累计净买入、北向持股 TOP 榜
  • 龙虎榜:近 N 日龙虎榜明细、上榜原因、买卖席位净额
  • 融资余额:沪深两市融资 / 融券余额趋势,多线对比

前端 资金面 页面用 ECharts 柱图 / 多线图 + 持仓明细表格呈现。

8. 自选股与投资记录

  • 自选股增删改查,支持多列排序 / 筛选 / 对比分析
  • 目标价跟踪:交易时段每 15 分钟刷新一次命中状态,命中触发站内通知
  • 投资备忘录(买前逻辑)
  • 投资日记(买后复盘)
  • 当前为单用户模式(user_id=”default”),后续可扩展为多用户

9. 通知中心

  • 顶部导航集成通知铃铛、未读计数、下拉列表
  • 系统事件(目标价命中、情绪观测异常等)统一入库
  • 支持标记已读 / 全部已读

研究流程示意

市场仪表盘 / 情绪观测台 / 资金面
        ↓
自动选股(价值 / 动量 / CAN SLIM / 魔法公式 / 戴维斯双击 / RS 领涨)
        ↓
行业分析 / 个股详情 / 估值 + 技术工具
        ↓
加入自选股持续跟踪(目标价命中 → 通知中心)
        ↓
记录投资备忘录与复盘

技术架构

                                用户访问
                                   |
                                 Nginx
                  +----------------+----------------+
                  |                                 |
           Vue 3 Frontend                    FastAPI Backend
     (Vite + TypeScript + Antd)              (REST API)
                  |                                 |
                  |                                 +-----------------------------+
                  |                                 |                             |
                  |                          TimescaleDB                     Redis
                  |                       (时序 / 落库存储)              (缓存 / 结果共享)
                  |                                 |
                  |                                 +-------------+---------------+
                  |                                               |
                  |                                            Celery
                  |                                      (定时采集 / 刷新)
                  |                                               |
                  +-----------------------------------------------+
                                                          AkShare / 新浪 / 腾讯 /
                                                          雪球 / 同花顺 / 巨潮 /
                                                          东方财富 / 股吧 / 微博

数据来源与数据流

系统采用”实时拉取 + 本地落库(TimescaleDB)+ Redis 缓存”混合模式:

  • 实时数据:AkShare 及其封装的新浪、腾讯、东方财富、巨潮、同花顺、雪球等源
  • 情绪 / 舆情:股吧、微博
  • A 股资金面:stock_hsgt_*(沪深港通)、stock_lhb_*(龙虎榜)、上交所 / 深交所融资融券
  • 落库数据:
    • 股票基础信息 stocks
    • 行情快照 stock_quotes
    • 财报指标 financial_reports
    • 行业估值 industry_valuations
    • 自选股 watchlist
    • 投资记录 investment_records
    • 情绪帖子 / 情绪快照 sentiment_postssentiment_snapshots(TimescaleDB 超表)
    • 通知中心 notification_messages
  • 缓存(Redis,典型 TTL 15~30 分钟):
    • 市场概览、市场广度、行业列表与估值
    • 个股快照、技术指标
    • 价值信号、各扫描器结果(按参数 hash 缓存)
    • 资金面北向 / 龙虎榜 / 融资余额快照

数据更新机制

  • 应用启动后会立即触发一次”首页价值信号”后台构建任务
  • Celery Beat 负责日常定时刷新行情、财报、行业估值、自选股目标价、情绪快照
  • 目标价命中 / 情绪异常事件由定时任务写入通知中心
  • 前端页面优先读取接口聚合结果,不直接拼接底层数据源

目录结构

quantitative-value-system/
├── backend/                     # FastAPI 后端
│   ├── app/
│   │   ├── api/v1/              # REST API
│   │   ├── core/                # 配置 / 数据库 / Redis / 安全
│   │   ├── models/              # SQLAlchemy 模型
│   │   ├── schemas/             # Pydantic Schema
│   │   └── services/
│   │       ├── akshare/         # 数据获取与映射
│   │       ├── analysis/        # 估值与筛选算法
│   │       └── scheduler/       # Celery 定时任务
│   ├── alembic/                 # 数据库迁移
│   └── pyproject.toml
├── frontend/                    # Vue 3 前端
│   ├── src/
│   │   ├── api/                 # 请求层
│   │   ├── components/          # 组件
│   │   ├── layouts/             # 布局
│   │   ├── router/              # 路由
│   │   ├── stores/              # Pinia 状态管理
│   │   └── views/               # 页面
├── nginx/                       # 反向代理配置
├── scripts/                     # 初始化 / 种子脚本
├── docs/                        # 扩展文档
├── docker-compose.yml
├── docker-compose.prod.yml
└── README.md

页面与模块对应关系

前端导航与后端模块基本一一对应:

  • 市场概览 -> 市场指数、行业热力图、市场情绪、市场广度、价值信号
  • 情绪观测台 -> 情绪快照、市场时钟、周期象限、帖子明细
  • 股票筛选 -> 手动多因子筛选
  • 股票详情 -> 行情 / K 线 / 财务 / 技术指标 / 估值工具
  • 行业分析 -> 行业列表、估值统计、行业成分股
  • 自选股 -> 候选池跟踪、目标价监控、对比分析
  • 投资记录 -> 备忘录 / 交易复盘
  • 量化工具 -> 估值模型 + Magic Formula / Davis Double / RS 领涨三大全市场扫描
  • 资金面 -> 北向资金 / 龙虎榜 / 融资余额
  • AI 分析 -> 当前为占位页,未接入真实 LLM 分析链路

快速开始

方式一:Docker Compose(推荐)

git clone https://github.com/longyi-xw/quantitative-value-system.git
cd quantitative-value-system

cp .env.example .env
# 根据本地环境修改 .env

docker compose up -d --build

启动后可访问:

  • 前端首页:http://localhost
  • 后端 Swagger:http://localhost/docs
  • 健康检查:http://localhost/health

生产模式

docker compose -f docker-compose.yml -f docker-compose.prod.yml up -d --build

本地开发说明

前端

cd frontend
npm install
npm run dev

默认开发地址:

  • 前端:http://localhost:5173
  • Vite 会将 /api 代理到 http://localhost:8000

后端

如果你不通过 Docker 运行后端,可参考仓库中的 Python 依赖配置自行准备环境。后端应用入口为:

cd backend
uvicorn app.main:app --host 0.0.0.0 --port 8000

注意:

  • 后端依赖 TimescaleDB 与 Redis
  • alembic upgrade head 需要先执行
  • 部分行情与财务接口首次拉取会比较慢,属于正常现象

核心环境变量

.env.example 中已经提供了默认项,常用配置如下:

变量 说明
POSTGRES_SERVER TimescaleDB / PostgreSQL 主机
POSTGRES_USER / POSTGRES_PASSWORD / POSTGRES_DB TimescaleDB / PostgreSQL 连接信息
REDIS_HOST / REDIS_PORT / REDIS_PASSWORD Redis 连接信息
BACKEND_CORS_ORIGINS 后端跨域白名单
SECRET_KEY JWT 密钥预留
AKSHARE_TIMEOUT 数据源超时控制
TIMESCALEDB_ENABLED 是否启用 TimescaleDB 模式与展示标记
FINBERT_ENABLED API / 手动刷新是否开启 FinBERT 情绪分析
CELERY_FINBERT_ENABLED Celery 定时任务是否启用 FinBERT,默认关闭以降低常驻内存
CELERY_WORKER_CONCURRENCY Celery worker 并发数,默认 2
CELERY_WORKER_MAX_TASKS_PER_CHILD Celery 子进程处理任务上限,达到后自动回收
STARTUP_VALUE_SCREENER_ENABLED 后端启动时是否立即启动首页价值信号常驻刷新
BACKEND_DB_POOL_SIZE / BACKEND_DB_MAX_OVERFLOW API 进程数据库连接池大小
CELERY_SYNC_DB_POOL_SIZE / CELERY_SYNC_DB_MAX_OVERFLOW Celery 同步任务数据库连接池大小
OPENAI_API_KEY / ANTHROPIC_API_KEY AI 分析预留配置

定时任务

当前 Celery Beat 已配置以下任务(定义在 backend/app/services/scheduler/tasks.py):

任务 调度 说明
update_daily_market_data 工作日 16:00 更新股票基础信息和当日行情
calculate_industry_valuations 工作日 17:00 计算行业 PE/PB/ROE 中位数
update_financial_data 周六 20:00 更新全市场财务报表数据
refresh_watchlist_target_status 工作日 09:00-15:59 每 15 分钟 自选股目标价命中检测,命中入库并发送通知
refresh_sentiment_observatory 每日 08:10-22:10 定时刷新 刷新情绪观测台快照
refresh_value_signals 每 6 小时 刷新首页价值信号缓存
value_screener_loop 可选的后端启动预热任务 在 API 进程内刷新首页价值信号

主要接口概览

市场与情绪

  • GET /api/v1/market/overview
  • GET /api/v1/market/industry-valuation
  • GET /api/v1/market/sentiment
  • GET /api/v1/market/breadth
  • GET /api/v1/market/breadth-details
  • GET /api/v1/sentiment/dashboard
  • POST /api/v1/sentiment/refresh

个股与行业

  • GET /api/v1/stocks/list
  • GET /api/v1/stocks/search
  • GET /api/v1/stocks/{code}
  • GET /api/v1/stocks/{code}/technical
  • GET /api/v1/stocks/{code}/financial
  • GET /api/v1/stocks/{code}/history
  • GET /api/v1/stocks/{code}/company-info
  • GET /api/v1/industry/list
  • GET /api/v1/industry/list-with-stats
  • GET /api/v1/industry/{name}/stocks
  • GET /api/v1/industry/{name}/valuation

筛选与估值分析

  • POST /api/v1/screener/run
  • POST /api/v1/screener/auto-screen — 参数 algorithms: graham / graham+moat / momentum / canslim
  • GET /api/v1/screener/presets
  • GET /api/v1/screener/industry-params
  • GET /api/v1/screener/value-signals
  • POST /api/v1/analysis/canslim
  • POST /api/v1/analysis/piotroski
  • POST /api/v1/analysis/piotroski-by-code
  • GET /api/v1/analysis/dcf-params/{code}
  • POST /api/v1/analysis/dcf
  • GET /api/v1/analysis/graham-params/{code}
  • POST /api/v1/analysis/graham-number
  • GET /api/v1/analysis/ncav-params/{code}
  • POST /api/v1/analysis/ncav
  • POST /api/v1/analysis/epv
  • POST /api/v1/analysis/magic-formula
  • POST /api/v1/analysis/moat-score
  • POST /api/v1/analysis/graham-criteria
  • POST /api/v1/analysis/magic-formula-scan — 全市场魔法公式扫描
  • POST /api/v1/analysis/davis-double-scan — 戴维斯双击扫描
  • POST /api/v1/analysis/rs-breakout-scan — O'Neil RS Rating + 52 周突破扫描

资金面

  • GET /api/v1/capital-flow/northbound
  • GET /api/v1/capital-flow/northbound/holdings
  • GET /api/v1/capital-flow/dragon-tiger
  • GET /api/v1/capital-flow/margin

投资工作流 + 通知

  • GET /api/v1/watchlist
  • POST /api/v1/watchlist
  • PUT /api/v1/watchlist/{code}
  • DELETE /api/v1/watchlist/{code}
  • GET /api/v1/investment-records
  • POST /api/v1/investment-records
  • PUT /api/v1/investment-records/{record_id}
  • DELETE /api/v1/investment-records/{record_id}
  • GET /api/v1/notifications
  • POST /api/v1/notifications/{notification_id}/read
  • POST /api/v1/notifications/mark-all-read

已知边界与当前状态

为了避免 README 过度包装,这里明确写出当前实现边界:

  • AI 分析 页面和接口仍然是占位实现,尚未接入真实 LLM 推理链路
  • 系统当前为单用户模式,自选股和投资记录默认绑定到 user_id="default"
  • 前端请求层已预留 token 注入逻辑,但仓库内尚未提供完整登录 / 权限系统
  • 资金面依赖 AkShare 外部源,遇到源限流 / 节假日空数据时会返回空集合由前端提示
  • 个别行业接口在 Docker 环境下会因为外部源稳定性问题走缓存或兜底逻辑
  • 目前没有配套自动化测试目录,测试基础设施仍需补齐

推荐后续演进方向

如果你准备继续把它打磨成更完整的投研系统,建议优先考虑以下方向:

  1. 补齐真实 AI 研究助手,将系统内已有的行情、财务、行业、情绪、资金面数据组织成结构化上下文
  2. 引入账户体系、权限控制和多用户隔离
  3. 从”自选股”升级到”持仓与交易流水”,形成完整投资生命周期
  4. 增加回测、策略收益归因、组合风险控制
  5. 扩展通知渠道:目前已有站内通知,可接入邮件 / 飞书 / 企业微信
  6. 完善测试、监控、数据质量校验和异常告警

扩展文档

免责声明

本项目仅用于学习、研究和投研辅助,不构成任何投资建议。所有估值结果、筛选结果和情绪分析结果都依赖外部数据源与模型假设,使用前请自行核验。

License

MIT