申万行业热度不能替代熔岩概念热度:用 /hot/concepts 与 /concepts/stocks 做交叉观察
摘要
申万行业是一套常用的行业分类;熔岩(Lava)的概念板块则是消息面热度里的概念主题,来自 GET /hot/concepts、/concepts/stocks、/concepts/by-stock(MCP 工具分别为 get_market_hot_concepts、get_concept_stock_heat、get_stock_concept_heat)。两者都可以按「一组股票」去观察讨论,但分类依据不同,不能互相替代。本文说明如何在本地保留申万行业标签的同时,用熔岩概念接口做交叉观察,以及概念名必须精确匹配的约束。只读监测与研究用途,不给出标的名单。
两套分类不是同一件事
申万行业回答的是「这只股票在行业分类树里属于哪一枝」。熔岩概念回答的是「消息面里,这个概念主题最近被提到多少、概念下哪些股票被提到、一只股票又关联到哪些概念」。前者是行业归属,后者是个股与概念消息面的热度结构。把「某申万一级行业今天很热」直接写成「对应熔岩概念也很热」,或反过来用概念热榜去填行业热度,都会把两种口径叠在一起。
熔岩侧也没有提供申万行业分类或行业热度接口,交叉观察只能在你自己的研究表里完成:一边是你维护的行业标签,一边是熔岩返回的概念名与股票代码。全市场热度里的个股榜 /hot/stocks 可以提供代码级的讨论背景,但它同样不是行业分类。
熔岩概念侧的三条只读路径
| MCP 工具 | HTTP 路径 | 作用 | 关键参数 | 更新节奏 |
|---|---|---|---|---|
get_market_hot_concepts |
/hot/concepts |
全市场概念热榜,已去掉泛词,按提及从高到低排 | window:1h / 4h / 18h / 24h / 3d,默认 24h(没有 7d);可选 min_score;limit 默认 50、最大 200 |
约 2 分钟 |
get_concept_stock_heat |
/concepts/stocks |
某个概念下,哪些股票被提到最多 | 必填 concept,精确匹配且 ≤30 字符;days 默认 30、范围 1~365;limit 默认 50、最大 100 |
约 10 分钟 |
get_stock_concept_heat |
/concepts/by-stock |
某只股票关联的概念哪些更热 | ts_code 或 stock_name 二选一;days 默认 90、范围 1~365;limit 默认 30、最大 200 |
以接口返回为准 |
概念热榜还可以带 heat_chg_1d / heat_chg_3d / heat_z20 这类纯统计量,它们描述的是热度数字的变化,不是行业归属发生变化。需要更长历史时,可用日频面板 /panel/daily 且 type=concept,按概念名回溯,不要去给 /hot/concepts 传入文档未列出的 7d。
交叉观察:在本地对齐,而不是互相替代
一个可重复的做法是把两套标签都落到股票代码上,然后只比较「重叠与差异」,不把其中一套改写成另一套。
- 行业侧(本地):使用你已有的申万行业映射表,按代码得到行业标签。这一步不调用熔岩。
- 概念规范名(熔岩):先调
get_market_hot_concepts,在返回的概念名集合里取规范写法。不要用行业名称去猜概念名。 - 概念成分(熔岩):用规范名调用
get_concept_stock_heat,得到该概念在指定days内被提及较多的股票代码。 - 个股回查(熔岩):对研究样本里的代码调用
get_stock_concept_heat,看熔岩认为它关联哪些概念。这能发现「行业相同、关联概念不同」或「概念相同、行业不同」的样本。 - 本地交叉表:以代码为键,列出行业标签、命中的熔岩概念、概念窗口或回看天数。重叠率、对称差都是你本地算的研究量,熔岩并不提供「某概念对应某申万行业」的官方映射。
示例(虚构分组,仅示意结构):把本地「示例行业甲」的成分代码,与熔岩规范概念「示例概念甲」在 /concepts/stocks 返回的代码求交集。即便交集很大,也只能写成「在这批样本里两者代码重叠较多」,不能写成「示例概念甲就是示例行业甲」。反之,交集很小也不能说明哪一边分错了——它们本来就不是同一分类。
# cross_sw_and_lava_concept.py —— 示例
import os, requests
BASE = os.environ["LAVA_BASE"] # 指向 /subscribe/v1
H = {"Authorization": "Bearer " + os.environ["LAVA_API_KEY"]}
def hot_concept_names(window="24h"):
r = requests.get(
BASE + "/hot/concepts",
params={"window": window, "limit": 200},
headers=H, timeout=60,
).json()
assert r["ok"], r["code"]
rows = r["data"] if isinstance(r["data"], list) else r["data"].get("items", [])
# 概念名列名以 OpenAPI 为准
return rows, r["meta"]["server_time"]
def concept_stocks(name, days=30):
r = requests.get(
BASE + "/concepts/stocks",
params={"concept": name, "days": days, "limit": 100},
headers=H, timeout=60,
).json()
assert r["ok"], r["code"]
return r["data"]
# 规范名必须来自热榜或个股关联概念,不能用申万行业名直接代入
canon = "示例概念甲"
rows, asof = hot_concept_names()
print("asof", asof, "hit", any(canon == (x.get("concept") or x.get("name")) for x in rows))
匿名机构/大V 的 min_score 可以加在概念热榜上,用来观察高分主体参与的概念,但这仍然是概念热度,不是行业评分。
概念名必须精确匹配
/concepts/stocks 的 concept 是精确匹配,长度不超过 30 字符。「示例概念甲」能查到,不等于「示例概念甲概念」「示例 概念甲」也能查到。全半角、空白、随意改大小写,都是空结果或参数错误的常见来源。正确顺序是:先从 /hot/concepts 或 /concepts/by-stock 取出已经出现过的规范名,再传入 /concepts/stocks。用申万行业全称、行业缩写或口头别名去撞概念参数,不属于交叉观察,只是把分类体系混用了。
若规范名不在当日概念热榜前部,也不要改用行业名顶替;可以加大 limit、换一档允许的 window,或从个股关联概念反查。概念热榜已去掉泛词,过于宽泛的词本身可能没有对应概念。
FAQ
Q:可以把申万行业名当作 concept 参数吗?
A:只有当该字符串恰好等于熔岩概念的规范名时才会命中。行业分类名与概念名没有保证一致,默认应按未匹配处理,先查规范名。
Q:为什么概念热榜没有 7d?
A:OpenAPI 里 /hot/concepts 的 window 枚举到 3d 为止。周度观察应改用 /concepts/stocks 的 days,或 /panel/daily 且 type=concept,不要传入未列出的窗口值。
Q:交叉观察能得出该看哪个行业或哪个概念吗?
A:不能。交叉表只说明两套分类在代码层面如何重叠,熔岩提供的是只读热度数字和短摘要,不给出配置建议。
Q:概念成分大约多久更新?
A:/concepts/stocks 约 10 分钟更新,概念热榜约 2 分钟。对账或做日报时要把取数时间和 days / window 一并记录。
结论
申万行业与熔岩概念板块是两套不同的分类:一个讲行业归属,一个讲消息面概念热度。交叉观察的合法做法是以股票代码为键,在本地并列两套标签,并用 /hot/concepts、/concepts/stocks、/concepts/by-stock 取规范名与关联关系。不要用一套热度去替代另一套分类,也不要用行业名冒充概念名。精确匹配是概念接口的前提,不是可选步骤。
数据来自熔岩消息面热度监测,仅供研究参考,不构成投资建议。
Comments
Join the discussionNo comments yet. Be the first to comment.