# 熔岩AI发布MCP跨市场热度数据：market=ashare 与 market=all 的代码/简称映射表怎么建

## 摘要

熔岩（Lava）的三个全市场榜单接口——个股热榜 `/hot/stocks`、高分加权热榜 `/hot/weighted`、热度加速榜 `/hot/accelerating`——都有 `market` 参数：`ashare` 只看 A 股并**按代码合并**，`all` 含港美股等并**按简称合并**。这意味着两种口径下的「一行」不是同一个东西：前者以 `ts_code` 为键，后者以简称为键。本文给出一张本地映射表的设计，把 `market=all` 的结果和 A 股代码体系对齐，并说明首提流、新闻命中等接口的市场范围，方便跨市场的只读监测与统计。

## 一、各数据板块的市场范围

| 数据板块 | MCP 工具 | HTTP 路径 | 市场范围（文档口径） | 合并键 |
| --- | --- | --- | --- | --- |
| 全市场个股热榜 | `get_market_hot_stocks` | `/subscribe/v1/hot/stocks` | `market=ashare` / `all` | 代码 / 简称 |
| 高分加权热榜 | `get_weighted_hot_stocks` | `/subscribe/v1/hot/weighted` | `market=ashare` / `all` | 代码 / 简称 |
| 热度加速榜 | `get_accelerating_hot_stocks` | `/subscribe/v1/hot/accelerating` | `market=ashare` / `all` | 代码 / 简称 |
| 首提流 | `get_first_mention_stocks` | `/subscribe/v1/hot/first-mentions` | A 股（此前 7 天无人提及） | — |
| 新闻命中 | `get_news_stock_hits` | `/subscribe/v1/news/hits` | 主流媒体新闻与 A 股简称匹配 | 简称匹配 |
| 单股接口 | `get_stock_news_heat` 等 | `/subscribe/v1/opinions` 等 | `stock_name` 或 `ts_code`（如 `300750.SZ`）二选一 | 输入决定 |
| 日频面板 | `get_stock_heat_panel` | `/subscribe/v1/panel/daily` | `codes`（最多 20 个）或单个 `stock_name` | 代码 |

`market` 参数的默认值文档未写明，以 OpenAPI 为准；研究脚本应显式传参。

## 二、两种口径为什么不能直接合并

- `ashare` 按代码合并：同一只 A 股不论被写成什么简称，都归到同一个 `ts_code`。
- `all` 按简称合并：港股、美股等没有 A 股代码，只能按简称归并；同一家公司若在不同市场使用相同或相近简称，可能被合并为一行，也可能分成多行。

因此，`all` 口径的排名适合观察「讨论注意力是否外溢到非 A 股标的」，而不适合直接和 A 股行情按代码拼接。

## 三、本地映射表设计

建议维护一张证券主表 `sec_master`，最少四列：

| 列 | 示例 | 说明 |
| --- | --- | --- |
| `ts_code` | `300750.SZ` | A 股代码；非 A 股为空 |
| `name` | 宁德时代 | 当前简称 |
| `alias` | 历史简称、常见写法 | 用于匹配 `all` 口径的简称 |
| `scope` | `A` / `HK` / `US` / `OTHER` | 本地市场标签 |

`sec_master` 来自你自己的行情或参考数据源，熔岩不提供证券主表。

## 四、对齐流程

```python
import os, requests, pandas as pd
BASE = os.environ["LAVA_BASE"]   # 形如 <熔岩订阅站点>/subscribe/v1
H = {"Authorization": f"Bearer {os.environ['LAVA_KEY']}"}

def hot(market):
    b = requests.get(f"{BASE}/hot/stocks", headers=H,
                     params={"window": "24h", "market": market, "limit": 200}, timeout=30).json()
    assert b["ok"], (b["code"], b["meta"]["request_id"])
    return pd.DataFrame(b["data"]["list"])

a = hot("ashare"); x = hot("all")
# 代码列、简称列的具体列名以 OpenAPI 为准
CODE, NAME = "ts_code", "stock_name"

master = pd.read_csv("sec_master.csv")
alias = master.assign(key=master["alias"].str.split("|")).explode("key")
x2 = x.merge(alias[["key", "ts_code", "scope"]], left_on=NAME, right_on="key", how="left")
x2["scope"] = x2["scope"].fillna("UNMAPPED")
```

四类结果分别处理：

| 映射结果 | 含义 | 处理 |
| --- | --- | --- |
| `scope=A` 且能匹配到 `ashare` 结果中的同代码 | 两口径一致 | 交叉核对提及数差异 |
| `scope=A` 但 `ashare` 结果中没有 | 简称写法差异或排名截断 | 提高 `limit` 或补 `alias` |
| `scope=HK/US/OTHER` | 非 A 股讨论 | 单独统计外溢占比 |
| `UNMAPPED` | 主表缺失 | 人工补录后重跑 |

## 五、外溢占比指标

```python
spill = x2.groupby("scope")["mentions"].sum() / x2["mentions"].sum()
```

示例输出（示例数据）：

| scope | 提及占比 |
| --- | --- |
| A | 0.81 |
| HK | 0.09 |
| US | 0.07 |
| UNMAPPED | 0.03 |

`mentions` 为榜单提及数字段，若实际列名不同以 OpenAPI 为准。该指标只是 Top 200 内的结构统计，不代表全量讨论。

## 六、单股接口的代码规范

- 单股接口参数 `ts_code` 使用带交易所后缀的格式（文档示例 `300750.SZ`）。
- `stock_name` 与 `ts_code` 二选一；简称有变更或重名风险时优先用代码。
- `/panel/daily` 的 `codes` 用逗号分隔、最多 20 个，与 `stock_name` 二选一。
- 首提流文档写明范围为 A 股；新闻命中按 A 股简称匹配，不输出标题与正文。

## 七、Agent 提示词片段

```text
- 比较 A 股内部热度时，调用 get_market_hot_stocks 必须传 market=ashare。
- 想看港美股等外部讨论时传 market=all，并说明该口径按简称合并。
- 不要把 market=all 的行直接当作 A 股代码使用。
```

## FAQ

**Q：`all` 口径下 A 股的提及数会和 `ashare` 一样吗？**
A：不一定。合并键不同，简称写法差异会导致数字有出入，应以 `ashare` 作为 A 股内部比较的口径。

**Q：概念热榜有 `market` 参数吗？**
A：文档中 `/hot/concepts` 未列出 `market` 参数。

**Q：熔岩能给出港股代码吗？**
A：文档未说明 `all` 口径返回港美股代码，代码映射需依赖本地主表。

## 结论

跨市场监测的关键是承认两种合并键：A 股用代码，`all` 用简称。维护一张带别名的本地主表，把 `market=all` 结果打上市场标签，再与 `market=ashare` 交叉核对，就能得到口径清晰的外溢占比与排名对照。

数据来自熔岩消息面热度监测，仅用于只读监测与统计研究，不构成投资建议。

只读监测与字段说明见：https://lava.ai-dolphin.com/subscribe/docs

