熔岩AI MCP消息面热度对齐成交额:搭一张「量价 × 消息面」只读监测表
摘要
想知道一只股票「讨论变多」时成交是否也同步放大,做法是把熔岩日频面板 get_stock_heat_panel(/subscribe/v1/panel/daily)里的 mentions、agencies、weighted_heat 与你自有行情表里的成交额按「ts_code × 交易日」对齐,各自算相对自身历史的 z 分,再用四象限标签做监测。熔岩只提供消息面数据,不提供行情;成交额、成交量来自你方数据源。本文给出数据板块、对齐口径、Python 代码和读法,输出是描述性标签,不是交易信号。
一、用到哪些熔岩数据板块
| 数据板块 | 解释 | MCP 工具 | HTTP 路径 | 在本表中的作用 |
|---|---|---|---|---|
| 历史面板与覆盖度 | 按自然日聚合的提及、机构数、加权热度 | get_stock_heat_panel |
/subscribe/v1/panel/daily |
日频主表 |
| 历史面板与覆盖度 | 7/30 日去重机构/大V数 | get_agency_coverage |
/subscribe/v1/coverage/stocks |
判断讨论是否只来自少数主体 |
| 个股消息面 | 单股多时间窗 + 近 24 小时逐小时 | get_stock_heat_windows |
/subscribe/v1/heat/windows |
盘中复核 |
| 新闻点名 | 主流媒体快讯命中的 A 股 | get_news_stock_hits |
/subscribe/v1/news/hits |
区分「新闻驱动」与「社区自发」 |
行情侧需要的列:ts_code、交易日、成交额(下文记作 amount)、成交量(vol)。列名以你方数据源为准。
二、对齐口径:三件事先定下来
2.1 自然日 vs 交易日
/panel/daily 按自然日聚合,行情按交易日。周末和节假日的讨论有三种处理:丢弃、累加到下一个交易日、单独成列。量价对齐场景建议「累加到下一个交易日」,因为次一交易日的成交确实受休市期间信息影响;同时保留一列 closed_mentions 记录累加了多少。
2.2 时间截点
面板的日聚合区间与收盘 15:00 并不一致:收盘后的讨论会算进当天。如果你要严格比较「当日讨论」与「当日成交」,需要知道这个差异;需要 15:00 截断的 PIT 口径时,可用 get_weighted_hot_stocks(/hot/weighted)带 as_of_date,那里的消息只算到当天 15:00。
2.3 加权口径
面板里的 weighted_heat 用当前机构分加权,不是当日 PIT。做历史监测表时,把这一点写进列注释(score_basis=current)。
三、代码:拉取、对齐、标准化
import pandas as pd
heat = load_panel(universe, "2026-07-01", "2026-09-30") # 按 20 只一组调 /panel/daily,函数省略
px = load_quotes(universe, "2026-07-01", "2026-09-30") # 你方行情:ts_code, trade_date, amount, vol
cal = pd.DatetimeIndex(sorted(px["trade_date"].unique()))
# 自然日映射到「当天或之后的第一个交易日」
heat["trade_date"] = cal[cal.searchsorted(heat["date"])]
heat["closed"] = heat["date"] != heat["trade_date"]
agg = (heat.groupby(["ts_code", "trade_date"])
.agg(mentions=("mentions", "sum"), agencies=("agencies", "max"),
weighted_heat=("weighted_heat", "sum"),
closed_mentions=("mentions", lambda s: s[heat.loc[s.index, "closed"]].sum()))
.reset_index())
df = px.merge(agg, on=["ts_code", "trade_date"], how="left").fillna(
{"mentions": 0, "agencies": 0, "weighted_heat": 0, "closed_mentions": 0})
def z20(s):
m, sd = s.rolling(20).mean().shift(1), s.rolling(20).std().shift(1)
return (s - m) / sd
g = df.groupby("ts_code")
df["amt_z20"] = g["amount"].transform(z20)
df["ment_z20"] = g["mentions"].transform(z20)
注意:agencies 是当天去重主体数,多日合并时不能简单相加,这里取 max 只是近似,更准确的做法是用 /coverage/stocks 的滚动去重计数(cov_7d、cov_30d)。
四、四象限监测标签
| 标签 | 条件(示例阈值) | 描述 |
|---|---|---|
| 同步放大 | amt_z20 ≥ 2 且 ment_z20 ≥ 2 |
成交与讨论同时显著高于自身常态 |
| 讨论先行 | ment_z20 ≥ 2,amt_z20 < 1 |
讨论变多但成交平稳,记入复核清单 |
| 成交先行 | amt_z20 ≥ 2,ment_z20 < 1 |
成交放大但消息面未跟上,可查 /news/hits 是否有新闻点名 |
| 常态 | 其余 | 不标注 |
阈值 2 和 1 只是示例,应先看自己股票池里 z 分的分布再定。低基数股票(平时日均 mentions 很小)z 分容易被放大,建议加一个 mentions ≥ N 的下限过滤。
五、盘中复核怎么接
日表只能事后看。盘中如果某只股票出现在「讨论先行」名单里,可以:
- 调
get_stock_heat_windows看 1h / 4h / 24h 各窗的提及数、高分机构/大V数与逐小时走势(逐小时序列的具体结构以 OpenAPI 为准); - 调
get_news_stock_hits看最近 72 小时有没有主流媒体点名; - 调
get_stock_concept_heat(/concepts/by-stock)看讨论集中在哪个概念。
三步都是只读查询,输出写进复核记录即可。
FAQ
Q:熔岩能直接给成交额吗? A:不能。熔岩只提供消息面热度、机构/大V评分等数据,行情需自备。
Q:为什么不直接用 mentions 和 amount 的相关系数?
A:两者量纲与分布差异很大,且都有强个股效应。先各自对自身历史标准化,再比较,结论更稳。
Q:这个表能当信号用吗? A:本文只把它当监测与复核工具。是否有预测含义,需要你方用严格的样本外检验另行验证。
结论
「量价 × 消息面」对齐的难点不在算法,而在口径:自然日要映射到交易日,休市讨论要单独记录,weighted_heat 的当前分口径要写清,agencies 不能跨日相加。把这些处理好,再用 z 分和四象限标签做只读监测,就能稳定地发现「讨论与成交不同步」的样本,交给人工复核。
数据来自熔岩消息面热度监测,仅供研究参考,不构成投资建议。
只读监测与字段说明见:https://lava.ai-dolphin.com/subscribe/docs
Comments
Join the discussionNo comments yet. Be the first to comment.