# ⚠️ moneyflow_hsgt.north_money 语义突变 — 北向资金流数据已静默失效 (verified 2026-08-17)

## 现象

任何用 `np.diff(north_money)` 计算"北向日净流入"的代码，在 **2024-08-19 之后产出的全是假信号**——数字照常、红绿柱照常画，但含义已完全改变。

## 根因

2024-08-19 起沪深交易所停止披露北向资金日度净买入额。tushare `moneyflow_hsgt` 的 `north_money` 字段随之从"日净买入额"变成了"累计成交额"，接口**不报错、不断供、字段名不变**。

## 实测证据（tushare pro, 2026-08-17 验证）

| 区间 | 行数 | north_money 范围(万) | 均值 | 日diff标准差 |
|---|---|---|---|---|
| 2024-07（变更前） | 22 | -8880 ~ 19580 | -802 | 8580 |
| 2024-09（变更后） | 17 | 77584 ~ 356932 | 129687 | 49359 |
| 2026-08-17 当日 | — | 299670（累计值） | — | — |

变更前：均值≈0 的流量型序列（日净买入）。变更后：单调累积的大额存量序列（累计成交额）。一眼可辨。

## 快速自检 recipe

```python
import pandas as pd, tushare as ts
pro = ts.pro_api()
df = pro.moneyflow_hsgt(start_date='20240701', end_date='20240930').sort_values('trade_date')
v = pd.to_numeric(df['north_money'], errors='coerce')
# 均值≈0 且范围±几万 = 变更前流量口径；均值巨大且单调累积 = 变更后累计口径
print(v.min(), v.max(), v.mean())
```

凡任何脚本对 north_money 做 diff 当作"净流入"——先跑此自检确认数据落在哪个 regime。

## 已受影响的代码（已处置 2026-08-17）

`market_charts.py` `plot_funding_chart()`（晚8点 Daily HS300 任务的 funding 图）：
`north_flow = np.diff(north_raw)/10000`，标题仍写"北向资金(聪明钱)净流入"、逻辑框仍写"背离:北向流出+两融上升=警惕"——**这些判断在 2024-08-19 后全部失真**。

**处置**：用户决定**整张 funding 图废弃**（不是修复北向部分），由新的 `plot_leverage_chart()` 杠杆资金情绪图替代（融资余额存量 + 融资买入占比增量，数据源 `pro.margin` 的 rzmre/rzye，不受披露规则影响）。plot_all_charts() 中该函数调用已移除（留废弃注释），cron prompt 的 MEDIA 清单同步更新。plot_funding_chart() 函数体仍留在代码里但无人调用。

## 通用教训

监管/交易所披露规则变更会让数据接口的字段**静默改变含义**。凡是把某个字段当"流量"(diff)使用的历史代码，值得抽查该字段在规则变更前后的分布形态（均值/范围/单调性）——字段名和接口存活都不是语义不变的保证。
