ashare-pre-st-filter
This Claude Code skill predicts whether A-shares listed on mainland Chinese main boards will receive ST (Special Treatment) or *ST (delisting risk) warnings in the next fiscal year based on the latest interim/third-quarter reports or performance forecasts, incorporating Sina's regulatory penalty records as independent evidence to determine risk levels. Use it when analyzing ST risk for A-share stocks, excluding Hong Kong, US, or crypto markets and excluding financial fraud predictions.
git clone --depth 1 https://github.com/HKUDS/Vibe-Trading /tmp/ashare-pre-st-filter && cp -r /tmp/ashare-pre-st-filter/agent/src/skills/ashare-pre-st-filter ~/.claude/skills/ashare-pre-st-filterSKILL.md
> **依赖**:本 skill 必须配合 [tushare skill](../tushare/SKILL.md) 使用,缺数据时回退到 [akshare skill](../akshare/SKILL.md)。
# A 股 ST/*ST 风险预测
## 适用范围
- 仅 A 股**主板 / 创业板 / 科创板**。港股、美股、加密、商品、**北交所**(`8xxxxx.BJ` 监管规则与本 skill 阈值不一致)均不适用,本 skill 直接拒绝。
- 仅做"下一财年是否会被 ST/*ST"的前瞻预测,不做财务造假预测。
- 输出双轴结果:**触线风险等级** + **预测可信度**。
## 触发条件
用户提问形如:
- "分析 000729.SZ 的 ST 风险"
- "600xxx 下个年报会不会被 ST"
- "帮我看一下 300xxx 是否有退市风险"
收到此类请求时,按下面"分析流程"执行;其他场景不要主动启用本 skill。
## 数据获取规范(tushare 优先 → akshare 兜底)
**铁律**:
1. **所有财务/基本面/分红/审计/ST 状态数据,必须先调用 [tushare skill](../tushare/SKILL.md)**,按下表指定的接口名、`ts_code`、`period` 拉取。
2. 当 tushare 接口因积分不足、token 缺失或返回空时,**回退到 [akshare skill](../akshare/SKILL.md)** 对应函数。
3. **akshare 兜底数据必须在最终输出"备注"中显式标注**:`数据源:akshare(非官方聚合,不保证完整性,建议核对原始公告)`。**不允许只用 akshare 给出"高可信度"预测**——akshare 兜底的红线项可信度强制降一档(高→中高,中高→中,中→低)。
4. 监管处罚(E2)走本 skill 自带的 [scripts/fetch_sina_penalties.py](scripts/fetch_sina_penalties.py),不经过 tushare/akshare。
### 数据需求映射表
| 数据需求 | tushare 接口(首选) | 抓取参数 / 时间窗口 | akshare 兜底 | akshare 注意事项 |
|---------|---------------------|-------------------|-------------|----------------|
| 当前 ST 状态 | `stock_st` | 最近一个交易日 | `stock_zh_a_st_em()` | 仅返回当前 ST/退市整理板列表,历史不可查 |
| 历史改名 | `namechange` | `ts_code` 全历史 | `stock_zh_a_new_em()`(仅新股,无改名) | akshare 无完整改名接口,必要时跳过 |
| 股票基础信息(板块判断) | `stock_basic` | `list_status='L'` | `stock_individual_info_em(symbol)` | 字段名不同,需自行映射 |
| 业绩预告 | `forecast` | `ts_code` + 最近 2 个 period(`{Y}0630`/`{Y}0930`/`{Y}1231`) | `stock_yjyg_em(date='YYYYMMDD')` | 按报告期日期反查,需先按 period 拉全市场再筛 ts_code |
| 业绩快报 | `express` | 同上,最近 2 个 period | `stock_yjbb_em(date='YYYYMMDD')` | 同上,全市场快照需筛 |
| 利润表 | `income` | `ts_code` + 最近 5 个 period(过去 4 年年报 `{Y}1231` + 最新中报/三季报) | `stock_financial_report_sina(stock='sh600000', symbol='利润表')` | 单位不一致(万元 vs 元),需做归一;季报缺失常见 |
| 资产负债表 | `balancesheet` | 同上 | `stock_financial_report_sina(stock='sh600000', symbol='资产负债表')` | 同上 |
| 现金流量表 | `cashflow` | 同上 | `stock_financial_report_sina(stock='sh600000', symbol='现金流量表')` | 同上 |
| 财务指标(扣非净利润等) | `fina_indicator` | `ts_code` + 最近 5 个 period | `stock_financial_analysis_indicator(symbol='600000')` | 字段中文,扣非字段名为"扣除非经常性损益后的净利润" |
| 审计意见 | `fina_audit` | `ts_code` + 最近 2 个年报 period | **akshare 无对应接口** | 缺失时在输出中标注"审计意见数据缺失",**不得跳过**——必须提示用户去官网查 |
| 分红 | `dividend` | `ts_code` + 近 5 年 `div_proc='实施'` | `stock_history_dividend_detail(symbol='600000', indicator='分红')` | 字段中文,需把"派息"金额×总股本得到现金分红总额 |
| 日线行情(1 元退市预警) | `daily` | `ts_code` + 最近 30 个交易日 | `stock_zh_a_hist(symbol='600000', period='daily', adjust='')` | 必须用**不复权**价格判断 1 元退市线 |
| 每日指标(市值) | `daily_basic` | `ts_code` + 最近一个交易日 | `stock_zh_a_spot_em()` 全市场快照筛 `代码=600000` | 字段名为"总市值"(**单位:元**,东方财富 push2 原始口径,akshare 不做缩放),换算成亿元需 `/1e8`。⚠️ 不要与 tushare `daily_basic.total_mv`(万元)混淆——本列是 akshare 兜底口径 |
| 财报披露日期 | `disclosure_date` | `ts_code` + 当前年度 | **akshare 无对应接口** | 缺失时按经验估算(4/30 年报、8/31 中报、10/31 三季报) |
| 监管处罚 | — | — | **走本 skill 自带 sina 脚本** | 见 E2 章节 |
### 时间窗口口径统一
按数据类型分别处理,**禁止用单一 60 天经验值统一对齐**:
- **财务报表(income / balancesheet / cashflow / fina_indicator)**:以 `disclosure_date` 实际公告日为准;该接口不可用时按法定截止日(年报 4/30、中报 8/31、三季报 10/31、一季报 4/30)做兜底。在公告日 +1 天起方可视该 period 为"最新可得"。
- **"过去 N 年年报"**:一律 `period = {Y}1231`,不要用日历年起止。
- **业绩预告 forecast / 业绩快报 express**:只取 `ann_date ≥ 当前年度 1 月 1 日` 的记录;按 `ann_date` 倒序取最新一条,老 period 的预告对预测无效。
- **dividend**:按 `(end_date, ann_date, cash_div_tax)` 三元组**强制去重**——tushare 同一笔分红会出现 3-4 行(预案/股东大会通过/实施),直接累加会三倍误算。
## 第一步:当前状态核查(M0)
**判断公司当前是否已被风险警示,并据此调整分析方向(不一刀切结束)**:
调用顺序:
1. 优先调用 `stock_st`(tushare skill,3000 积分),按当前最近交易日查询;记录 `type` / `type_name`。
2. 如积分不足,回退到 `namechange`(免费):拉取 `ts_code` 全部历史改名记录,取按 `start_date` 排序的最新一条;判断 `name` 前缀。
3. 兜底用 `stock_basic.name` 做名称确认。
**分支处理**:
| 当前状态 | 分析方向 | 是否继续 |
|---------|---------|---------|
| 正常股票 | 预测下一财年是否会被 ST/*ST | **是**(默认流程) |
| 已 ST(普通) | 改为预测:是否会进一步转 *ST 或退市;R1-R4 阈值需更严格(亏损链门槛降一年) | **是** |
| 已 *ST | 改为预测:是否会被强制退市;重点看 R1 营收 + R2 净资产 + E1 审计意见 | **是** |
| 已退市整理期 / 已摘牌 | 直接结束 | **否** |
## 第二步:板块阈值表(决定红线)
**先用 `ts_code` 前缀判断板块,再套用对应阈值。不要混用。**
| 板块 | 代码识别 | 营收红线 | 市值退市线 | 三年累计分红阈值 |
|------|---------|---------|-----------|----------------|
| 主板 | `60xxxx.SH` / `00xxxx.SZ`(除 30 / 688 开头外) | 净利润为负 且 营收 < 3 亿 | 市值 < 5 亿 | 累计 < 5000 万 且 < 年均净利润 30% |
| 创业板 | `30xxxx.SZ` | 净利润为负 且 营收 < 1 亿 | 市值 < 3 亿 | 累计 < 3000 万 且 < 年均净利润 30%(研发豁免:研发投入占营收 ≥ 5% 或近三年累计 ≥ 6000 万) |
| 科创板 | `688xxx.SH` | 净利润为负 且 营收 < 1 亿 | 市值 < 3 亿 | 累计 < 3000 万 且 < 年均净利润 30%(研发豁免:研发投入占营收 ≥ 5% 或近三年累计 ≥ 6000 万) |
## 第三步:预测时点选择
按"最新可得证据"原则确定基准时点,从下到上择优:
| 基准时点 | 数据接口 | 可信度基线 | 适用季节 |
|---------|---------|-----------|---------|
| **业绩预告 forecast** | `forecast` | **高** | 1 月底 / 7 月中旬 / 10 月底高发期 |
| **业绩快报 express** | `express` | **高** | 1-4 月年报前夕 |
| **三季报** | `income/balancesheet/cashflow` (`period=YYYYMMDD`,9 月末) | **中高** | 10 月底披露后到次年年报前 |
| **中报** | 同上,6 月末 period | **中** | 8 月底披露后到三季报前 |
| **去年年报** | 同上,12 月末 period | **低** | 仅作为基准对照 |
**证据优先级**(同一指标多个来源时,高的覆盖低的):
```
forecast / express > 三季报 > 中报 > 去年年报 > 经验外推
```
输出时**必须在每个预测项明示采用了哪一级证据**。如果存在 forecast 给出的全年净利润区间,**禁止再用三季报机械年化覆盖**。
## 第四步:四项可预测红线
### R1 营收 + 净利润红线
**目标**:预测全年营收、归母净利润和**扣非净利润**,按监管口径"扣非前后孰低者"判定。
**口径关键**:监管原文是 `min(n_income, profit_dedt) < 0` 且 `revenue < 板块阈值` —— **必须同时预测扣非净利润**,不能只用归母。仅看归母会漏掉"归母为正但扣非为负"的造壳公司。
**预测方法(按基准时点选用,至少一种)**:
- **forecast 直采法**:若 `forecast` 给出 `net_profit_min` / `net_profit_max`,直接取区间作为全年归母预测;扣非用过去两年扣非率(`profit_dedt / n_income` 中位数)折算;可信度=高。营收红线仍需结合最新报表外推。
- **express 直采法**:若 `express` 已披露,`revenue` / `n_income` 即为全年快报值;扣非同样按过去两年率折算(express 一般无扣非字段);可信度=高。
- **Q4 单季回补法**(三季报基准):
- `Q1Q3_revenue` = 三季报营业收入
- `Q4_revenue_est` = 过去两年 Q4 营收占全年比例的中位数 × 当前年化预估值
- `revenue_full_year_est = Q1Q3_revenue + Q4_revenue_est`
- `n_income` / `profit_dedt` 同法处理
- 可信度=中高
- **下半年情景外推法**(中报基准,强季节性公司必须用):
- 取过去两年 H2 营收占全年比例均值,给出悲观/基准/乐观三情景
- `revenue_full_year_est = H1_revenue / H1_share_avg`
- 可信度=中
- **同比延续法**(中报基准,弱季节性公司可用):
- `revenue_full_year_est = H1_revenue × (last_year_full_revenue / last_year_H1_revenue)`Professional finance research toolkit — backtesting (7 engines + benchmark comparison panel), factor analysis, Alpha Zoo (452 pre-built alphas across qlib158/alpha101/gtja191/academic), options pricing, 77 finance skills, 29 multi-agent swarm teams, Trade Journal analyzer, and Shadow Account (extract → backtest → render) across 7 data sources (tushare, yfinance, okx, akshare, mootdx, ccxt, futu).
ADR/H-share/A-share cross-listing premium analysis — track pricing gaps between US-listed ADRs, HK-listed H-shares, and A-shares for arbitrage signals, dual-listing valuation, and delisting risk assessment.
AKShare financial data aggregator (18k+ stars). Free, no API key. Covers A-shares, US, HK, futures, macro, forex. Primary fallback for tushare and yfinance.
Browse and bench the bundled alpha zoos — prebuilt cross-sectional factor libraries (Kakushadze 101, GTJA 191, Qlib 158, Fama-French / Carhart). Use when the user asks "which alphas exist", wants metadata on a named alpha, or wants to run IC/IR on a whole zoo over a universe.
Asset allocation theory and optimizer usage — MPT / Black-Litterman / risk budgeting / all-weather strategy, including guides for 4 optimizers and rebalancing rules.
Diagnose failed or underperforming backtests, locate the root cause, and fix the issue
Behavioral finance applications: theories of overreaction and underreaction, behavioral explanations for momentum and reversal, investor sentiment cycles, cognitive-bias checklists, and debiasing quantitative strategies.
Candlestick pattern recognition engine, pure pandas vectorized implementation of 15 classic candlestick patterns (5 single-candle + 5 double-candle + 4 triple-candle + 1 trend confirmation), generating a composite signal from bullish/bearish pattern scores.