# Fund Profile

> Deep-dive profile of a single fund — performance vs benchmark and peers, risk, drawdowns, size and flows, fees, holdings snapshot, manager tenure. Triggers on "基金画像", "分析这只基金", "XX基金怎么样", "fund profile", "<基金代码> 深度分析".

- Skill: `zai-org/fund-profile` (Agent Skill)
- Install (CLI): `npx skillmds@latest add zai-org/fund-profile`
- Raw SKILL.md: https://api.skillmd.com/api/skills/zai-org/fund-profile/raw
- Safety review: pending (external: skill-scanner PASS, skillspector PASS)
- Works with: Claude Code, Claude.ai, OpenAI Codex
- Category: Coding & Dev Tools
- Author: zai-org (https://skillmd.com/u/zai-org)
- Updated: 2026-09-17
- Page: https://skillmd.com/skills/zai-org/fund-profile

---


# Fund Profile

One fund, fully evidenced. Answer the four questions an allocator asks: what is it, how has it done and why, what does it hold, and what are the capacity/structural risks.

> Engine field 口径 traps that change conclusions — 「近N年年化」 is not
> geometric, 「规模」 is merged across share classes — are documented in
> `../fund-screen/references/fund-return-traps.md`. Recompute rather than
> quoting the field.

## Workflow

### Step 1: Identity

`hexin-fund.get_fund_profile`: full name, code + share classes, type, inception, benchmark, size, fund company, current manager name. (Only the **current** manager comes from this call — 同花顺 no longer supports a `基金经理(历任)` indicator. The full roster with ranges is `wind-fund.get_fund_info`'s `历任基金经理姓名和任职时间` — ask for it and parse it, see `manager-profile`.) State which share class all following numbers use.

费率三档分两处取:管理费率在 `hexin-fund.get_fund_profile`,托管费率与销售服务费率在 `wind-fund.get_fund_info`. Cost is a fact about the product, not a footnote. Quote all three with the share class they belong to — 销售服务费率 comes back blank on an A class and populated on a C class, which is exactly the difference a holder pays for, so a single "费率" number without its class and its components is not usable.

### Step 2: Performance & risk

- NAV series via `wind-fund.get_fund_kline` for the analysis window (default: manager tenure, capped at 5y; state the window).
- `wind-fund.get_fund_performance` for stated-window returns (近1/3年收益率, 同类排名), peer ranks (name the peer group + N), volatility, max drawdown, Sharpe where available.
- Benchmark comparison: pull the benchmark index via `hexin-index.index_data` for the same window; report excess return and the 2-3 largest drawdown episodes with dates.
- Attribute performance to tenure: if the current manager started mid-window, split the record at the handover date.

### Step 3: Size & holders

Size trend (规模变动 — fast growth after a hot year is a capacity flag), holder structure (`hexin-fund.get_fund_ownership`): 机构/个人占比, single-holder concentration (>40% institutional single holder = redemption risk flag).

### Step 4: Asset mix, then holdings

**Asset mix first — from the same `wind-fund.get_fund_holdings` call.** 股票 / 债券 / 银行存款 investment 市值 and each one's 占基金资产净值比, at the MRQ 报告期. One call returns both the asset mix and the top-10, so ask for them together. Top-10 holdings cannot tell you this: a fund at 60% equity and one at 90% are different risk products even with identical top-10 names, and the 占比 is what separates them. Report the equity 仓位 alongside its 报告期, and where a prior period is retrievable, the 仓位 change — a manager cutting equity from 90% to 60% is the single loudest thing a profile can say.

**Then holdings — same response:** top-10 with weights and report date (state the lag), sector tilts, concentration (top-10 weight), turnover if available. For claims like "重仓白酒", verify against the actual holdings rows.

Note the two can disagree on 报告期 — 仓位 is MRQ while top-10 may be a different disclosure. Never present them as one snapshot without saying so.

### Step 5: Assemble

Short-form by default: Markdown in-session, per the house formatting policy. If the user asked for a document, the profile goes to PDF via the `report-render` skill — never hand-rolled with weasyprint, wkhtmltopdf, pandoc, or a bare reportlab script, because those do not emit `[n]` as PDF link annotations and the citations arrive unclickable. A holdings or performance table meant to be filtered goes to `.xlsx` via `xlsx-author`. Word is the answer only when the user asks for it or the reader will edit the file — `report-render`'s `DocxReport` builds it with the same calls; unspecified long-form stays PDF (the house formatting policy). **要出 Word 就先载入 `report-render` 技能，再动手建。** `DocxReport` 与 `Report` 同一套调用；手搓 python-docx / docx-js 会丢掉标签配色、`[n]` 跳转与封面页，机制与实测记录在那个技能里，不在这里重述。

```
# [基金全称]([代码], [份额]类) 画像
检索于: [date] · 分析窗口: [起—止] · 现任经理: [名] (自 [date])

## 一句话定位
## 业绩与风险(vs [基准] / [同类组, N=])
## 规模与持有人
## 资产配置与费率(报告期: [date])
   股票仓位 [x]% · 债券 [y]% · 存款 [z]% · 管理费 [f]%/托管费 [g]%/销售服务费 [h]%([份额]类)
## 持仓与风格(报告期: [date])
## 关注点
   🔴/🟡 结构性风险: 规模激增、经理更替、持有人集中、风格漂移(如有证据)

## 覆盖范围与局限
检索于: [date] · 报告期: [持仓所属报告期]

| 检查项 | 结论 | 源 | 检索于 |
|---|---|---|---|
| 净值与区间业绩 | 有记录 / 检索范围内未发现 / 源不可用 | [系统] | [date] |
| 同类排名(N=) | ... | [系统] | [date] |
| 基准指数同期 | ... | [系统] | [date] |
| 持有人结构 | ... | [系统] | [date] |
| 前十大持仓 | ... | [系统] | [date] |
| 资产配置(股/债/存款占净值比) | ... | wind-fund.get_fund_holdings | [date] |
| 费率(管理/托管/销售服务) | ... | 同花顺 hexin-fund.get_fund_profile | [date] |

本次未能覆盖: [失败或未授权的源,以及它本应覆盖的内容]
数据滞后性: 持仓披露滞后 [X] 天(报告期 [date] ≠ 检索于 [date]);持有人结构为半年度披露。

## 来源
[n] 〔一手|二手〕发布主体 · 文档或系统名 · 日期(发布日; 检索于) · URL
```

### Guardrails

- Every return states window + share class + net/gross.
- Manager change mid-record is always surfaced, never averaged over.
- Holdings claims carry their report date; no "currently holds" from a stale report.
  `报告期` and `检索于` are separate fields and are never substituted for one another.
- Descriptive, not predictive — flag risks, don't forecast returns.
- Provenance: disclosed NAV/规模/费率/持仓/持有人 fields are `[披露]`; excess return,
  annualised figures, top-10 concentration and any drawdown we measured off the NAV series
  are `[测算]`; a capacity or style-drift read with no record behind it is `[推断]`; an
  uncorroborated manager-departure or redemption report is `[媒体]`. `[测算]`, `[推断]`
  and `[媒体]` are never omitted.
- Sources entries: 基金合同/定期报告/净值公告 and a 同花顺 field sourced from those
  are `一手` (name the system and `检索于`; publication date may be absent for a live
  query). A media article is `二手` and names what it relays. Distinct `[n]` markers must
  equal the entry count.

