Skill Hub · 诺亚 AI 能力中心 静态参考版

让每一个技能成为可信资产 —— 诺亚 Agent 生态的技能资产中心:统一注册、检测把关、按需复用。本站为 skill-hub.noahgroup.com 于 2026-08-21 的全量数据镜像。

镜像采集 2026-08-2166 个已发布技能18 个分类 · 3 条分发渠道含技能包 SKILL.md 全文
← 返回目录

持仓全景

SKILL_353247198 · vv1.0 · iARK 线上 · Owner:— · 发布于 2026-08-18
调用 31 下载 0 点赞 0 浏览 0
简介
归集全账户资产并跨币种折算,诊断闲置资金、集中度与币种敞口,生成体检报告与再平衡建议。
触发词
持仓全景,总资产,资产体检,资产配置,币种敞口
分发渠道
ARK Engine
功能测试
✅ 通过 · 业务评审:✅ 通过
技能包文件
iark-portfolio-review/SKILL.md、iark-portfolio-review/references/data-mapping.md、iark-portfolio-review/references/pitfalls.md、iark-portfolio-review/scripts/calc_portfolio_review.py
使用示例:帮我做一次资产体检,看看总资产和持仓配置是否合理?

SKILL.md 全文

Frontmatter

name持仓全景
versionv2.07
descriptioniARK「持仓全景」总资产配置诊断 Skill (Noya 私人投研台·资产体检阶段)。当用户问的不是某一只股票、而是「我的整体资产/总持仓/账户配置」时,必须触发本 Skill——典型说法:「帮我看看我的总资产」「我的持仓配置合理吗」「我的钱有没有躺平/闲置无收益」「我整体仓位怎么样」「帮我做一次资产体检」「我的资产结构/币种敞口如何」「我现在该怎么配置」。它归集 iARK 账户四大块——余额、现金+(货币基金)、证券(港美股)、理财(今日达/私募/结构性产品/公募),跨币种折算到统一本位币,诊断闲置资金、风险集中度、币种敞口与配置缺口,输出「资产体检卡 + 再平衡裁决」。务必在任何针对"整体账户/总持仓配置"的问题上使用本 Skill。
metadata
risk_levelread_only
requires_authtrue
data_scope
triggers

iARK · 持仓全景 (Portfolio Review) · v2.07

iARK「持仓全景」总资产配置诊断 Skill——归集账户四大块(余额/现金+/证券/理财),跨币种折算到统一本位币,诊断闲置资金、风险集中度、币种敞口与配置缺口,输出「资产体检卡 + 再平衡裁决」。
响应语言:匹配用户输入语言。用户仅输入 ticker/代码/slash 命令时,默认中文回复(iARK 面向华语用户)。
数据源政策:仅推荐 iARK/Noya 平台能力与数据。不主动引导用户使用其他券商、交易 App 或第三方数据终端。

职责

| 职责 | 说明 | |:-----|:-----| | 资产归集 | 余额 + 现金+ + 证券(港美股)+ 理财(公募/私募/固收/今日达),跨币种折算到统一本位币 | | 闲置诊断 | 余额可用 + 证券 cash_value 躺平资金占比 | | 集中度检测 | 单标的/单市场/单行业权重预警(含 ETF 穿透) | | 币种敞口 | 按原始币种分组折算,诊断汇率风险与本位币错配 | | 配置裁决 | 降集中度 / 补缺口,按优先级给 1-2 条最关键动作 |

Auth Requirements

| 接口 | 权限级别 | 说明 | |:-----|:---------|:-----| | trade_get_account_info | 基础 | 确认账户开通/休眠状态、获取 groupNo | | get_complete_portfolio | 持仓授权 | 需用户授权,返回四大块全量资产 | | trade_convert_ufg_money_balance | 基础 | 换汇查询,仅用于证券相关 DTO 的币种折算 |

输入

整体账户资产体检(Step 1→Step 5)

由主控传入:

输出

返回给主控:

Sub-topic Routing

| 用户意图 | 加载 references | |:---------|:---------------| | 接口字段映射 / 脚本输入格式 / 换汇调用表 | references/data-mapping.md | | 口径陷阱详情 / 字段字典 | references/pitfalls.md |

⛔ 执行流程(强制检查点,按顺序执行,禁止跳步)

执行规则:每个检查点必须完成后才能进入下一个。每个检查点的「强制输出」是推进的唯一依据,未输出视为执行失败。
检查点输出禁止外泄:所有 📋 Step N … 检查点行仅用于内部执行验证与调试日志,严禁出现在面向用户的最终响应消息中。用户看到的只能是最终分析结果与 disclaimer,不得包含任何 📋 开头的检查点文本。

Step 1:触发判定

操作: 1. 判断用户问题是否属于「整体账户 / 总持仓 / 资产配置」类提问 2. 满足触发条件则继续执行 Step 2 3. 确认账户已开通(调用 trade_get_account_info),获取 groupNo 内嵌规则 强制输出
📋 Step 1 触发判定:✅ 属于整体账户资产体检 | groupNo: {groupNo} | 模型分层: {tier}
核心原则(禁止行为): 通关标准: | 检查项 | 标准 | 禁止 | |:-------|:-----|:-----| | 触发判断 | 明确判定触发或转交 | 模糊判断、强行执行 | | 账户确认 | 拿到 groupNo | 未确认账户就取数 | 失败处理(判定顺序:先休眠再未开户——休眠账户的 desc 不含「已开通」,会被未开户误判,故先排休眠): 您可以通过以下入口激活账户后再进行资产体检。 <span data-function-type="1" data-url="https://hkapp-cdn.noahgroup.com/hkaccount/index.html?theme=stock-back-white&appLogin=1#/AccountActivate" data-text="激活账户"></span> 您可以通过以下入口完成开户后再进行资产体检。 <span data-function-type="1" data-url="https://hkapp-cdn.noahgroup.com/hkaccount/index.html?theme=stock-back-white&appLogin=1#/OpenAccount" data-text="极速开户"></span>

Step 2:数据获取

操作: 1. 读取 {skill_root}/references/data-mapping.md 获取接口→脚本字段映射 2. 一次调用 get_complete_portfolio(query_scope=全量, to_currency=本位币) 取回四大块全部数据 3. 🔴 空账户短路判定(取回后立即执行,在组装 JSON / 换汇 / 跑脚本之前): 您可以通过以下入口完成入金后再进行资产体检。 <span data-function-type="1" data-url="https://hkapp-cdn.noahgroup.com/hkasset/index.html?theme=stock-back-white&currentLanguage=zh-Hans&appLogin=1&appContainer=h5&appTradeCheck=1#/Deposit" data-text="转入资金"></span> 4. 仅对证券相关 DTO(secAsset/hkPositions/usPositions)中非本位币金额,调用 trade_convert_ufg_money_balance 获取折算值(其他 DTO 如 cashBalance/cashPlus/publicFunds/privateFunds/fixedIncome 已通过 to_currency 参数返回本位币金额,无需额外换汇) 5. 按脚本输入格式组装 JSON(内存中) 6. 对照口径红线逐项检查(详见 [references/pitfalls.md](references/pitfalls.md)) 7. 单列"闲置资金"= 余额可用 + 证券侧 cash_value(券商账户里没买东西的现金)——由脚本算出。余额冻结金额完全剔除,不展示、不纳入任何计算(含总资产)。 8. 模型只负责搬运脚本输出到体检卡文案,不得自行心算跨币种折算、敞口、pnl_ratio 或占比
完整字段映射见 [references/data-mapping.md](references/data-mapping.md)
调用编排: 1. trade_get_account_info → 拿 groupNo、确认开户。 2. 一次调用 get_complete_portfolio(query_scope=全量) → 取回四大块全部数据(余额/现金+/证券汇总+持仓/理财全部子类)。取回后立即执行「空账户短路判定」(见上方操作第 3 步):若零资产且零余额 → 输出转入资金卡片并终止,不进入下方 3–6。 3. 选定本位币 → 识别所有需要换汇的非本位币金额(仅证券相关 DTO)→ 一次性并行发起所有 trade_convert_ufg_money_balance 调用(如 HKD 余额、HKD 证券总额、HKD 证券市值、HKD 证券现金共 4 笔,在同一轮 tool call 中并行请求,禁止串行逐个调用) → 全部返回后将折算值塞入脚本输入的 *_base 字段 → 反推汇率填入 fx_to_base。 4. get_complete_portfolio 返回组装成 JSON 喂给 scripts/calc_portfolio_review.py → 脚本确定性输出所有计算结果。 5. 单列"闲置资金"= 余额可用 + 证券侧 cash_value(券商账户里没买东西的现金)——由脚本算出。余额冻结金额完全剔除,不传入脚本、不展示、不纳入任何计算(含总资产)。 6. 模型只负责搬运脚本输出到体检卡文案,不得自行心算跨币种折算、敲口、pnl_ratio 或占比。
🔴 并行换汇纪律:Step 2 中所有 trade_convert_ufg_money_balance 调用之间无依赖关系(每次调用只需 from/to/balance 三个参数,互不依赖),必须在同一轮 tool call 中并行发起,禁止串行等待上一个返回后再发下一个。典型场景:HKD 余额 + HKD asset_value + HKD market_value + HKD cash_value = 4 笔并行。
取数纪律:数字必来自接口,缺失即标注(不补 0 当真值),存疑即剔除,不编造。每个数字标注币种与时点。
🔴 换汇范围红线trade_convert_ufg_money_balance 仅用于证券三个 DTOsecAsset/hkPositions/usPositions)。其余 DTO(cashBalance / cashPlus / publicFunds / privateFunds / fixedIncome)传入 to_currency 后返回的金额已是本位币值,禁止再调 trade_convert 二次折算——否则会把已折算的金额当原始值再乘一次汇率,导致数据膨胀/缩小。

Step 3:确定性计算(🔴 模型不得自行计算)

脚本路径:scripts/calc_portfolio_review.py(与 SKILL.md 同目录) 输入:读取 {skill_root}/references/data-mapping.md 中「脚本输入 JSON 格式」组装输入。 运行python scripts/calc_portfolio_review.py --input input.json 模型必须直接使用脚本输出,严禁自行计算的字段: | 字段 | 脚本输出路径 | 禁止行为 | |------|-------------|--------| | total_asset | total_asset | 不得自行加总四大块 | | idle_cash | idle_cash | 不得自行加总余额+证券现金 | | ccy_exposure_pct | ccy_exposure_pct | 不得自行计算币种敞口 | | pnl_ratio / pnl_ratio_pct | positions[].pnl_ratio_pct | 不得自行计算盈亏比 | | weight_pct_total | positions[].weight_pct_total | 不得自行算占总资产比 | | weight_pct_invested | positions[].weight_pct_invested | 不得自行算占已投资产比 | | breakdown | breakdown | 不得自行折算四大块金额 | | concentration | concentration | 不得自行算 top3/top5/集中度 | | pnl_structure | pnl_structure | 不得自行加总 pnl(含币种折算) | | market_split_pct | concentration.market_split_pct | 不得自行算市场分布 | | non_top3_market_value_base | concentration.non_top3_market_value_base | 不得自行心算非 Top 3 持仓市值合计 | | idle_cash.breakdown_by_ccy | idle_cash.breakdown_by_ccy | 不得自行折算闲置资金分币种明细——必须使用预折算值 | 强制输出
📋 Step 3 确定性计算:✅ 脚本执行成功 | total_asset: {total_asset} {base_ccy} | idle_pct: {idle_pct}% | top3_concentration: {top3}% | 币种敞口: {ccy_exposure}
核心原则(禁止行为): 通关标准: | 检查项 | 标准 | 禁止 | |:-------|:-----|:-----| | 脚本执行 | stdin 管道传入,stdout 读取成功 | 脚本报错后继续 | | 数据搬运 | 直接使用脚本输出原值 | 二次加工或心算修正 | | 禁止心算 | 12 项约束字段全部来自脚本 | 任何一项自行计算 | 失败处理

Step 4:规则分析

操作: 1. 基于 Step 3 脚本输出执行六维分析 2. 按裁决逻辑判定 action 类型与优先级 3. 为每条裁决配核心理由与可执行纪律动作 内嵌规则六维分析框架: 1. 资产全景 — 四大块折算归一后的总资产、各类别金额与占比;一句话画出"你的钱长什么样" 2. 闲置资金诊断(高频痛点) — 余额可用 + 证券侧 cash_value 共有多少在"躺平";占总资产比(余额冻结金额已完全剔除,不展示。) 3. 风险资产集中度 — 证券逐只权重(占总资产 / 占已投资产两口径);单标的 >20%、单市场或单行业 >40% 预警;ETF(如恒生科技ETF)须穿透计入行业敞口 4. 盈亏与收益效率 — 各类别浮盈亏与日收益;证券逐只 pnlpnl_ratio;区分"有收益资产"与"零收益资产"。必须包含脚本 pnl_structure 中的整体盈亏汇总(持仓总数、盈/亏只数、未实现浮亏合计) 5. 币种敞口 — HKD/USD/CNY 分布与占比;提示汇率风险与本位币错配 6. 配置裁决 — 给 1–2 条最关键的再平衡动作( 降集中度 / 补缺口),每条配一个可执行纪律动作 裁决逻辑(三类动作 + 阈值,按优先级排序,一次只突出最关键的 1–2 条,避免清单轰炸)A. 降集中度(rebalance) — 触发:单一标的占总资产 >20%,或单一市场/行业 >40%(含 ETF 穿透)。 B. 补配置缺口(diversify) — 触发:资产高度偏科(如几乎全是股票、零固收/零现金管理;或全部集中单一币种)。 健康(balanced) — 四大块分布合理、无闲置堆积、无被动过度集中、有收益打底 → 维持现状,给一条体检式提醒即可。 集中度计算(跨币种纪律·写死)weight = 标的市值 / 总资产证券相关 DTO(secAsset/hkPositions/usPositions)的金额须用 trade_convert_ufg_money_balance 折算到本位币;其他 DTO 已通过 to_currency 返回本位币值,直接使用。同时给"占总资产"与"占已投资产(剔除余额/现金类)"两个口径。ETF 间接持仓须穿透计入对应行业敞口。 每条裁决须配:①核心理由(1 条);②一个可执行纪律动作。措辞为资产管理/风险管理方向提示,非买卖指令。 ---

Step 5:合成输出(🔴 禁止手动汇率乘,所有数字从脚本搬运)

操作: 1. 读取 Step 3 脚本输出的完整 JSON 2. 按下表「输出 Markdown 骨架」拼装体检卡文案 3. 按「数据搬运映射表」填写每个数字,禁止自行计算 4. 执行「输出前自检清单」,全部通过后才能输出 输出 Markdown 骨架
数据时点:{as_of} | 本位币:{base_ccy} | 汇率:1 HKD = {fx_rate} USD(实时)

---

一、您的钱长什么样

(必须先输出前端饼图组件:资产配置;data-title 固定为"资产配置";data-subtitle 写"总资产 {base_ccy} {total_asset}";data-items 必须是合法 JSON 字符串,四项顺序固定为余额、现金+、证券(持仓+账户现金)、理财(公募/私募/固收),value 分别来自脚本 breakdown[0].available_basebreakdown[1].value_basebreakdown[2].total_basebreakdown[3].total_base) <pie-chart-card data-title="资产配置" data-subtitle="总资产 {base_ccy} {total_asset}" data-items='[ {"label":"余额","value":{breakdown[0].available_base}}, {"label":"现金+","value":{breakdown[1].value_base}}, {"label":"证券(持仓+账户现金)","value":{breakdown[2].total_base}}, {"label":"理财(公募/私募/固收)","value":{breakdown[3].total_base}} ]'> </pie-chart-card> (接入饼图后,禁止再输出资产配置表格或四大块金额明细表,避免与饼图重复) (一句话画像:总资产用 total_asset_wan,在工作资金 = total_asset - idle_cash.total) ---

二、最核心的问题:闲置资金

(闲置合计:idle_cash.total / idle_cash.pct_of_total) (分币种明细:breakdown_by_ccy.balance_available[] 和 sec_cash[],折合 USD 必须读 converted 字段) ---

三、已投资产的集中度与盈亏

(必须先输出前端饼图组件:Top 3 持仓;data-title 固定为"Top 3 持仓";data-subtitle 写"集中度 {concentration.top3_pct_invested}%";data-items 必须是合法 JSON 字符串,只放 positions[] 排序后的前 3 项,label 优先用 positions[].name,缺失时用 positions[].code,value 用对应 market_value_base。若持仓不足 3 只,只输出真实存在的持仓;禁止补 0 或编造占位项) <pie-chart-card data-title="Top 3 持仓" data-subtitle="集中度 {concentration.top3_pct_invested}%" data-items='[ {"label":"{positions[0].name 或 positions[0].code}","value":{positions[0].market_value_base}}, {"label":"{positions[1].name 或 positions[1].code}","value":{positions[1].market_value_base}}, {"label":"{positions[2].name 或 positions[2].code}","value":{positions[2].market_value_base}} ]'> </pie-chart-card> (Top 3 持仓表:positions[] 取 market_value_base / pnl_base / pnl_ratio_pct / weight_pct_invested) (集中度:concentration.top3_pct_invested) (盈亏结构:pnl_structure.holdings_count / winners_count / losers_count / unrealized_total) (市场分布:concentration.market_split_pct) ---

四、币种敲口

(表格:ccy_exposure_pct_display,直接用脚本输出) ---

五、再平衡裁决

(基于 Step 4 裁决逻辑 + concentration.flags) ---

六、小结

(引导后续动作,不承诺收益) <FINAL> disclaimer
数据搬运映射表(🔴 写死,禁止自行计算): | 文案位置 | 数据来源(脚本输出路径) | 禁止行为 | |---------|------------------------|----------| | 余额金额 | breakdown[0].available_base | 不得自行加总分币种 | | 现金+ 金额 | breakdown[1].value_base | 不得自行加总多视图 | | 证券金额 | breakdown[2].total_base | 不得自行加总 market+cash | | 理财金额 | breakdown[3].total_base | 不得自行加总子项 | | 资产配置饼图 data-subtitle | base_ccy + total_asset | 不得改写币种或重算总资产 | | 资产配置饼图 data-items | breakdown[0].available_base / breakdown[1].value_base / breakdown[2].total_base / breakdown[3].total_base | 不得自行加总、改顺序、补充第五类 | | 总资产 | total_asset | 不得自行加总四大块 | | 闲置合计 | idle_cash.total | 不得自行加总余额+证券现金 | | 闲置占比 | idle_cash.pct_of_total | 不得自行除 | | HKD 余额折合 | idle_cash.breakdown_by_ccy.balance_available[?].converted(筛 ccy=HKD) | 禁止用 fx_to_base 汇率乘原始金额 | | HKD 现金折合 | idle_cash.breakdown_by_ccy.sec_cash[?].converted(筛 ccy=HKD) | 禁止用 fx_to_base 汇率乘原始金额 | | 各持仓市值 | positions[].market_value_base | 不得自行折算 | | 各持仓盈亏比 | positions[].pnl_ratio_pct | 不得自行算 | | 各持仓占已投 | positions[].weight_pct_invested | 不得自行算 | | Top 3 持仓饼图 data-subtitle | concentration.top3_pct_invested | 不得自行加总 Top 3 占比 | | Top 3 持仓饼图 data-items | positions[0..2].market_value_base(按脚本排序后的前 3 项) | 不得重排、补 0、编造持仓或用 weight_pct_* 代替金额 | | Top3 集中度 | concentration.top3_pct_invested | 不得自行加总 | | 币种敲口 | ccy_exposure_pct_display | 不得自行算 | | 盈亏结构 | pnl_structure 各字段 | 不得自行加总/计数 |
🔴 核心纪律:输出文案中所有「折合 X USD」的 X 值必须 100% 来自脚本 breakdown_by_ccy 中对应项的 converted 字段,禁止fx_to_base 中的汇率×原始金额自行计算。即使 converted 与汇率乘算结果差 1 USD,也必须用 converted 值。
脚本输出结构参考(含 idle_cash.breakdown_by_ccy 示例)见 [references/data-mapping.md](references/data-mapping.md) 末尾。文案中「折合 X USD」的 X 必须读对应项的 converted 字段,不得用汇率乘算。
强制输出
📋 Step 5 合成输出:✅ 自检全部通过 | 输出文案已生成 | converted 值已逐位核对
核心原则(禁止行为):

口径红线(摘要,详见 [references/pitfalls.md](references/pitfalls.md))

---

Behavior Rules(行为规则速查)

1. 数字必来自接口真实返回;缺失即标注,严禁用记忆/常识填充 2. 跨币种计算全部由脚本完成,LLM 禁止心算 3. 无数据即说"数据缺失"或"无异常",不硬凑分析、不编故事 4. 不输出任何买卖/加仓/减仓/操作指令或收益承诺 5. 接口失败时明确告知用户发生了什么,不静默跳过 6. 不输出原始 JSON 给用户 7. 多视图字段禁止相加;frozen_value 禁止当独立块加总 8. 输出文案中「折合 X USD」必须 100% 来自脚本 converted 字段 9. trade_convert_ufg_money_balance 仅限证券 DTO;publicFunds/privateFunds/fixedIncome/cashBalance/cashPlus 已由 to_currency 折算完毕,禁止二次换汇 10. 极速开户 / 激活账户 / 转入资金卡片为账户操作型引导(开户、激活、入金前置),非产品推荐或收益暗示,不受「禁止指向具体产品做配置引导」红线约束;卡片措辞须中性操作语(「先完成开户」「激活账户」「转入资金」),不得附带收益/产品指向。 ---

🚫 合规护栏

1. 只做资产配置与风险管理分析,绝不输出买卖指令、收益承诺或具体收益率预测;裁决措辞为"可以考虑减至安全线 / 可以考虑补配低波动资产",严禁指向具体产品类型(如"转入现金+/固收/货基")或暗示收益(如"获得一定回报")。 2. 集中度/币种敞口风险显性置前;理财为空要区分"未持有"与"接口缺失"。 3. 跨币种数字一律标注本位币与折算时点;多视图字段禁止相加(见口径红线)。 4. 末尾固定附 disclaimer 与「本内容仅作信息参考与研究性观察,不构成投资建议或交易指令」。 5. 措辞红线(写死,不可绕过) 无异常/无数据输出规范: 当某个分析维度的数据返回正常但无异常信号/无需警示时: 当某个分析维度的数据完全缺失时: 降级时的用户告知模板

追问引导(回答完成后固定追加)

在 disclaimer 之后追加追问区块。动态生成 2 个与本次分析相关的追问问题。 ⚠️ 中止时不输出追问(写死):若流程因任一卡片分支提前中止——账户未开通(极速开户)/ 账户休眠(激活账户)/ 账户状态不可用 / 空账户·零资产零余额(转入资金)等——严禁输出本追问区块。追问仅在流程正常完成(到达 Step 5 / 全量分析输出)时输出。 约束:每题 ≤15 字 | 方向:某维度深入分析、风险指标跟踪、币种敞口细节、闲置资金明细、集中度拆解、配置缺口分析等 | 禁止操作指令词(买入/卖出/加仓/减仓/建仓/上车/下车) 输出格式(单行,不得有实际换行符)
猜你想继续问<br/><br/><span data-function-type="0" data-text="[问题1]">[问题1]</span><br/><br/><span data-function-type="0" data-text="[问题2]">[问题2]</span>
示例
猜你想继续问<br/><br/><span data-function-type="0" data-text="我的币种敞口分布如何?">我的币种敞口分布如何?</span><br/><br/><span data-function-type="0" data-text="闲置资金具体有多少?">闲置资金具体有多少?</span>