单只股票刷新
从 Tushare 拉取指定股票最新数据,完整执行 ODS → DWS 全流程计算
Tushare 拉取
写入 ODS
计算 DWS
更新摘要
🔬
日常
ODS + DWS 刷新
拉取财务报表、每日基础数据并计算全部 DWS 指标
📊
增量
PE/PB 百分位更新
拉取历史估值序列,计算该股票在2006年以来(覆盖两轮牛熊)的百分位
—
—
当前 PE-TTM
—
PE 历史百分位
—
当前 PB
—
PB 历史百分位
—
🏷️
管理
研究状态设置
标记公司的研究进度
📋
日常
批量刷新多只股票
后台线程处理,支持进度查询
批量全量刷新
对全量上市公司执行 ODS 数据更新和 DWS 指标计算
⚠️ DWS 全量计算需独占 DuckDB 写锁,运行期间无法访问 Flask API 数据接口。建议停服务后跑离线脚本,或在业务低峰期用在线 API 触发(在线 API 内部使用线程但仍有锁竞争风险)。
⚙️
慎用
DWS 全量批量计算
所有上市公司 ODS → DWS 全流程(ICROI / 成长性 / 利润率 / 融资分析)
推荐停服务后在终端运行离线脚本,更稳定。
# 切到项目目录
cd C:\Users\123\WorkBuddy\2026-05-05-task-1
python batch_processor.py --force
或:在线 API 触发(有锁竞争风险)
—0%
📊
日常
选股摘要表更新
计算 ROIC/ROE/PB/股息率多年均值与市场排名,写入 company_screening_summary
此接口可在线调用,不需要停 Flask。
🔁
耗时
PE/PB 百分位全量更新
离线脚本:拉全量股票 2006年以来 历史估值序列,批量写入 stock_valuation_history 并计算百分位
全量约 2-4 小时,必须停 Flask 后运行(DuckDB 独占锁)。支持断点续传。
# 第一步:拉历史数据(支持 Ctrl+C 断点续传)
python build_stock_valuation_history.py
# 第二步:批量计算百分位(约5分钟)
python calc_pe_pb_percentile.py
🏗️
一次性
数据库迁移(一次性)
扩展字段、初始化新表结构
指数 & 行业 ETF 估值
更新宽基指数(上市以来)和行业 ETF(2015年以来)的 PE/PB 及历史百分位
📈
日常
每日增量更新
宽基用 Tushare index_dailybasic;行业自算(成分股权重 × daily_basic 市值法)
宽基 7 只 + 行业 ETF 13 只 = 共 20 个指数。每日收盘后执行。
📉
一次性
上市以来历史回填
拉取宽基指数上市以来历史 PE/PB 序列,一次性写入 index_valuation_history(行业指数从2015年开始)
回填耗时较长,建议在业务低峰期执行。行业指数历史用价格比例法估算,后续积累真实数据后自动替换。
🔍
诊断
指数 PE 诊断
查看某个指数的历史 PE 分布,验证百分位计算是否正确
PE/PB 历史百分位
管理个股历史估值序列,查看百分位计算覆盖情况
📥
增量
单股历史数据拉取 & 计算
从 Tushare 拉取该股票历史 PE/PB 月度数据,计算2006年以来百分位
—
—
当前 PE-TTM
—
PE 历史百分位
—
当前 PB
—
PB 历史百分位
—
📑
诊断
覆盖情况统计
查看 stock_valuation_history 表中有多少股票已有历史数据
⚡
慎用
全量离线说明
需要停 Flask 才能运行(DuckDB 独占锁),预计 2-4 小时
第一步:拉取历史数据(断点续传)
python build_stock_valuation_history.py
第二步:批量计算百分位(约5分钟)
python calc_pe_pb_percentile.py
说明:全量覆盖约 5500 只股票,每只 120 个月度数据点 ≈ 66 万行。第一步耗时主要受 Tushare API 限速影响(含自动重试和断点续传);第二步纯本地计算,极快。
定时任务配置
通过 Windows 任务计划程序配置自动化运行
📋
推荐定时计划
每日自动运行的任务清单
| 任务 | 时间 | 命令 / 接口 | 需停服务 |
|---|---|---|---|
| 指数估值更新 | 16:10 | POST /api/admin/update-index-valuation | 否 |
| 选股摘要更新 | 16:30 | POST /api/admin/update-screening-summary | 否 |
| DWS 全量计算 | 02:00 | batch_processor.py --force | 是 |
| PE/PB 百分位(月度) | 每月1日 | build_stock_valuation_history.py + calc_pe_pb_percentile.py | 是 |
🗓️
Windows 任务计划 — 快速配置
复制命令后在管理员权限 PowerShell 中运行
① 指数估值更新(每日 16:10)
python setup_scheduler.py install --task-name IndexValuation --script scripts/update_index_valuation.py --time 16:10
② 选股摘要(每日 16:30)
python setup_scheduler.py install --task-name Screening_Daily --script scripts/update_screening_summary.py --time 16:30
③ DWS 全量计算(每日 02:00)
python setup_scheduler.py install --time 02:00
💡
数据管道架构说明
日内实时(可在线调用)
✅ 单只股票 ODS+DWS 刷新
✅ 指数估值每日更新
✅ 选股摘要表更新
✅ 单只 PE/PB 百分位计算
✅ 指数估值每日更新
✅ 选股摘要表更新
✅ 单只 PE/PB 百分位计算
离线批量(需停 Flask)
⚠️ DWS 全量重算(batch_processor.py)
⚠️ 历史 PE/PB 拉取(build_stock_valuation_history.py)
⚠️ PE/PB 百分位全量计算(calc_pe_pb_percentile.py)
⚠️ 历史 PE/PB 拉取(build_stock_valuation_history.py)
⚠️ PE/PB 百分位全量计算(calc_pe_pb_percentile.py)
数据流向
Tushare API
↓ ODS (income_statements, balance_sheets…)
↓ DWS (dws_growth_annual, dws_financing…)
↓ company_screening_summary
↓ stock_valuation_history → PE/PB 百分位
↓ ODS (income_statements, balance_sheets…)
↓ DWS (dws_growth_annual, dws_financing…)
↓ company_screening_summary
↓ stock_valuation_history → PE/PB 百分位
数据库概览
查看所有表的行数,快速诊断数据完整性
点击刷新按钮查询