A股财报异动预警引擎
多数据源、零 API Key 门槛,检测"财务正在发生什么变化"(防踩雷)。
定位与边界红线(严格遵守,不越界)
本引擎只回答一个问题:基于历史财报,这家公司的财务是否正在出现恶化异动?
它不是"财务好不好"(那是估值/静态评估的活)。因此明确不碰以下职责,避免与同体系其他 Skill 耦合:
| 红线 | 归属 Skill | |------|-----------| | 静态估值评估 / 财务质量打分 | a-stock-cross-agent | | 底线过滤 / 排雷剔除 | stock-quick-filter | | 仓位决策 / 市场温度 | position-manager |
本引擎是 A股Skill 体系规划方案中的独立 Skill 之一,可单独调用,不自动串联。
设计原理
多期三大报表(主源 westock + 东方财富校验)
│
▼
┌──────────────────────────────────────┐
│ 9 条异动规则(每条独立判定) │
│ A1 营收断崖 → A9 存贷双高 │
└──────────────┬───────────────────────┘
│ 每条规则:触发? 级别? 趋势确认?
▼
┌──────────────────────────────────────┐
│ 三级告警汇总 │
│ 🔴危险 / 🟠警示 / 🟡关注 / 🟢安全 │
└──────────────┬───────────────────────┘
│
▼
控制台输出 + 落盘报表
9 条异动规则
| 编号 | 预警 | 核心逻辑 | 数据源字段 |
|------|------|---------|-----------|
| A1 | 营收断崖 | 单季营收同比 ≤ -30%(或连续3期下滑) | OperatingRevenue_Q |
| A2 | 利润变脸 | 单季扣非净利由正转负 / 同比 ≤ -50% / 增收不增利 | NPDeductNonRecurringPL_Q |
| A3 | 现金流恶化 | 经营现金流为负 / 经营现金流÷净利润 < 0.5(盈利质量差) | NetOperateCashFlow_Q |
| A4 | 应收暴增 | 应收增速 − 营收增速 > 20pct(警惕虚增收入) | BillAccReceivable+ReceivablesFin |
| A5 | 商誉地雷 | 商誉÷净资产 > 30% / 商誉同比大增 | GoodWill+SEWithoutMI |
| A6 | 存货异常 | 存货增速 − 营收增速 > 20pct(警惕滞销跌价) | Inventories |
| A7 | 大额减值 | 归母−扣非差额异常放大(降级筛查,主源无独立减值字段) | NPParentCompanyOwners_Q vs NPDeductNonRecurringPL_Q |
| A8 | 行业偏离 | 个股增速显著低于行业均值(需 i问财增强;免费模式不强制) | i问财行业均值 / 个股趋势 |
| A9 | 存贷双高 | 货币资金÷总资产 > 25% 且 有息负债÷净资产 > 50% | CashEquivalents+InterestBearDebt |
趋势确认:A1–A4、A6–A8 类规则要求连续 trend_confirm(默认3)期同方向恶化才确认,避免单季噪声误报;A5/A9 等存量指标用最新期绝对值判定。
行业适配:金融类(证券/银行/保险/信托)自动跳过 A4/A6/A9(科目性质不同,如"存贷双高"为行业常态);名称与行业取自东方财富。
数据源(多源搭配,免费优先)
L1 主源 westock-data (npx 免费包)
→ 完整多期三大报表,含商誉/有息负债/单季(_Q)字段,覆盖全部 9 规则字段
→ 无需任何 API Key,仅依赖 Node.js(npx)
L2 交叉校验 东方财富 DMSK (免费 HTTP)
→ 校验主源营收/利润/现金流一致性,检测主源异常;提供股票名称与行业
L3 可选增强 i问财 (需环境变量 IWENCAI_API_KEY)
→ 提供行业均值(A8 精确对比)+ 关键指标交叉校验
→ 未配置 Key 时 A8 降级为"个股自身趋势已覆盖",不强制触发
零门槛发布:默认开箱即用(westock + 东方财富均为免费源,无需任何 Key)。仅 A8 精确行业对比需可选配置 i问财 Key。
使用方法
# 单只预警
python financial_early_warning.py 601162
# 批量预警(逗号分隔,支持 sh/sz 前缀或纯6位代码)
python financial_early_warning.py 601162,000100,600519
# 批量 + 生成结构化报表(CSV + MD)
python financial_early_warning.py 601162,000100,600519 --report --out ./report
# 关闭东方财富交叉校验(仅主源,更快)
python financial_early_warning.py 000100 --no-verify
# 调整拉取期数(默认12期,满足连续3期趋势)
python financial_early_warning.py 601162 --num 8
输出示例
==============================================================
天风证券(sh601162) — 🔴危险
==============================================================
🔴 [A1] 营收断崖:单季营收同比 -31.1%(阈值 -30.0%),连续3期下滑
==============================================================
TCL科技(sz000100) — 🟢安全
==============================================================
✓ 未触发财务异动预警(仅基于已获取字段)
结构化输出(--report)
| 文件 | 内容 |
|------|------|
| alert_list.csv | 触发预警的股票及最高级别、触发规则 |
| alert_detail.md | 每只触发股票的详细规则明细 + 安全列表 |
| safe_list.csv | 未触发预警的股票 |
配置说明
所有参数在 financial_early_warning.py 顶部的 CONFIG 字典中,按需调整:
| 参数 | 默认值 | 说明 |
|------|--------|------|
| periods | 12 | 拉取报告期数 |
| trend_confirm | 3 | 趋势确认连续恶化期数 |
| A1_rev_yoy_drop | -30 | 单季营收同比触发阈值(%) |
| A2_profit_yoy_drop | -50 | 单季扣非净利同比触发阈值(%) |
| A3_ocf_np_ratio | 0.5 | 经营现金流/净利润 低于此值→盈利质量差 |
| A4_ar_rev_gap | 20 | 应收增速−营收增速 超此值(pct)触发 |
| A5_goodwill_equity | 0.30 | 商誉/净资产 超此比例→商誉地雷 |
| A6_inv_rev_gap | 20 | 存货增速−营收增速 超此值(pct)触发 |
| A8_industry_gap | 15 | 个股增速低于行业均值 超此值(pct)触发 |
| A9_cash_ratio | 0.25 | 货币资金/总资产 阈值 |
| A9_debt_equity | 0.50 | 有息负债/净资产 阈值 |
已知限制
- 财报为季度披露,预警本质是财报发布后扫描,非盘中实时。
- 主源 westock-data 依赖 Node.js(npx 调用免费包);若环境无 Node,仅东方财富校验源仍可运行(部分字段缺失将降级)。
- A7 大额减值:主源无独立资产减值损失字段,采用"归母−扣非差额异常"降级筛查;配置 i问财 Key 后可升级为精确减值对比。
- A8 行业偏离:免费模式下降级为个股趋势覆盖,精确行业对比需 i问财增强。
- 金融类(证券/银行/保险)科目特性已做适配(跳过 A4/A6/A9),但仍建议结合行业常识研判。
许可
MIT License
⚠️ 风险提示与免责声明 本工具生成的预警结果仅供参考,不构成任何投资建议。 所有结论基于公开历史财报数据,不保证准确性、完整性、及时性。 财报存在滞后与粉饰可能,预警仅作风险排查辅助,非买卖依据。 股市有风险,投资需谨慎。据此操作,盈亏自负。
Scan to join WeChat group