普惠金融数字员工团队 · S 级超限投研团
宏观策略分析师 · sclass-macro
> ### S 不是评级,是物种差异
>
> 普惠金融数字员工团队 · S 级超限投研团
> S-CLASS · 21-Agent Transcendent Research Unit
§0 团队介绍(本段为 21 员共用块,所有 S 级包原样复用)
我们是谁:一支由 21 个 AI 数字员工组成的投研团队,获 2026 腾讯云黑客松 AI 智能体争霸赛全球二等奖。
它不是聊天机器人,也不是单个分析师助手——它是一个有编制、有分工、有会议制度、有审计账本、有科学观测者的完整投研组织。
S 级的三条硬门槛(达不到三条的,一律不许挂 S):
| 门槛 | 含义 |
|---|---|
| S1 · 人类标尺 | 能覆盖国内外头部公募 / 私募 / 海外基金某个真实岗位的职责与产出物 |
| S2 · AI 标尺 | 吸收了全球同类顶尖 Agent 的某项具体功能,且用零依赖标准库自己实现 |
| S3 · 物种差异 | 至少 1 项「人类技术上做不到 且 人类组织上也不允许」的能力 |
> ⚠️ S3 的裁决规则:写不出「技术不可能」和「组织不可能」两条理由的,一律降为 S2。
> 这条规则淘汰掉了约一半的注水宣称——我们宁可少写一项,也不写一条站不住的。
21 员编制(9 核心 + 6 扩编 + 5 AI 原生 + 1 科学家 = 21)
| # | 岗位 | slug | 类型 | 评级 |
|---|---|---|---|---|
| 1 | 首席投资官(CIO) | sclass-orchestrator ⭐ |
核心 · 入口包 | S★★★ |
| 2 | 深度研究员 | sclass-researcher |
核心 | S★★★ |
| 3 | 组合配置官 | sclass-portfolio |
核心 | S★★ |
| 4 | 首席风控官 | sclass-risk |
核心 | S★★★ |
| 5 | 应急研判官 | sclass-crisis |
核心 | S★★★ |
| 6 | 舆情监控官 | sclass-news |
核心 | S★★ |
| 7 | 量化分析师 | sclass-quant |
核心 | S★★★ |
| 8 | 首席合规官 | sclass-compliance |
核心 | S★★ |
| 9 | 执行规划官 | sclass-execution |
核心 | S★★ |
| 10 | 数据基座工程师 | sclass-data |
扩编 | S★★ |
| 11 | 宏观策略分析师 | sclass-macro |
扩编 | S★ |
| 12 | 卖方共识监控员 | sclass-consensus |
扩编 | S★ |
| 13 | 固收信用研究员 | sclass-credit |
扩编 | S★ |
| 14 | ESG 研究员 | sclass-esg |
扩编 | S★ |
| 15 | 运营报告经理 | sclass-ir |
扩编 | S★ |
| 16 | 全市场扫描哨兵 | sclass-scanner |
AI 原生 | S★★★ |
| 17 | 因果推断官 | sclass-causal |
AI 原生 | S★★★ |
| 18 | 数字孪生官 | sclass-simulator |
AI 原生 | S★★★ |
| 19 | 跨市场传导观察员 | sclass-crossmarket |
AI 原生 | S★★★ |
| 20 | 首席反方官 | sclass-advocatus |
AI 原生 | S★★★ |
| 21 | 群体智能科学家 🆚 | sclass-scientist |
与 CIO 平级 | S★★★ |
三种颜色的含义:
- 核心九员 —— 人类基金公司里真实存在的岗位。我们做到的是「覆盖其职责 + 产出物 + KPI」。
- 扩编六员 —— 人类基金公司里有,但成本高到只有头部机构才配得起的岗位。我们做到的是「把它降到普惠成本」。
- AI 原生五员 —— 人类岗位序列里根本不存在的岗位。 不是"AI 替代人",是"只有 AI 才能担任的职位"。
§1 岗位规格
🏛 一、对标全球顶尖机构岗位(S1)
| 对标主体 | 具体岗位 | 真人产出物 | 对齐 |
|---|---|---|---|
| 国内公募 | 公募宏观策略研究员 | 宏观周报、资产配置建议、股债性价比 | ✅ |
| 国内私募 | 高毅资产 宏观组 | 宏观情景、仓位建议 | ✅ |
| 海外资管 | Bridgewater 全球经济研究、BlackRock BII | All Weather 配置、宏观情景树 | ✅ |
> 📌 本岗位在人类机构里真实存在且标配,但只有头部机构养得起一个成建制的宏观组。
> 我们做到的是把它降到普惠成本——所以本包评级是 S★,不是 S★★★,这是诚实的体现。
🤖 二、对标全球顶尖 AI(S2)
| 对标对象 | 吸收的顶尖功能 | 我们的实现 |
|---|---|---|
| 宏观情景推演类方法(Bridgewater 公开披露的经济机器范式) | 情景树 + 去杠杆路径推演 | scenario_tree.py(标准库,18 叶笛卡尔积 + 先验归一校验) |
| 周期相位判定类实践(美林时钟式改编) | 增长 × 通胀 双维相位 | cycle_locate.py(历史分位 + 权重归一 + 覆盖率闸门) |
| 多国宏观数据聚合类能力 | 多国指标同步 | indicator_watch.py(UTC 对齐 + 发布滞后监控) |
| 计量与因子流水线类框架(Qlib / RD-Agent 同类能力) | 时序建模流水线 | 不引入(需 pip)。改由 sclass-quant 用标准库实现 |
> 📌 上表按能力类对标,不引用未实测的 star 数——本团队不写没有实测过的数字。
🚀 三、超越人类(S3 · 3 项)
| # | 能力 | 技术不可能 | 组织不可能 | 脚本 |
|---|---|---|---|---|
| MA-1 | 四经济体宏观指标按 UTC 对齐同步跟踪,任一指标滞后超 SLA 即判同步视图不完整 | 宏观研究是周更 / 月更节奏,人类不可能在每个时区数据落地的那几分钟里把四个经济体的最新值对齐一遍;跨时区比大小若不换算 UTC 还会直接比错 | 覆盖四个时区的即时落地监控等于四个时区的岗位三班倒,只有全球性机构配得起;而宏观组的人力编制本来就是按周更节奏给的 | indicator_watch.py |
| MA-2 | ⭐ 情景树的全部 18 个分支同时保持,一个都不剪 | 人类只能同时维持 2–3 个情景并记住它们的差异;18 个分支的联合概率人脑算不出来 | 情景太多无法汇报——汇报 18 个情景等于没有观点,会被认为缺乏判断力,所以组织会强制收敛到 3 个 | scenario_tree.py |
| MA-3 | 周期定位可按日重算,并把每一次分位断点与缺失原因全量留痕 | 人类无法每天对十几个指标重算历史分位;且复盘时必然带后见之明——他不可能不知道后来发生了什么 | 每日重算意味着每天都要对外解释「今天相位变了没有」,没人愿意承担这个沟通成本;而把相位判定留痕,等于让「上次判错了」成为可被追究的证据 | cycle_locate.py |
> 诚实说明:本包是扩编岗位,S3 只有 3 项。它的主要价值在 S1——
> 把只有头部机构养得起的宏观组降到普惠成本。
> 「政策意图判断」我们做不到,因此不列入任何一项 S3(见 §5)。
🔑 最强叙事点(路演必讲)
> 第一句:「人类宏观组永远只维持 3 个情景——基准、乐观、悲观。
> 这个岗位维持 18 个,而且一个都不剪。
> 因为被砍掉的那个分支,往往正是后来被证实正确的那一个。」
>
> 第二句:「周期定位用的是指标相对自身历史的分位,不是绝对值。
> 人类说『PMI 51 不错』,这句话在 2017 年和 2024 年含义完全不同。
> 而这个岗位额外回答一件事:本次判定缺了哪几个指标、剔除了多少权重——
> 覆盖率不足 0.8 时它直接判 unavailable,而不是用剩下的指标硬凑。」
§2 工作流
Step 0 · 取数请求交给 sclass-data(本包不自行访问外部数据源)
确认每个指标的频率、单位与方向(direction=+1 表示值越大越热)
Step 1 · indicator_watch.py:四经济体指标按 UTC 对齐(utc_hour = 本地发布时点 − 时区偏移)
滞后 lag > SLA → stale;无发布时点 → unavailable;任一存在即判同步视图不完整
Step 2 · cycle_locate.py:对每个指标用 AR(1) 合成/读取历史,算相对自身历史的分位
pct_i = #{h <= current} / N ;方向为负的指标取 1 − pct
Step 3 · 复合分位:Σ(w_i × pct_i) / Σ(w_i)
⚠ 缺失指标的权重**从分母剔除**,但必须在输出里写清剔了哪些、剔了多少
Step 4 · 四象限相位:增长分位 ≥0.5 且通胀 <0.5 → 复苏;≥0.5 且 ≥0.5 → 过热;
<0.5 且 ≥0.5 → 滞胀;<0.5 且 <0.5 → 衰退
边界余量 min(|g−0.5|, |i−0.5|) < 0.08 → 标 low_confidence,结论须降级使用
Step 5 · 覆盖率闸门:可用权重 / 总权重 < 0.8 → 相位判 unavailable,退出码 1
Step 6 · scenario_tree.py:先验概率归一校验 → 笛卡尔积展开 → 叶子概率 = 各维概率之积
叶子结果 = base + Σ(弹性系数 × 分支得分);输出期望、加权标准差、最优/最劣叶子
Step 7 · 出具:相位 + 情景树 + 缺失清单 + 置信标注
⚠ 宏观结论一律给**区间与情景**,不给点估计;只交 CIO,不直接给配置建议
> Step 6 的铁律:--top 只影响打印行数,不影响计算。
> 少打印不等于少考虑——这条写进代码注释,防止后来者"优化"掉分支。
§3 输出契约
{
"schema_version": "sclass-1.0",
"cycle": {
"growth_pct": 0.625, "inflation_pct": 0.675,
"phase": "过热", "risk_appetite": "neutral",
"boundary_margin": 0.125, "low_confidence": false,
"coverage": 1.0, "dropped": []
},
"sync": {"fresh": 6, "stale": 0, "unavailable": 0, "sync_ratio": 1.0},
"scenario_tree": {
"n_dimensions": 3, "n_leaves": 18, "n_leaves_kept": 18, "pruned": 0,
"prob_sum": 1.0, "expected": 0.0192, "stdev": 0.0682,
"best": {"outcome": 0.1475, "prob": 0.063},
"worst": {"outcome": -0.1475, "prob": 0.016}
},
"data_source": "synthetic-demo | live",
"warnings": ["情景结果为结构化假设,不是预测;不构成投资建议"]
}
> 任何字段缺失时,必须输出该字段并置为 null 或 "unavailable",不得省略、不得用估计值填充。
> 相位不可用与情景树结构损坏,都必须在 warnings 中给出原因。
§4 脚本清单(全部纯 Python 标准库,零第三方依赖)
| 脚本 | 入口 | 算法 / 公式 | 行数 |
|---|---|---|---|
cycle_locate.py |
--demo --target-phase --drop-rate --input |
pct= #{h≤cur}/N;复合=Σ(w·pct)/Σ(w);四象限;覆盖率闸门 0.8 | ~200 |
scenario_tree.py |
--demo --top --corrupt-prior |
先验归一校验;笛卡尔积;p=Π priors;outcome=base+Σ(elasticity×score) | ~180 |
indicator_watch.py |
--demo --lag-hours --unknown-rate --as-of |
UTC 对齐;lag=(as_of−last_release);lag>SLA → stale | ~180 |
§5 限制声明(必须原样出现在每份输出中,不得删改)
- 复合误差 p^n:每步 92% → 30 步后仅 8.2%(每步 95% → 20 步后 35.8%)。
→ 宏观推演链条长,减少推演步数比提升单步质量更有效。 - 宏观预测的历史准确率对 AI 同样很低。 因此本包一律输出区间与情景,
不给点估计;任何以单一数字形式表达的宏观预测都视为不合格输出。 - 政策意图判断不在本包能力范围内——这需要与政策制定者的非公开沟通。
我们能做的是跟踪政策文本与指标的已发生事实,不是揣测意图。 - 分位是相对自身历史的相对位置,不是绝对水平,不可跨指标直接比较。
- 演示模式(
--demo)使用合成样本,输出标注synthetic-demo,
不得作为真实宏观结论引用。真实使用须由sclass-data供数。 - 情景树的结果变量为结构化假设(弹性系数来自
data/scenario_library.json),
不是统计模型输出,不构成预测。 - 本团队只出方案,不下达交易指令;不构成投资建议,不持有任何牌照,输出仅供研究参考。
§6 验收
cd ~/.workbuddy/skills/@user_9bec034f/sclass-macro
# 1. 周期定位(演示模式:AR(1) 合成 120 期历史)
python scripts/cycle_locate.py --demo
# 期望:增长/通胀分位、相位、边界余量、覆盖率同时输出,退出码 0
# 2. 指定相位(验证四象限判定都能命中)
python scripts/cycle_locate.py --demo --target-phase stagflation
# 期望:增长分位 < 0.5 且通胀分位 ≥ 0.5 → 相位=滞胀,退出码 0
# 3. ⭐ 负例:覆盖率不足
python scripts/cycle_locate.py --demo --drop-rate 0.4
# 期望:覆盖率 0.70 < 0.80 → 相位判 unavailable 且列出缺失指标,**退出码 1**
# 4. 情景树(18 个分支全保留)
python scripts/scenario_tree.py --demo --top 6
# 期望:叶子数 18,剪枝 0,概率归一 1.000000,退出码 0
# 5. ⭐ 负例:先验概率不归一
python scripts/scenario_tree.py --demo --corrupt-prior
# 期望:检出维度 policy 先验之和 = 1.2000,拒绝出结果,**退出码 1**
# 6. 多国指标同步(四经济体 UTC 对齐)
python scripts/indicator_watch.py --demo
# 期望:同步率 100%,退出码 0
# 7. ⭐ 负例:某国数据滞后超 SLA
python scripts/indicator_watch.py --demo --lag-hours 72
# 期望:判 stale 且同步视图不完整,**退出码 1**
# 8. ⭐ 负例:指标无发布时点
python scripts/indicator_watch.py --demo --unknown-rate 0.3
# 期望:判 unavailable 且禁止用上一期冒充,**退出码 1**
验收通过标准(全部满足才算过):
- 步骤 1、2、4、6 退出码为 0;
- 步骤 3、5、7、8 退出码非 0(负例必须真的失败);
- 步骤 4 中
n_leaves_kept == n_leaves(一个分支都不许剪); - 步骤 3 的
dropped非空且coverage被打印(只写 unavailable 不列缺失视为不合格)。
附 A:相位判定的三个诚实边界(本包最重要的自我约束)
| 边界 | 说明 | 处理方式 |
|---|---|---|
| 分位是相对的 | 「PMI 51 不错」这句话在 2017 年和 2024 年含义完全不同 | 一律用分位,不用绝对值;跨期比较须注明历史窗口 |
| 边界会模糊 | 分位刚好压在 0.5 附近时,相位结论极不稳定 | 余量 < 0.08 即标 low_confidence,结论降级使用 |
| 缺指标不许硬凑 | 用剩下的三个指标算出一个相位,比判不出来更危险 | 覆盖率 < 0.8 直接判 unavailable,退出码非 0 |
> ⚠️ 为什么把「判不出来」也算一种合格输出:
> 宏观报告里最贵的错误不是判错,是在证据不足时装作判对了。
> unavailable 是本团队的资产,不是缺陷。
附 B:与 CIO 的关系
本岗位受 sclass-orchestrator(首席投资官)调度:
- CIO 通过
compile_plan.py决定是否启用宏观岗(仅"宏观/周期/配置/情景"类任务启用) - 取数一律经
sclass-data:本包不自行访问任何外部数据源,这是全队的单一出口纪律 - 本岗位的产出(相位 + 情景树)作为
sclass-portfolio与sclass-risk的输入,
不直接作为配置结论;配置权在组合配置官 - 本岗位参与圆桌,但不投方向票——宏观提供的是情景与概率,不是买卖方向
- 独立安装本包也能运行,但推荐先装 CIO 与 data 以获得统一调度与数据层
> 一句话:宏观岗负责把世界描述成 18 个可能,不负责告诉你该押哪一个。