| core | ||
| docs | ||
| skills | ||
| .gitignore | ||
| CONFIG_GUIDE.md | ||
| main.py | ||
| QUICKSTART.md | ||
| readme.md | ||
| requirements.txt | ||
| test_vector_calculation.py | ||
Macro-Narrative Driven ETF Investment Agent (MND-IA)
1. 项目概述 (Project Overview)
MND-IA 是一个基于 “宏观叙事生命周期 + 资金流向交叉验证” 的自动化 ETF 投资智能体系统。
核心哲学 (Core Philosophy)
- 叙事即信号 (Narrative as Signal): A 股是政策市,新闻联播及部委政策是市场趋势的先行指标。
- 资金即真相 (Flow as Truth): 只有资金实际流入的板块,叙事才具备可信度。
- 信任指数 (Trust Index): 决策基于叙事热度与资金强度的共振程度。
- 生命周期管理 (Lifecycle): 新闻不是孤立的脉冲,而是具有“潜伏-发酵-兑现-衰退”周期的持久对象。
2. 系统架构 (System Architecture)
本系统采用 Multi-Agent "Skills" 架构,由一个不可拆分的共享内核 (Shared Kernel) 和五个独立职能的 Agent Skills 组成。
2.1 共享内核 (Shared Kernel) - 不可拆分
这是系统的数据中心和逻辑基石,所有 Agent 必须遵循此协议。
- MCP World Book (世界书): 一个动态更新的 JSON 数据库,存储宏观状态、活跃叙事对象和历史经验。
- Asset Map (资产映射表): 连接自然语言(如“低空经济”)与金融代码(如
512XXX)的静态字典。 - Macro Matrix (宏观逻辑矩阵): 定义宏观因子(如利率、汇率)对各 ETF 板块的基础理论影响值 ()。
2.2 Agent Skills 群 (The Squad)
| Agent ID | 名称 | 职能 (Skill) | 输入 | 输出 |
|---|---|---|---|---|
| Skill_A | 情报分析师 (Analyst) | NLP 提取、新闻分级、叙事打分 | 新闻文本 (News) | Narrative_JSON |
| Skill_B | 量化研究员 (Quant) | 行情分析、资金流计算、异常检测 | 行情数据 (Akshare) | Market_Data_JSON |
| Skill_C | 宏观策略师 (Strategist) | 维护世界书、判断周期、更新叙事权重 | Narrative_JSON + 历史 WorldBook |
更新后的 World_Book |
| Skill_D | 基金经理 (PM) | 计算信任指数、风控、生成订单 | World_Book + Market_Data_JSON |
Trade_Orders |
| Skill_E | 复盘审计员 (Auditor) | 绩效归因、偏差修正 | 历史预测 vs 实际走势 | Correction_Report |
| Skill_F | 新闻联播爬虫 (Crawler) | 抓取新闻联播文字稿 | 目标日期 | 新闻文本列表 |
3. 数据协议与 Schema (Data Protocols)
注意:AI 生成代码时必须严格遵守以下 JSON 结构。
3.1 World Book Schema (世界书结构)
{
"timestamp": "2025-10-01T09:00:00",
"macro_cycle": {
"status": "upward", // upward(上行) | downward(下行)
"liquidity": "loose", // loose | neutral | tight
"policy_wind": "stimulus" // stimulus | regulation | wait_and_see
},
"active_narratives": [
{
"id": "narrative_low_altitude_economy_202510",
"topic": "低空经济",
"related_etfs": ["512XXX", "159XXX"],
"lifecycle_stage": "fermentation", // incubation | fermentation | realization | decay
"base_score": 85, // 初始新闻强度
"decay_factor": 0.95, // 每日衰减系数
"current_weight": 80.75, // 动态权重
"last_updated": "2025-10-01"
}
],
"static_matrix_snapshot": {
// 基础宏观因子影响表 ($x$)
"tech_etf": {"rate_cut": 8, "currency_depreciation": 2},
"bank_etf": {"rate_cut": -5, "currency_depreciation": -1}
}
}
3.2 Trust Index Formula (信任指数算法)
Agent D (PM) 必须使用以下逻辑计算得分:
- Score_narrative: 来自 World Book 中
current_weight。 - Score_flow: 来自 Skill_B (Quant) 的资金净流入归一化评分。
- Penalty_divergence: 当
Narrative > 80但Flow < 30时,惩罚值设为 100 (一票否决)。
4. 业务流程 (Workflows)
4.1 每日批处理流程 (Daily Batch) - 08:30 AM
- Ingest: Skill_A 读取昨夜今晨新闻,Skill_B 读取昨日行情。
- Cognition: Skill_C 读取 Skill_A 的结果,更新 MCP World Book(增强或衰减叙事权重)。
- Decision: Skill_D 读取最新的 World Book 和 Skill_B 的资金数据,计算 Trust Index。
- Execution: Skill_D 输出具体的
buy/sell指令列表。
4.2 盘中哨兵流程 (Intraday Sentinel) - 09:30 - 15:00
- Monitor: 系统监听快讯接口(如财联社红色资讯)。
- Trigger: 若检测到
Level A级新闻(如印花税、降准)。 - Interrupt: 唤醒 Skill_C 临时修改 World Book 状态。
- Re-eval: 触发 Skill_D 重新计算当日持仓建议。
4.3 盘后复盘流程 (Post-Market Feedback) - 16:00 PM
- Skill_E 对比昨日的
Trade_Orders和今日实际涨跌幅。 - 若偏差过大,Skill_E 向 MCP 写入一条
correction_log,调整 Skill_C 未来对同类新闻的打分权重。
5. 项目结构 (Project Structure)
建议 AI 按照以下目录结构生成代码:
/mnd_agent
├── /core # 共享内核
│ ├── world_book.py # MCP 读写逻辑
│ ├── asset_map.json # 资产映射字典
│ └── macro_matrix.json # 静态因子表 ($x$)
├── /skills # Agent 能力群
│ ├── analyst.py # Skill A: LLM Prompts for News
│ ├── quant.py # Skill B: Akshare Data Analysis
│ ├── strategist.py # Skill C: World Book Update Logic
│ ├── pm.py # Skill D: Trust Index & Trade Logic
│ ├── auditor.py # Skill E: Feedback Loop
│ └── crawler.py # Skill F: XinwenLianbo Crawler
├── /data # 本地存储 (Parquet/SQLite)
├── /logs # 运行日志
├── main.py # 主调度入口
└── README.md # 本文件
6. 技术栈约束 (Tech Stack Constraints)
- Language: Python 3.10+
- LLM Interface: OpenAI SDK (兼容 GLM-4/Claude-3.5)
- Data Source:
akshare(A股行情),crawl4ai(新闻联播爬虫) - Data Process:
pandas,numpy - Storage: 本地 JSON 文件模拟 MCP Server (MVP阶段)
7. 给 AI 工具的构建指令 (Instructions for AI Builder)
- Step 1: 首先创建
core/目录,定义好WorldBook类和 JSON 数据结构,这是所有 Skill 通信的基础。 - Step 2: 实现
skills/quant.py,确保能从 Akshare 获取 ETF 数据并计算“资金放量”指标。 - Step 3: 实现
skills/analyst.py,编写能够将新闻文本转化为 JSON 对象的 Prompt。 - Step 4: 实现
skills/pm.py中的 Trust Index 算法,确保逻辑与上述公式一致。 - Step 5: 编写
main.py将上述模块串联起来,完成每日一次的模拟运行。