Available Tools
This skill can call the following MCP data services, selected as needed during the execution flow:
Yingmi Financial Data (qieman)
- Service address:
https://dashscope.aliyuncs.com/api/v1/mcps/Qieman/sse - Core capabilities: fund search/diagnosis, portfolio analysis/backtesting, asset allocation solutions, CFP toolchain, chart rendering
- Main tools for this skill:
DiagnoseFundPortfolio,GetFundAssetClassAnalysis,BatchGetFundsDetail,GetBatchFundPerformance,AnalyzePortfolioRisk,GetFundsCorrelation,GetFundsBackTest,GuessFundCode,RenderEchart
Hundsun Gildata Financial Data (gildata-aidata)
- Service address: obtained after activating the Hundsun Gildata MCP service, in the format
https://dashscope.aliyuncs.com/api/v1/mcps/<your-mcp-id>/mcp - Core capabilities: individual stock research (A/H/US), financial statements, capital flows, research reports and sentiment, wealth management products, macroeconomic data
- Optional tools for this skill:
IndustryValuation,ProductBasicInfoList
Core Principles
Charts first, text concise. All quantitative data must be presented through RenderEchart generated visualization charts; text is only used to interpret key insights, and do not repeat large sections of data already shown in the charts. The entire report should strive to be intuitive, concise, and actionable.
Input Requirements
Required Information
- Holdings product list: product name + fund code + holding amount
Optional Information
- Client risk level, investment objectives
- Dimensions requiring special attention
If the user only provides fund names without codes, first call GuessFundCode to match. If the user does not provide any holdings information, proactively ask follow-up questions.
Execution Flow
Step 1: Information Collection
- Parse the holdings list, extract fund codes, and calculate the holding weight of each fund (amount proportion)
- If the holdings include wealth management products (non-funds), you may call
ProductBasicInfoList(gildata-aidata) to obtain basic product information
Step 2: Multi-dimensional Data Collection (call in parallel as much as possible)
DiagnoseFundPortfolio: pass in fund codes and holding amounts to obtain three-dimensional scores and diagnostic suggestions for asset allocation/correlation/backtestingGetFundAssetClassAnalysis: look-through analysis of asset class distribution (proportions of stocks/bonds/cash/alternatives)BatchGetFundsDetail: basic information for each fund (type, risk level)GetBatchFundPerformance: recent performance of each fund (returns over the past 1 month/3 months/1 year, peer ranking)AnalyzePortfolioRisk: overall portfolio risk indicatorsGetFundsCorrelation: correlation coefficients between fundsGetFundsBackTest: portfolio backtesting (annualized return, maximum drawdown, Sharpe ratio)
Industry valuation reference (gildata-aidata, optional):
IndustryValuation: obtain the valuation levels (PE/PB percentiles) of key industries in the holdings, to help determine whether the holding industries are in an overvalued range
Step 3: Generate Visualization Charts (must be executed, cannot be skipped)
After data collection is completed,mustsequentially call RenderEchart to generate the following charts. Call RenderEchartonce for each chart, and embed the returned image URL into the report using markdown image syntax.
Chart 1: Asset Allocation Pie Chart (must be generated)
Use the look-through asset class proportion data to call RenderEchart Generate a pie chart. ECharts option reference:
{
"title": { "text": "资产配置分布", "left": "center" },
"tooltip": { "trigger": "item", "formatter": "{b}: {d}%" },
"legend": { "orient": "vertical", "left": "left", "top": "middle" },
"color": ["#5470c6", "#91cc75", "#fac858", "#ee6666", "#73c0de"],
"series": [{
"type": "pie",
"radius": ["40%", "70%"],
"center": ["55%", "50%"],
"itemStyle": { "borderRadius": 8 },
"label": { "formatter": "{b}\n{d}%" },
"data": [
{ "name": "股票", "value": 45.2 },
{ "name": "债券", "value": 30.1 },
{ "name": "现金", "value": 15.5 },
{ "name": "另类", "value": 9.2 }
]
}]
}
Replace data the name and value in it with the actual penetration data.
Chart 2: Bar chart comparing the performance of each fund (must be generated)
Use the near-1-year return data of each fund, call RenderEchart to generate a horizontal bar chart, visually showing which is strong and which is weak. ECharts option reference:
{
"title": { "text": "各基金近1年收益对比", "left": "center" },
"tooltip": { "trigger": "axis" },
"grid": { "left": "25%", "right": "10%", "containLabel": false },
"xAxis": { "type": "value", "axisLabel": { "formatter": "{value}%" } },
"yAxis": { "type": "category", "data": ["基金A", "基金B", "基金C"] },
"series": [{
"type": "bar",
"data": [12.5, 8.3, -2.1],
"itemStyle": { "borderRadius": [0, 4, 4, 0] },
"label": { "show": true, "position": "right", "formatter": "{c}%" }
}]
}
Replace yAxis.data with the fund short names, and series.data with the actual returns. Bars with negative returns are automatically displayed in red (this can be achieved via visualMap or by setting itemStyle.color item by item).
Chart 3: Diagnostic score radar chart (must be generated)
Use the score data returned by DiagnoseFundPortfolio, call RenderEchart to generate a radar chart. ECharts option reference:
{
"title": { "text": "组合健康评分", "left": "center" },
"radar": {
"indicator": [
{ "name": "资产配置", "max": 5 },
{ "name": "分散程度", "max": 5 },
{ "name": "回测表现", "max": 5 },
{ "name": "风险控制", "max": 5 }
],
"shape": "circle"
},
"series": [{
"type": "radar",
"data": [{
"value": [4, 2, 3.5, 3],
"name": "当前组合",
"areaStyle": { "opacity": 0.3 }
}]
}]
}
Replace value with the actual score.
Chart 4: Correlation heatmap (must be generated if there are ≥3 funds)
Use the correlation coefficient matrix returned by GetFundsCorrelation, call RenderEchart to generate a heatmap. ECharts option reference:
{
"title": { "text": "基金相关性矩阵", "left": "center" },
"tooltip": { "formatter": "{c}" },
"xAxis": { "type": "category", "data": ["基金A", "基金B", "基金C"], "axisLabel": { "rotate": 30 } },
"yAxis": { "type": "category", "data": ["基金A", "基金B", "基金C"] },
"visualMap": { "min": -1, "max": 1, "orient": "horizontal", "left": "center", "bottom": 0, "inRange": { "color": ["#313695", "#74add1", "#ffffbf", "#f46d43", "#a50026"] } },
"series": [{
"type": "heatmap",
"data": [[0,0,1],[0,1,0.85],[0,2,0.32],[1,0,0.85],[1,1,1],[1,2,0.45],[2,0,0.32],[2,1,0.45],[2,2,1]],
"label": { "show": true, "formatter": "{c}" }
}]
}
The data format is [x index, y index, correlation coefficient]; replace with the actual data. Highlight and annotate correlation coefficients >0.8.
Step 4: Output the diagnostic report
Output template
Output according to the following structure,embed the charts in the corresponding sections, and keep the text to 2-4 sentences per section:
## 持仓健康诊断报告
### 一、综合评分
{诊断评分雷达图}
综合得分 **{X}/5**,{一句话总评,如"配置均衡但分散度不足"}。
| 维度 | 评分 | 简评 |
|------|------|------|
| 资产配置 | {X}/5 | {一句话} |
| 分散程度 | {X}/5 | {一句话} |
| 回测表现 | {X}/5 | {一句话} |
| 风险控制 | {X}/5 | {一句话} |
### 二、资产配置
{资产配置饼图}
{2-3句解读:当前配置特征、与风险等级匹配度、是否存在集中风险}
### 三、业绩表现
{各基金业绩对比柱状图}
{2-3句解读:组合整体表现(年化收益X%、最大回撤X%、夏普X)、哪些基金拖累/贡献突出}
### 四、持仓相关性
{相关性热力图}
{2-3句解读:分散化程度、是否有高度重叠持仓(相关系数>0.8)}
### 五、关键发现与建议
1. **{发现1}**:{一句话描述} → 建议:{具体操作}
2. **{发现2}**:{一句话描述} → 建议:{具体操作}
3. **{发现3}**:{一句话描述} → 建议:{具体操作}
---
*诊断基于历史数据和量化模型,仅供参考,不构成投资建议。*
Notes
- Charts are mandatory: the asset allocation pie chart, performance comparison bar chart, and diagnostic radar chart are required items and must not be replaced by text tables
- Compliance requirements: must not include return promises; it is recommended to use "suggest considering" rather than "should buy"
- Gentle wording: if losses are relatively large, avoid provocative expressions such as "severe losses" or "chaotic allocation"
- Concise text: keep the full text to 800-1200 words (excluding charts), with no more than 4 sentences per section
- Data completeness: if some fund codes cannot be identified, mark and explain them