一、系统概览
二、数据库总览
所有 stockA 相关表均位于
public schema 下,共 11 张表。
2.1 全部 stockA 表
| 表名 | 记录数 | 用途 | 更新方式 |
|---|---|---|---|
stocka_database26 | 5,209 | 基本面+技术指标主表 | HTTP API (sync_http.py) |
stocka_k | 2,425,435 | 日K线 OHLCV | 直连DB (sync_kline.py) |
stocka_level1~5 | 0~10 | 自选股分级池 | REST API (实时) |
stocka_level11 | 0 | 回收站 | REST API (实时) |
stocka_move_log | 4 | 股票池移动记录 | 自动 (API触发) |
stocka_note | 1 | 股票行情备注 | REST API (实时) |
stocka_etf | 1,494 | ETF行情数据 | sync_etf.py (本地导入) |
stocka_fund | 888 | 基金净值/收益率 | sync_fund.py (本地导入) |
stocka_fund_holdings | 15,000+ | 基金/ETF持仓明细 | sync_fund_holdings.py |
三、核心表结构详解
3.1 stocka_database26 — 基本面+技术指标主表
用途: 选股筛选、详情页基本面面板的数据源。每行代表一只股票。
数据来源: QMT xtdata → all_data.pkl → sync_http.py → HTTP POST → Flask API
| 分类 | 字段名 | 类型 | 说明 |
|---|---|---|---|
| 标识 | code | VARCHAR(20) | 股票代码 (如 600519.SH),唯一键 |
| 标识 | name | VARCHAR | 股票名称 |
| 标识 | market | VARCHAR | 市场: 上海A / 深圳A / 北交所 |
| 标识 | sector | TEXT | 板块分类,逗号分隔 (申万一级/行业/概念/地域) |
| 元数据 | report_period_label | VARCHAR(20) | 报告期标签 (如 2026Q1),来自 m_timetag |
| 元数据 | data_source | VARCHAR(10) | 数据来源: "实时" 或 "模拟" |
| 元数据 | updated_at | TIMESTAMPTZ | 最后更新时间 |
| 行情 | price | NUMERIC | 最新价 (元) |
| 行情 | volume | NUMERIC | 成交量 (手) |
| 行情 | amount | NUMERIC | 成交额 (万元) |
| 行情 | turnover_rate | NUMERIC | 换手率 (%) |
| 基本面 | pe | NUMERIC | 市盈率 (年化) |
| 基本面 | pb | NUMERIC | 市净率 |
| 基本面 | roe | NUMERIC | ROE 净资产收益率 (年化%) |
| 基本面 | gross_profit_margin | NUMERIC | 毛利率 (%) |
| 基本面 | net_profit_margin | NUMERIC | 净利率 (%) |
| 基本面 | debt_ratio | NUMERIC | 资产负债率 (%) |
| 基本面 | revenue_growth | NUMERIC | 营收同比增长率 (%) |
| 基本面 | profit_growth | NUMERIC | 净利润同比增长率 (%) |
| 基本面 | market_cap | NUMERIC | 总市值 (亿元) |
| 基本面 | eps | NUMERIC | 每股收益 EPS (年化) |
| 技术 | td_price_gt_ma5_days | INTEGER | 连续收盘 > MA5 天数 |
| 技术 | td_price_gt_ma10_days | INTEGER | 连续收盘 > MA10 天数 |
| 技术 | td_price_gt_ma20_days | INTEGER | 连续收盘 > MA20 天数 |
| 技术 | td_weekly_uptrend | INTEGER | 周线上涨趋势 (1=是) |
| 技术 | td_weekly_vol_chg | NUMERIC | 周成交量变化百分比 |
| 技术 | td_turnover_d5_chg | NUMERIC | 5日均换手率变化% |
| 技术 | td_turnover_w4_chg | NUMERIC | 4周均换手率变化% |
| 技术 | td_turnover_m3_chg | NUMERIC | 3月均换手率变化% |
| 技术 | td_kline_updated | TIMESTAMP | K线指标计算时间 |
3.2 stocka_k — 日K线数据表
用途: 详情页K线图、技术指标计算、大盘/板块对比曲线的数据源。
数据来源: sync_kline.py 从腾讯K线 API 拉取 (web.ifzq.gtimg.cn),直连 PostgreSQL 写入。
| 字段名 | 类型 | 说明 |
|---|---|---|
code | VARCHAR(12) | 股票代码 (联合主键) |
date | DATE | 交易日 (联合主键) |
open | NUMERIC | 开盘价 |
high | NUMERIC | 最高价 |
low | NUMERIC | 最低价 |
close | NUMERIC | 收盘价 (前复权) |
volume | NUMERIC | 成交量 (手) |
amount | NUMERIC | 成交额 (元,close×volume×100推算) |
turnover_rate | NUMERIC | 换手率 (%,volume×10000/流通股本推算) |
主键:
(code, date) — ON CONFLICT DO UPDATE 幂等写入前复权: 腾讯API参数
qfq,所有价格均为前复权价格增量更新: 批量查询覆盖率 → 仅拉取缺失股票,已有数据自动跳过
3.3 stocka_level1~5 + level11 — 自选股分级池
用途: 用户将选股结果按策略/关注度分级管理。Level1~5 为自选,Level11 为回收站。
数据来源: 浏览器端通过 REST API 实时操作。
| 字段名 | 类型 | 说明 |
|---|---|---|
id | SERIAL PK | 自增主键 |
code | VARCHAR(12) UNIQUE | 股票代码 (唯一) |
name | VARCHAR(50) | 股票名称 |
market | VARCHAR(20) | 所属市场 |
notes | TEXT | 备注 (选股理由/观察要点) |
added_at | TIMESTAMPTZ | 加入时间 (移动时保留原始时间) |
3.4 stocka_move_log — 股票池移动记录
用途: 追踪每只股票在各级别间的移动历史,详情页显示完整时间线。
| 字段名 | 类型 | 说明 |
|---|---|---|
id | SERIAL PK | 自增主键 |
code | VARCHAR(20) | 股票代码 |
from_level | INTEGER | 来源级别 (NULL=首次加入) |
to_level | INTEGER | 目标级别 |
moved_at | TIMESTAMP | 移动时间 |
3.5 stocka_note — 股票行情备注
用途: 行情详情页的"📝 备注"面板,每只股票一条记录。
| 字段名 | 类型 | 说明 |
|---|---|---|
code | VARCHAR(20) PK | 股票代码 (主键) |
notes | TEXT | 备注内容 (多行文本) |
updated_at | TIMESTAMP | 最后保存时间 |
四、数据库部署信息
| 项目 | 值 |
|---|---|
| 服务器 IP | 150.158.87.41 |
| 端口 | 5432 |
| 数据库名 | appdb |
| 用户名 | appuser |
| SSL | require (强制加密) |
| PostgreSQL 版本 | 16.13 |
| 配置文件 | /var/lib/pgsql/data/postgresql.conf /var/lib/pgsql/data/pg_hba.conf |
| 防火墙 | firewalld rich rule: 仅白名单 IP 可访问 5432 |
| 直连需 IP 注册 | 当前: 223.78.155.112, 223.78.155.131 |
| HTTP 同步 | POST /api/stocka/sync (无需直连,无需注册 IP) |
五、数据更新体系
5.1 更新工具
| 脚本 | 连接 | 数据流向 | 表 |
|---|---|---|---|
数据库智能更新.bat | 混合 | 一键执行全部3步 | 全部 |
launch_sync_kline.bat | 直连DB | 腾讯K线API → stocka_k | stocka_k |
launch_compute_indicators.bat | 直连DB | stocka_k → 技术指标计算 | stocka_database26 |
数据库更新_260607rev0.bat | HTTP API | all_data.pkl → API → DB | stocka_database26 |
5.2 完整更新流程
六、API 端点
| 端点 | 方法 | 说明 | 操作的表 |
|---|---|---|---|
/api/stocka/health | GET | 健康检查 | stocka_database26 |
/api/stocka/sectors | GET | 板块/市场列表 | stocka_database26 |
/api/stocka/screen | GET | 多条件筛选 | stocka_database26 |
/api/stocka/stock/<code> | GET | 单只股票详情 | stocka_database26 |
/api/stocka/sync | POST | 批量同步数据 (Token) | stocka_database26 |
/api/stocka/note | GET/POST | 股票备注 | stocka_note |
/api/stocka/move-log | GET | 股票池移动记录 | stocka_move_log |
/api/stocka/level/status | GET | 查询在哪些池 | stocka_level1~5 |
/api/stocka/level/list | GET | 列出指定池 | stocka_level1~5,11 |
/api/stocka/level/add | POST | 加入股票池 | stocka_level1~5 + move_log |
/api/stocka/level/move | POST | 移动级别 | stocka_level1~5,11 + move_log |
/api/stocka/level/note | POST | 更新池内备注 | stocka_level1~5 |
/api/stocka/level/remove | POST | 删除/移入回收站 | stocka_level1~5,11 |
七、数据来源
| 数据类型 | 来源 | 更新方式 | 目标表 |
|---|---|---|---|
| K线 (OHLCV) | 腾讯K线 API | sync_kline.py 每日增量 | stocka_k |
| 实时行情 | 腾讯 QT + QMT get_full_tick() | 浏览器实时 + 桌面分析 | stocka_database26 |
| 财务数据 | QMT XtQuant (PershareIndex) | 桌面分析 → HTTP同步 | stocka_database26 |
| 技术指标 | 基于 stocka_k 本地计算 | compute_indicators.py | stocka_database26 |
| 板块分类 | QMT 本地板块文件 | 桌面分析时提取 | stocka_database26 |
| 分时图 | 腾讯分时 API | 浏览器按需获取 | — (非DB) |
| 大盘/板块对比 | 东财K线 (优先) → 腾讯K线 | 浏览器按需获取 | — (非DB) |
| 自选股操作 | 浏览器用户交互 | REST API 实时写入 | stocka_level* |
八、字段含义与评判标准
| 列名 | 字段 | 含义 | 评判 |
|---|---|---|---|
| 序号 | # | 筛选结果行号,翻页连续 | — |
| 股票代码 | code | 6位数字 + 后缀 (.SH/.SZ/.BJ) | — |
| 股票名称 | name | 中文简称 | — |
| 板块 | sector | 申万一级行业 (鼠标悬停看完整) | — |
| 最新价 | price | 最新成交价,详情页腾讯实时覆盖 | — |
| PE | pe | 市盈率=股价÷年化EPS,越低越便宜 | 0~30合理 |
| PB | pb | 市净率=股价÷每股净资产 | 0~3合理 |
| ROE(%) | roe | 净资产收益率(年化),越高越好 | ≥10%优秀 |
| 毛利率(%) | gross_profit_margin | 毛利润÷营收,高=护城河 | ≥20% |
| 净利率(%) | net_profit_margin | 净利润÷营收 | ≥5% |
| 负债率(%) | debt_ratio | 资产负债率,越低越安全 | ≤70% |
| 营收增长(%) | revenue_growth | 营收同比增长 | 正值=增长 |
| 净利增长(%) | profit_growth | 净利润同比增长 | 正值=增长 |
| 市值(亿) | market_cap | 总市值=总股本×价格 | — |
| EPS | eps | 每股收益(年化),越高越好 | — |
| 成交量(手) | volume | 当日成交量 | — |
| 成交额(万) | amount | 当日成交金额(万元) | — |
| 换手率(%) | turnover_rate | 成交量÷流通股本,反映活跃度 | — |
九、技术指标筛选
| 条件 | 含义 | 建议 |
|---|---|---|
| 连续收盘 > MA5/MA10/MA20 | 收盘连续站在均线上方天数 | ≥3天 |
| 周线上升 | 本周收盘 > 上周收盘 | 是 |
| 周成交量提升% | 本周量较上周变化 | ≥10% |
| 日/周/月换手率上升% | 5日/4周/3月均换手率变化 | ≥0% |
十、筛选建议
| 条件 | 保守型 | 成长型 |
|---|---|---|
| PE | 0~20 | 0~40 |
| PB | 0~2 | 0~5 |
| ROE 最小 | ≥15% | ≥8% |
| 毛利率最小 | ≥30% | ≥15% |
| 净利率最小 | ≥10% | ≥3% |
| 负债率最大 | ≤50% | ≤70% |
| 营收增长最小 | ≥5% | ≥0% |
| 净利增长最小 | ≥10% | ≥0% |
十一、搜索方式
| 方式 | 示例 |
|---|---|
| 完整代码 | 600519 → 精确匹配 |
| 代码片段 | 519 → 模糊匹配 |
| 股票名称 | 茅台 → 模糊匹配 |
| 板块筛选 | 下拉选择申万一级行业 |
| 市场筛选 | 限定上海A/深圳A/北交所 |
十二、页面导航
| 页面 | URL | 功能 |
|---|---|---|
| 选股筛选 | /stockA/select/ | 多条件选股 |
| 帮助说明 | /stockA/select/readme/ | 本文档 |
| 股票池 | /stockA/select/stockpool/ | 分级管理 |
| 行情详情(股票) | /stockA/detail/?code=600519.SH | K线+基本面+备注 |
| 行情详情(ETF) | /stockA/detail/?code=510300.SH | K线+持仓+基本面 |
| 行情详情(基金) | /stockA/detail/?code=003382 | 净值走势+收益率+持仓 |
十三、行情详情页 — K线图表说明
在选股页面点击任意股票行,会打开行情详情页(/stockA/detail/?code=CODE),页面左侧为 K线图区域,由三个垂直排列的子图组成:
复权方式: 所有K线数据均为前复权(qfq),价格可直接比较。
缩放操作: 鼠标滚轮缩放、拖动底部滑块选择时间范围、框选区域可放大。
13.1 图一:K线图(主图)— 占据 75% 高度
| 元素 | 含义 | 操作 |
|---|---|---|
| K线柱 (蜡烛图) | 每根代表一个周期(日/周/月):红色=涨(收盘≥开盘),绿色=跌(收盘<开盘)。实体为开盘-收盘区间,影线为最高-最低区间 | 悬停查看当日 OHLC 详情 |
| MA5 / MA10 / MA20 | 5/10/20 日(周/月)移动平均线,反映短期趋势 | 点击工具栏按钮切换显示 |
| MA60 / MA120 | 60/120 日均线,反映中长期趋势。MA120 默认关闭 | 点击工具栏按钮切换显示 |
| 大盘对比线 | 将对应大盘指数(上证/深证/创业板/科创50/北证50)等比缩放后叠加在主图上,虚线显示 | 点击"📈 大盘"按钮 |
| 板块对比线 | 将股票所属申万一级行业指数等比缩放后叠加,虚线显示 | 点击"📊 板块"按钮(自动识别板块) |
13.2 图二:成交量图 — 占据 9% 高度
| 元素 | 含义 |
|---|---|
| 成交量柱 | 每根柱子对应当日(周/月)成交量(手)。红色=当日收涨,绿色=当日收跌 |
| 量价配合 | 价涨量增=强势;价涨量缩=动能衰减;价跌量增=恐慌抛售;价跌量缩=抛压减轻 |
13.3 图三:MACD 指标图 — 占据 9% 高度
| 元素 | 含义 |
|---|---|
| MACD 柱 ( histogram ) | MACD = (DIF - DEA) × 2。红柱=DIF在DEA上方(多头),绿柱=DIF在DEA下方(空头)。柱体高度反映多空力度 |
| DIF 线 (快线) | EMA12 - EMA26,反映短期与长期价格均线的偏离。深色实线 |
| DEA 线 (慢线) | DIF 的 9日 EMA 平滑线,橙色实线 |
| 金叉/死叉 | DIF 上穿 DEA = 金叉(看涨信号);DIF 下穿 DEA = 死叉(看跌信号) |
| 顶/底背离 | 股价创新高但 MACD 柱未创新高 = 顶背离(见顶);股价创新低但 MACD 柱未创新低 = 底背离(见底) |
13.4 工具栏功能一览
| 按钮/控件 | 功能 |
|---|---|
| 日线 / 周线 / 月线 | 切换K线周期。切换后自动重新加载该周期的K线数据 |
| 分时 | 切换为当日分时走势图(价格曲线+均价线+每分钟量柱),隐藏均线和MACD |
| MA5 / MA10 / MA20 / MA60 / MA120 | 切换各均线在主图上的显示/隐藏 |
| 📈 大盘 | 叠加对应大盘指数对比曲线(虚线) |
| 📊 板块 | 叠加所属申万一级行业指数对比曲线(虚线),自动识别板块 |
| 60/120/250/750条/全部 | 控制图表显示的K线条数,默认750条(约3年) |
| ↺ 还原 | 重置图表缩放,恢复到全量视图 |
十四、基金门类
系统支持股票、ETF、基金三个门类切换筛选。页面顶部有三个按钮:📈 股票 → 📊 ETF → 💰 基金。选择后自动记住,直到点击重置。
14.1 基金数据概览
14.2 基金收录策略
| 阶段 | 策略 | 数量 |
|---|---|---|
| 第一批 | 全市场近1年收益率前500名 | 500 |
| 第二批 | 按类型各取前100名(股票型/混合型/债券型/指数型/QDII/FOF) | +388 |
| 合计 | 去重后共覆盖6大类型 | 888 |
14.3 基金类型分布
| 类型 | 数量 | 说明 |
|---|---|---|
| 混合型 | 353 | 股债混合,灵活配置 |
| 股票型 | 118 | 纯股票投资 |
| 指数型 | 117 | 跟踪指数(含ETF联接) |
| 债券型 | 100 | 国债/信用债/可转债 |
| QDII | 100 | 海外市场投资 |
| FOF | 100 | 基金中的基金 |
14.4 基金筛选条件
| 条件 | 含义 |
|---|---|
| 基金类型 | 按股票型/混合型/债券型等筛选 |
| 近1年收益 ≥ | 最近一年收益率下限 |
| 近3月收益 ≥ | 最近三个月收益率下限 |
| 今年来收益 ≥ | 年初至今收益率下限 |
14.5 基金详情页
点击基金行进入详情页,包含:
| 面板 | 内容 |
|---|---|
| 💰 基金概览 | 代码、类型、单位净值、累计净值、日涨幅、评分 |
| 净值走势图 | 近1年单位净值面积图 + 日涨跌柱状图 |
| 📊 收益率 | 近1周/1月/3月/6月/1年/2年/3年/今年来/成立来 |
| 📦 前十大重仓 | 股票型显示股票持仓,债券型显示债券持仓 |
十五、持仓数据库
ETF 和基金的持仓数据存储在 stocka_fund_holdings 表中,通过批量脚本定期更新(季度报告发布后),前端直接从数据库读取,无需等待网络请求。
| 字段 | 类型 | 说明 |
|---|---|---|
fund_code | VARCHAR(20) | 基金/ETF代码 |
rank | INTEGER | 持仓排名 |
asset_code | VARCHAR(20) | 持仓资产代码 |
asset_name | VARCHAR(200) | 持仓资产名称 |
weight | NUMERIC | 占净值比例(%) |
market_value | NUMERIC | 持仓市值(万元) |
asset_type | VARCHAR(10) | stock(股票) / bond(债券) |
report_date | VARCHAR(50) | 报告期(如 2026年1季度) |
15.1 更新方式
fund_portfolio_hold_em,债券持仓来自 fund_portfolio_bond_hold_em。按季度更新,每次报告期后重新运行即可。十六、常见问题
Q: PE显示为"—"?
A: EPS为0或负值(亏损),PE无意义。也可能是数据未更新。
Q: 筛选结果为空?
A: 逐放宽条件 — PE/PB上限 → ROE下限 → 毛利率 → 增长指标。
Q: 报告期和数据来源为什么显示为空?
A: 需在桌面端用新代码重新"开始分析"→ HTTP同步。旧版代码未填充这两个字段。
Q: 数据多久更新?
A: K线每日增量;基本面随财报季(4/8/10月);桌面端分析后同步即可。
Q: K线同步需要直连数据库吗?
A: 是,K线同步和技术指标计算需要直连 PostgreSQL (IP需在白名单)。基本面同步使用 HTTP API,无需直连。
Q: 如何注册桌面IP?
A: IP 223.78.155.112 和 223.78.155.131 已注册。变更时通过 POST /api/register-ip 添加。