quarterly-forecast — A股季度收入/核心利润预测(HTML)
用途
用户输入 A 股代码或名称后,生成自包含 HTML 报告(内联 ECharts,无外部依赖),在 WorkBuddy 预览面板直接展示:
- 指标卡:最新单季营收/核心利润、同比增速、下季预测值
- 图1 指数法预测季度收入(实际值+预测值+线性趋势线,复刻 Excel chart39 配色:实际蓝 4472C4 / 预测橙 ED7D31 / 趋势绿 00B050 虚线)
- 图2 季度收入同比上年(复刻 chart40)
- 图3 指数法预测季度核心利润(复刻 chart41)
- 图4 季度核心利润同比上年(复刻 chart42)
- 季节指数表、13 期季度明细表(含同比涨跌红绿标注)
不再输出 Excel(用户有原表);--xlsx 参数可选用。
模型逻辑(指数法 = 线性回归 × 季节指数)
- 对 13 期单季值 y₁..y₁₃ 做最小二乘:斜率、截距(=Excel LINEST)。
- 季节指数(按自然季度分组):某季指数 = 该季所有值平均 / 全部 13 期平均。
- 预测值(第 14 期)= (截距 + 14×斜率) × 下季度季节指数。
- R² = 实际值 vs 历史期拟合预测值的相关系数平方(=Excel RSQ)。
数据来源(免费公开接口,无需登录)
- 东财 F10 利润表:
emweb.securities.eastmoney.com/PC_HSF10/NewFinanceAnalysis/LrbAjaxNew?companyType=4&reportDateType=1&reportType=1&dates=<财报季末,...>&code=SH688018 - 单次请求最多返回 5 期 → 分 4 批(每批 5 个财报季末日期)抓最近 20 期。
- 返回累计值;单季度 = 本期累计 − 上期累计,Q1(3月末)特例:单季 = 本期累计本身(年初累计为 0,不能减上年年报)。
- 单位:元 → 输出百万元(÷1e6)。
核心利润(Choice 定义,计入资产减值)
单季核心利润 = 营业收入 − 营业成本 − 研发费用 − 税金及附加 − 销售费用 − 管理费用 − max(财务费用, 利息费用) − 资产减值损失 − 信用减值损失
字段映射(东财 JSON):OPERATE_INCOME=9, OPERATE_COST=10, OPERATE_TAX_ADD=11, SALE_EXPENSE=12, MANAGE_EXPENSE=13, FINANCE_EXPENSE=14, ASSET_IMPAIRMENT_LOSS=15, RESEARCH_EXPENSE=89, FE_INTEREST_EXPENSE=127, CREDIT_IMPAIRMENT_LOSS=129
运行
python <skill>/scripts/forecast.py <股票代码或名称> [输出目录] [--xlsx]
- 输入:
688018.SH/688018/300308/贵州茅台均可(名称走东财 suggest 接口,市场按代码前缀 6/9→SH 判断)。 - 输出:
预测收入利润_<公司名>_<代码>.html(自包含,~1MB,echarts 内联自 assets/echarts.min.js)。 - 生成后必须调用 present_files 展示 HTML(WorkBuddy 自动开预览面板)。
- 需要 venv:
C:/Users/sunya/.workbuddy/binaries/python/envs/default/Scripts/python.exe(含 openpyxl、requests)。
环境要求
- Python 3.10+,依赖 requests(openpyxl 仅
--xlsx时需要)。 - 生成 HTML 不依赖 Excel/VBA/网络库外任何东西。
已知边界
- 线性回归对「加速增长」序列会低估最新趋势(模型特性,与原 Choice 表一致)。
- 单季度数据取决于披露进度:年报披露前最新期可能是三季报,脚本自动取最近 13 期。
- 退市/新股/次新股(数据不足 13 期)会报错提示。