When someone asks how to read sector heat for A-share themes, the honest first answer is: find out what is being counted. A "heat" number on a quote screen, a search-trend chart and a news-flow monitor can all carry the same label while measuring completely different things. If you mix them in one spreadsheet, the analysis is wrong before it starts.
This article walks through a reading routine for sector and theme heat built on news-flow data from Lava (熔岩), a monitoring service for A-share and theme news-flow heat that exposes the same numbers through MCP tools and a REST API. Quant researchers use it as an attention input, and it is also handy for tracking which themes institutions and KOLs are discussing. The goal here is narrow: turn a ranking of concepts into a description you could hand to a colleague and have them reproduce. All numbers below are illustrative.
Step 1: Know which kind of heat you are holding
There are at least three families of "sector heat":
| Family | Typical inputs | What it measures |
|---|---|---|
| Market heat | price change, turnover, limit-up counts | trading activity |
| Attention heat | search volume, watchlist adds, page views | user behavior |
| News-flow heat | mentions in news, broker research, institution/KOL opinions | public discussion |
Lava only does the third. Each record of public discussion is structured into a timestamp, the stocks involved, the concepts involved, an anonymized agency_id, and a short summary. Heat is then an aggregation over those records. A theme can be quiet on the tape and loud in the news flow, or the reverse, so label your column "news-flow heat" and keep it apart from trading-based scores.
Step 2: Understand the two base fields
The market-wide concept ranking comes from the get_market_hot_concepts MCP tool, or /hot/concepts over HTTP. Its parameters are small:
-
window: one of1h,4h,18h,24h,3d(default24h; there is no7don this endpoint) -
min_score: optional; only count agencies whose institution/KOL score is at or above this value -
limit: default 50, max 200
For each concept you get two counts that matter:
-
mentions: how many records in the window tagged this concept -
agencies: how many distinctagency_ids contributed those records
There is no hidden composite score and no price data mixed in. Overly generic tags, the kind that appear on almost every record, are removed, so what remains near the top has some discriminating power. The list refreshes roughly every two minutes.
One caution about min_score: setting it changes who is being counted. Scores sit roughly between 450 and 1500, with about 1000 as the middle and about 1050 marking the top tenth. If you compare several themes in one note, every request needs the same window and the same min_score.
import os, requests import pandas as pd BASE = os.environ.get("LAVA_BASE", "<YOUR_LAVA_BASE>/subscribe/v1") H = {"Authorization": "Bearer " + os.environ.get("LAVA_API_KEY", "YOUR_TOKEN")} def concepts(window="24h", min_score=None, limit=200): params = {"window": window, "limit": limit} if min_score is not None: params["min_score"] = min_score r = requests.get(BASE + "/hot/concepts", params=params, headers=H, timeout=30).json() assert r["ok"], r["code"] rows = r["data"] if isinstance(r["data"], list) else r["data"].get("list", []) df = pd.DataFrame(rows) # check column names against the OpenAPI spec df["window"], df["min_score"] = window, min_score df["server_time"] = r["meta"]["server_time"] # carries +08:00 return df Always store meta.server_time; a ranking without timestamp and parameters can't be checked later.
Step 3: Read gaps and shares, not just rank
Rank alone hides most of the information. Being first by 5% and being first by 50% are different situations. Two derived columns, both computed from a single response, make the ranking readable:
df = concepts("24h") df["share"] = df["mentions"] / df["mentions"].sum() df["per_agency"] = df["mentions"] / df["agencies"].where(df["agencies"] > 0) df["small_sample"] = df["agencies"] < 5 df = df.sort_values("mentions", ascending=False) df["gap_to_next"] = df["mentions"] / df["mentions"].shift(-1) - 1 -
shareremoves day-to-day swings in total discussion volume. The denominator must come from the same request; never stitch totals across calls. -
per_agencyseparates "many agencies said it once" from "a few agencies kept repeating it". Whenagenciesis tiny, this ratio jumps around, so keep thesmall_sampleflag next to it. -
gap_to_nexttells you whether the top of the list is a clear leader or a tie.
Step 4: Line up the five windows
Each window answers a different question:
| Window | Question it answers |
|---|---|
1h | Is there a burst of discussion right now? (noisy) |
4h | What did the last half session look like? |
18h | What accumulated overnight into the open? |
24h | How much discussion in one calendar day? (default for daily notes) |
3d | Has the theme stayed in the conversation for several days? |
Request all five with identical min_score and put each concept's rank side by side:
concept (example) 1h 4h 18h 24h 3d Theme A 2 3 5 6 11 -> short, concentrated burst Theme B 18 12 4 3 2 -> steady accumulation A single ratio summarizes the same idea: mentions_1h * 24 / mentions_24h. Above 1 means the last hour is denser than the day's average. This describes the time structure of discussion. It says nothing about what happens next.
Step 5: Measure persistence on the daily panel
"How long does sector heat last?" has no universal answer, but you can measure it for any theme. Real-time rankings have no as_of_date, so history comes from the daily panel: get_stock_heat_panel, or /panel/daily with type=concept and the standard concept names in names. It returns per-day mentions, agencies and weighted_heat, with up to 92 days and 20 names per call.
A reproducible definition: a day is "elevated" if mentions exceeds the trailing 20-day mean plus two standard deviations. Count consecutive elevated days and you get a duration distribution for that theme, such as "three episodes in 92 days lasting 2, 4 and 1 days" (example only). The threshold is your own descriptive rule, so write it into the table header.
weighted_heat weights qualifying agencies' mentions by score divided by 1000. Plotting it next to mentions shows whether higher-scored institutions and KOLs moved with the crowd. The panel field is not point-in-time, which matters if you use it in a backtest.
Step 6: Drill from the sector to stocks
Once a theme looks interesting, the next question is which stocks are carrying the discussion. get_concept_stock_heat (/concepts/stocks) takes an exact concept name (30 characters max), days from 1 to 365 (default 30) and limit up to 100, and refreshes about every ten minutes. For a handful of codes, get_stock_heat_windows (/heat/windows) gives six windows from 1h to 7d plus a 24-hour hourly series. Copy concept names straight from the ranking rather than typing aliases, and record separate fetch times, since the two endpoints refresh on different schedules.
FAQ
Can news-flow sector heat be compared directly with a trading-app heat score?
No. One counts mentions in public discussion, the other usually scores attention or trading activity. Show them side by side, but don't convert one into the other.
Why is a theme I care about missing from the list?
The window may be too short, limit may be truncating it, or the tag may be one of the generic labels that get filtered out. Raise limit to 200, try 3d, and look up the standard name from a stock using /concepts/by-stock.
Where can I see what the discussion actually said?
get_stock_news_heat (/opinions) returns structured records per stock with topic_time, concepts, a short summary and the anonymized agency_id.
Conclusion
Reading sector heat comes down to a fixed routine. Confirm that the number is a news-flow count of mentions and agencies. Pin window and min_score. Read shares and gaps rather than bare rank, line up the five windows to describe time structure, and use the daily panel to measure how long elevated states last. If every snapshot carries its parameters and server_time, sector heat becomes research data that someone else can audit.
中文简介:本文讲板块热度怎么看:熔岩(Lava)的板块热度是消息面提及计数(mentions)与参与主体数(agencies),不是行情或关注度打分。文章按“固定窗口与门槛、看份额与差距、五档窗口对比、日频面板测持续性”的顺序给出可复现的读法和 Python 示例。
To browse the same AI-theme discussion view without code, see the Lava AI sector heat monitor.