ETF Premium Rate Analysis Skill (v4)
Decision-tree driven. Anomaly-first. Built-in calculator.
Core Principle
Don't run every module every time. Follow the signal.
1. Grab data → 2. Check for anomalies → 3. Go deep only if needed
Data Strategy
Tier & Quality
| Method | Quality Grade | When to use |
|---|---|---|
| Browser (Playwright) to 雪球/集思录 | A — 实时 | Premium > 8% OR single-day move > 3pp OR scan mode |
| WebSearch with specific queries | B — 可靠 (±0.3pp) | Default for all analyses |
| WebSearch inferred/related data | C — 估算 (±1pp) | When B not available |
| Stale or purely estimated | D — 参考 (±2pp+) | Last resort |
Every output must declare its quality grade on the first line.
Browser Trigger Rules (automatic)
Use browser (mcp__playwright__browser_*) when:
→ Current premium > 8% AND last reliable data > 1 hour old
→ Single-day premium change > 3pp suspected (verify before alarming)
→ User requests --buy (need precise real-time price)
Browser strategy (tested in practice):
⚠️ Direct URL navigation to 雪球/集思录 often fails (404 or login walls).
INSTEAD: use WebSearch FIRST to find a working page URL, THEN navigate.
Approach that worked:
1. WebSearch: "{code} 溢价率 IOPV 净值 site:xueqiu.com" → find the correct page URL
2. Browser: navigate to the URL from search results
3. Snapshot → extract data → close browser
Approach that partially worked:
1. Browser: navigate to https://www.jisilu.cn/data/etf/ → see column headers
2. But detailed data rows are JS-dynamic, snapshot may not capture them
3. Fallback: WebSearch with snippet extraction is more reliable for numbers
Bottom line: Browser is a BEST-EFFORT enhancement, not a dependency.
WebSearch (Tier 1) is the only guaranteed data source.
WebSearch Query Patterns
Single ETF: "{code} {name} 最新净值 市价 溢价率 {YYYY}年"
History: "{code} 溢价率 历史 走势 {YYYY}"
Peers: "{category} ETF {code1} {code2} {code3} 溢价率 对比"
Quota: "{code} 暂停申购 QDII额度"
Catalyst: "QDII额度 外管局 {YYYY}年" / "跨境ETF 溢价风险 停牌"
Data Freshness (same-session reuse)
| Data | Reuse? | Rule |
|---|---|---|
| Real-time price/NAV | No | Always refetch |
| Historical premium stats (mean, std, range) | Yes | Same session, same ETF |
| Peer category median | Yes | Within 30 min |
| Creation/redemption status | Yes | Same session |
| ETF personality traits (Appendix B) | Static | Built into this skill |
Session Memory
If the same ETF or category was analyzed earlier in this session:
→ Reference prior findings: "30分钟前的 scan 显示..."
→ Highlight what CHANGED since last analysis
→ Don't re-derive what's already known
Decision Tree (Main Workflow)
┌─ Step 0: Market Status Check (always first) ──────────────────┐
│ WebSearch: "{code} 实时行情" or quick check │
│ → Determine: 盘中(live) / 盘后(use last close) / 休市 │
│ → Label all outputs accordingly │
│ → 盘中用 IOPV(参考净值) / 盘后用最新NAV(单位净值) │
└───────────────────────────────────────────────────────────────┘
│
▼
┌─ Step 1: Quick Data Grab (always, parallel) ──────────────────┐
│ WebSearch: price + NAV for target ETF │
│ WebSearch: price + NAV for 2-3 category peers │
│ WebSearch: quota/creation status │
│ [+ browser search-then-navigate if --buy flag] │
└───────────────────────────────────────────────────────────────┘
│
▼
┌─ Step 2: Triage ──────────────────────────────────────────────┐
│ │
│ Calculate: premium%, peer_median%, deviation_from_peer │
│ │
│ ┌─ premium < 2% AND |deviation| < 1pp? │
│ │ → "正常范围" — output TLDR, STOP (no deep needed) │
│ │ │
│ ├─ deviation from peer > 3pp? │
│ │ → 🔴 ANOMALY: investigate why THIS ETF differs │
│ │ │
│ ├─ premium > 8%? │
│ │ → 🔴 ANOMALY: run passive-inflation check │
│ │ │
│ ├─ single-day premium change > 3pp? │
│ │ → 🔴 ANOMALY: run catalyst scan │
│ │ │
│ └─ none of the above? │
│ → "溢价偏高但在正常范围" — quick output, STOP │
│ │
└───────────────────────────────────────────────────────────────┘
│
▼
┌─ Step 3: Anomaly Deep-Dive (only if triggered) ───────────────┐
│ │
│ If deviation from peer: → Check creation status, fund │
│ size, liquidity differences │
│ │
│ If premium > 8%: → Passive-inflation check │
│ Compare: NAV Δ% vs Price Δ% │
│ over last 5/10/20 days │
│ │
│ If rapid change: → Catalyst scan (quota news, │
│ regulatory actions, index moves) │
│ │
└───────────────────────────────────────────────────────────────┘
│
▼
┌─ Step 4: Calculator (if --buy N flag) ────────────────────────┐
│ See Calculator Mode section below │
└───────────────────────────────────────────────────────────────┘
Detection Rules
Rule 1: Passive Premium Inflation (被动溢价膨胀)
The most dangerous and most commonly missed pattern.
Fetch: NAV change% and Price change% over last 5, 10, and 20 trading days.
IF |NAV decline| > 3% over period
AND |Price decline| < |NAV decline| (price falling slower)
AND premium increased > 1pp over same period
THEN:
→ Label: "被动溢价膨胀"
→ Interpretation: 溢价不是被人买上去的,是被 NAV 下跌垫高的
→ Risk: 市价滞后于 NAV,一旦补跌 → 溢价压缩 + 继续亏钱 = 双杀
→ Action: 在输出中显眼位置警告,这是最危险的溢价形态
IF |NAV increase| > 3%
AND |Price increase| > |NAV increase| (price rising faster)
AND premium increased > 1pp
THEN:
→ Label: "主动溢价扩张"
→ Interpretation: 资金在主动追高,溢价有动能支撑
→ Risk: 情绪驱动的溢价在情绪反转时会快速崩塌
Rule 2: Peer Divergence
IF |premium(T) - peer_median| > 3pp:
→ Investigate: 申购状态差异? 流动性差异? 规模差异?
→ Output: "这只 ETF 比同类多/少了 Xpp,原因可能是..."
Rule 3: Regime Assessment (Simplified)
Gone is the 7-regime classification requiring 250d data. Instead:
Using whatever historical data is available (annual stats, recent trend):
Q1: Is premium currently near its recent (60d) range high or low?
→ "处于近期偏{高/低}位置"
Q2: Has premium been trending up, down, or sideways over the past month?
→ "近一个月{上行/下行/横盘}"
Q3: Is volatility elevated or subdued vs typical?
→ "波动率偏{高/低}"
Combine into a one-line assessment:
"溢价 9.9%,处近期偏高水平,近一月横盘但月末加速上行,波动率正常"
This replaces the old 7-regime classification with a continuous, data-driven description that works with partial data.
Rule 4: Cost of Switching
Always compute when analyzing a single ETF with peers. One-line output only:
savings = (premium_T - min_peer_premium) / (1 + premium_T/100) × amount
→ "选 {min_code} ({min_prem}%) 可省 ¥{savings} ({savings_pct}%本金)"
No need to expand into full table unless user asks. Just the number.
Calculator Mode (--buy)
Trigger: /etf-premium <code> --buy <amount> or user mentions specific investment amount.
Output Tiers
Calculator output ADAPTS to what's triggered:
TIER 1 — Normal (no anomaly triggered):
→ Shares + actual cost + entry fee + convergence table + cost-of-switching
→ MAX 15 lines. No passive-inflation check, no catalyst scan.
→ End with one-liner summary.
TIER 2 — Anomaly (passive inflation OR peer divergence triggered):
→ Tier 1 content
→ + compact anomaly alert block (3-5 lines, not full deep-dive)
→ + "→ 建议 /etf-premium --deep {code} 了解催化剂详情"
TIER 3 — Full (user explicitly added --deep):
→ Tier 1 + Tier 2 + full catalyst scan + quality assessment
Calculation (for A-Share ETFs, see Appendix D for rules)
买入金额: ¥{amount}
当前市价: ¥{price}
参考净值: ¥{nav} (盘中=IOPV/盘后=最新NAV,见术语说明)
当前溢价率: {prem}%
实得份额: {shares} 份 = floor(amount / price / 100) × 100 (A股ETF100份/手)
实际花费: ¥{actual_cost} = shares × price
剩余现金: ¥{remainder} = amount - actual_cost (不足1手,留在账户)
底层资产价值: ¥{nav_value} = shares × nav
"进门费": ¥{premium_cost} = actual_cost - nav_value
→ 多付 {premium_cost} 元,买到价值 {nav_value} 元的资产
→ 占比: {premium_cost / actual_cost * 100}% 的本金
Convergence Scenarios
假设底层资产不涨不跌,仅溢价率变化:
(注: 溢价率 = 市价/参考净值 - 1,参考净值在盘中为IOPV、盘后为最新NAV)
┌──────────────────────┬─────────────┬──────────────┬──────────────┐
│ 情景 │ 溢价率 │ 你的份额市值 │ 盈亏 │
├──────────────────────┼─────────────┼──────────────┼──────────────┤
│ 当前 │ {prem}% │ ¥{actual_cost}│ — │
│ 回归 20 日均线 │ {mean}% │ ¥{v_mean} │ {gain_loss} │
│ 回归同类中位数 │ {peer_med}% │ ¥{v_peer} │ {gain_loss} │
│ 回归历史均值 │ {hist_avg}% │ ¥{v_hist} │ {gain_loss} │
│ 溢价归零 │ 0% │ ¥{v_zero} │ {gain_loss} │
│ 触及近期高点上轨 │ {upper}% │ ¥{v_upper} │ {gain_loss} │
└──────────────────────┴─────────────┴──────────────┴──────────────┘
盈亏平衡点:
如果溢价回归 20 日均线,底层资产需涨 {breakeven}% 你才不亏。
纳指一个月涨 {breakeven}% 的历史概率约为 {prob}%。
Compact Output (Tier 1 — normal)
## 买入计算: {name} ({code})
投入 ¥{amount} | 市价 ¥{price} | {nav_label} ¥{nav} | 溢价 {prem}% | {grade}
实得: {shares} 份 ({lots} 手) | 花费: ¥{actual_cost} | 剩余: ¥{remainder}
底层价值: ¥{nav_value} | 进门费: ¥{premium_cost} ({fee_pct}%本金)
回归情景 (底层不动):
20日均线({mean}%): -¥{loss_mean} | 同类中位数({peer}%): -¥{loss_peer}
年度均值({hist}%): -¥{loss_hist} | 归零(0%): -¥{loss_zero}
→ 选 {min_code} ({min}%) 可省 ¥{savings} | 需纳指涨 {be}% 回本 (概率~{prob}%)
Expanded Output (Tier 2 — anomaly triggered)
Append after compact output:
⚠️ {anomaly_label}: {one-line_explanation}
{anomaly_detail}
→ 建议 /etf-premium --deep {code} 了解催化剂
Output Templates (Minimal)
TLDR Mode (--tldr)
{code} {name}: 溢价 {prem}% [{grade}] [{market}] | 偏离同类{+/-}pp | {anomaly_flag}
→ {actionable_one-liner}
例 (盘中):
513100 纳指ETF: 溢价 9.5% [B] [盘中] | +1.7pp | ⚠️被动膨胀 | 今日停牌
→ 停牌是监管升级信号,等冲击消化后再判断
例 (盘后):
159941 纳指ETF: 溢价 9.9% [B] [盘后] | +2.1pp | — | 基于7/30收盘
→ 同类最低 159632 (6.5%),换一只每¥10,000省¥300
Quick Mode (default)
## {name} ({code})
{timestamp} | {market_status} | 数据质量: {grade} | 同类均值: {peer_med}%
### 核心数字
| 指标 | 数值 |
|------|------|
| 市价 / {nav_label} | ¥{price} / ¥{nav} |
| **溢价率** | **{prem}%** ({position}于近期区间) |
| 同类排名 | 第 {rank}/{n} |
| 溢价质量 | {quality_label} |
### 检测结果
{only show triggered rules, skip clean ones}
### 盈亏快照
回归中枢: -¥{loss} | 触及上轨: +¥{gain}
→ 选 {min_code} ({min}%) 可省 ¥{savings}
{If anomalies: "→ 建议 /etf-premium --deep {code}"}
Deep Mode (--deep)
Only when anomalies are triggered or user explicitly requests:
## {name} ({code}) — 深度分析
{grade} | {timestamp} | {market_status}
### 1. 异常检测
{all triggered rules with detailed explanation}
### 2. 溢价全景
- 当前: {prem}% | 近期中枢: {mean}% | 近期波动带: [{low}%, {high}%]
- 走势: {trend_description}
- 历史参照: {annual_mean}% (年均), {annual_range} (年范围)
- 质量评估: {quality_detail}
### 3. 同类定位
{peer comparison table, sorted by premium}
结构性占比: {structural_pct}% → {interpretation}
### 4. 催化剂扫描
{only relevant catalysts, not all 7}
| 催化剂 | 状态 | 近期概率 | 影响 |
|--------|------|---------|------|
| {top 3-4 catalysts} |
### 5. 情景与计算
{scenarios with probabilities — only if useful for this specific case}
### 6. 综合判断
{one concise paragraph, separate data from opinion}
Scan Mode (--scan)
## {Category} ETF 扫描
{timestamp} | {grade} | {n} 只
| 代码 | 名称 | 溢价率 | vs同类 | 异常? | 申购 |
|------|------|--------|--------|-------|------|
| ... | ... | ...% | {+/-}pp | {flag} | {status} |
**类别中位数**: {median}% | **离散度**: {dispersion}pp
**最低成本**: {code} ({min}%) — 每 ¥10,000 比最高省 ¥{savings}
**异常标记**: {list of flagged ETFs with brief reason}
**今日事件**: {停牌/风险提示/其他值得注意的事件}
Data Sources (Quick Reference)
Primary (Tier 1 — always works)
WebSearch: targeted queries as defined in Data Strategy section
→ This is the ONLY guaranteed data source. Always start here.
Browser (Tier 2 — best-effort, NOT guaranteed)
⚠️ Direct URL navigation to financial sites often fails.
Strategy: WebSearch first → find working page URL → browser navigate.
Only attempt for: --buy flag (precision matters) or volatile markets.
If browser fails after 2 attempts → fall back to WebSearch, downgrade grade to B.
Optional API (Tier 3 — may fail, never depend)
市价: GET push2.eastmoney.com/api/qt/ulist.np?fields=f2,f3,f4,f12,f14&secids=1.{code}
净值: GET fundgz.1234567.com.cn/js/{code}.js
历史: GET api.fund.eastmoney.com/f10/lsjz?fundCode={code}&pageIndex=1&pageSize=250
K线: GET push2his.eastmoney.com/api/qt/stock/kline/get?secid=1.{code}&klt=101&lmt=250
Appendix A: Category Reference Groups
纳指: 513100, 159941, 513300, 159632, 159659, 513110, 159501
纳指科技: 159509 (注意: 跟踪纳指科技指数,非纳指100)
标普500: 513500, 161125
日经: 513520, 159866
德国DAX: 513030
恒生: 159920, 513600, 510900
恒生科技: 513180, 159742, 513010
黄金: 518880, 159934, 159812
沪深300: 510300, 159919, 510310
中证500: 510500, 159922, 510510
科创50: 588000, 588080, 588380
Appendix B: ETF Personality Cards
Persistent traits that don't change day-to-day. Load these automatically when analyzing the relevant ETF.
纳指 ETF 族
| 代码 | 名称 | 规模 | 申购状态 | 性格特征 |
|---|---|---|---|---|
| 513100 | 国泰纳指ETF | ~190亿 (最大) | 自2024/11起从未恢复 | 流动性最好,散户聚集,溢价通常偏高。2026/7/31首次触发停牌。 |
| 159941 | 广发纳指ETF | ~320亿 | 波动(7月曾短暂恢复130万份/日又关闭) | 规模最大但申购状态不稳定。"开关开关"的模式意味着它最接近恢复申购,也因此有特有的政策风险。 |
| 513300 | 华夏纳指ETF | ~中等 | 限购 | 表现中规中矩,通常处于同类中间位置。 |
| 159632 | 华安纳指ETF | ~中等 | 限购 | 通常溢价最低,是同类中的"省钱之选"。流动性略逊于513100。 |
| 159659 | 招商纳指100ETF | ~较小 | 限购 | 较新的产品,溢价通常偏低。 |
| 159509 | 景顺纳指科技ETF | ~中等 | 限购/暂停 | ⚠️ 跟踪纳指科技指数(非纳指100),集中度更高,波动更大。曾触及20%+溢价并多次停牌。 |
关键日期
- 2024/11: 513100 暂停申购(至今未恢复,已超 8 个月)
- 2026/3/27: 外管局新批 53 亿美元 QDII 额度(2021 年来单次最大)
- 2026/5 初: 3 月批的额度耗尽,热门产品再次全线暂停
- 2026/6/2: 12 只纳指 ETF 首次同步停牌 1 小时
- 2026/6/17: 外汇局局长陆家嘴论坛表态"新增发放 QDII 额度"
- 2026/7/26: 15 只 QDII 同日发布溢价风险提示
- 2026/7/31: 513100 首次单独触发停牌(监管 escalation 信号)
Appendix D: ETF Trading Rules & Terminology
Trading Rules (A-Share ETFs)
最小交易单位: 100 份 = 1 手
份额计算: floor(amount / price / 100) × 100
交收制度: T+1 (今日买,明日到账)
交易时间: 9:30-11:30, 13:00-15:00 (交易日)
涨跌幅限制: 10% (大部分ETF),20% (科创/创业板ETF)
NAV vs IOPV — When to use which
IOPV (实时参考净值):
- 交易所每15秒计算并发布一次
- 盘中交易时用作"实时净值"参考
- 是估算值,不是精确值
- 盘中使用: "参考净值 (IOPV)"
NAV (单位净值):
- 基金公司 T+1 日公布
- 基于收盘价精确计算
- QDII ETF 的 NAV 通常滞后1-2个交易日(涉及境外市场结算)
- 盘后使用: "单位净值 (NAV)"
溢价率计算:
盘中: (市价 / IOPV - 1) × 100 ← 用IOPV
盘后: (收盘价 / 最新NAV - 1) × 100 ← 用NAV
输出时标注使用的是哪个:
"参考净值(IOPV) ¥{x}" 或 "单位净值(NAV) ¥{x}"
Market Status Detection
Before any analysis, determine market status:
→ 盘中 (A股 9:30-15:00 交易日): 用 IOPV,标注 "盘中实时"
→ 盘后 (15:00后): 用收盘价 + 最新NAV,标注 "盘后,基于{date}收盘"
→ 周末/节假日: 用最近交易日数据,标注 "休市,最近数据{date}"
→ 美股时段 (21:30-04:00): 对 QDII ETF 特别标注 "美股{open/closed}"
检测方式: WebSearch "{code} 实时行情" → 看是否有今日盘中数据
Execution Rules
- Check market status first — determine 盘中/盘后/休市 before any analysis
- Use correct NAV term — 盘中=IOPV(参考净值), 盘后=NAV(单位净值), always label which
- Grade your data — first line of every output:
数据质量: {A/B/C/D} - Tier output to anomalies — normal → compact; anomaly → expand; --deep → full
- Highlight anomalies, skip normal — if nothing is wrong, say so briefly
- Always show cost of switching (one line) — "→ 选 {code} ({prem}%) 可省 ¥{X}"
- Passive inflation check on every premium > 8% — this pattern kills returns
- Reference session memory — if data already fetched, use it and note deltas
- Browser is best-effort — WebSearch first, browser only as enhancement, don't depend on it
- Calculator when asked — user says a number → run --buy logic, compact format
- Separate data from opinion — "数据显示 X,但这取决于 Y"
- Acknowledge ETF floor lots — calculator always shows remainder cash
Appendix C: Quick Reference Card
ETF 溢价分析 v4.1
状态: 先检查: 盘中?/盘后?/休市? → 决定用IOPV还是NAV
数据: [A]浏览器实时 / [B]WebSearch可靠 / [C]估算 / [D]参考
⚠️ 浏览器是best-effort增强,不依赖
检测: 被动膨胀? (NAV↓ > 价↓) | 同类偏离? (>3pp) | 溢价>8%? | 单日跳变? (>3pp)
计算: --buy N → 份额(100份/手) / 进门费 / 回归情景 / 剩余现金
Tier 1(正常)→紧凑 | Tier 2(异常)→追加警告 | Tier 3(--deep)→完整
换一只: → 选 {code} ({prem}%) 可省 ¥{X} ← 永远是1行
人格: 513100=老大哥(关闭>8月) | 159941=开关不定 | 159632=省钱之选
159509=科技集中(波动最大) | 159659=新秀偏低
关键日: 2024/11 513100关 | 2026/3/27 批53亿$ | 6/2 首次同步停牌
6/17 局长表态 | 7/26 15只QDII同日预警 | 7/31 513100单独停牌
Changelog
- 2026-07-31 v4.1: Bugfix & polish — Fixed browser URLs (direct navigation unreliable; changed to search-then-navigate). Added calculator output tiering (Tier1=compact 15 lines, Tier2=+anomaly alert, Tier3=full deep). Added Appendix D (ETF trading rules, IOPV vs NAV terminology, market status detection). Added Step 0: market status check before every analysis. Unified NAV/IOPV terminology throughout all templates. Compressed cost-of-switching to single-line output. Calculator now shows remainder cash. Execution rules expanded with market check, tiering, terminology rules.
- 2026-07-31 v4: Major refactor — replaced 7-module framework with decision-tree workflow. Added passive-inflation detection rule, built-in purchase calculator (
--buy), cost-of-switching comparison, data quality grading system (A/B/C/D), ETF personality appendix with persistent knowledge, session memory rules, and browser trigger conditions. Simplified regime assessment from 7-category classification to continuous 3-question description. Reduced output templates to minimal "anomaly-first" format. - 2026-07-31 v3: Percentile-based regime detection, catalyst hunting, duration-aware probabilities, premium quality assessment, TLDR mode, data freshness tiers, skew-aware bands.
- 2026-07-31 v2: Dynamic regime detection, dynamic thresholds, premium decomposition, scenario simulation, quota tracking.
- 2026-07-31 v1: Initial skill with static thresholds.