> AI 辅助声明:本文由作者基于个人实践整理,并使用 AI 工具辅助结构化、润色和校对。
> 风险提示:本文仅记录个人投研系统的技术搭建方法,不构成任何投资建议、收益承诺、荐股服务或金融产品推荐。市场有风险,投资决策需独立判断。
> 数据提示:文中涉及的 akshare、yfinance 等免费数据源可能存在延迟、缺失、限流或口径差异,重要结论必须交叉验证公告、年报、交易所和权威数据源。
为什么要搭一个个人投研工作台
过去做投资研究,常见流程是:打开行情软件,看几份研报,翻年报,手工记录估值和财务指标,最后在 Excel 或笔记里写结论。
这个流程的问题不在于“不能用”,而在于很难稳定复用:
- 每次分析都要重复找数据。
- 宏观、估值、财务、风险、仓位分散在不同工具里。
- 很多判断靠临场感觉,复盘时说不清当时依据。
- AI 可以帮忙总结,但如果没有数据接口和固定流程,很容易变成泛泛而谈。
所以我想搭一个更工程化的个人投研环境:
-用 WSL2 提供稳定的 Linux 开发环境。
-用 Python 管理数据和量化计算。
-用 MCP 把行情、财务、宏观数据接入 AI 助手。
-用 Claude Code 作为交互入口。
-用 Skills 固化价值投资、宏观配置、风险检查等研究框架。
目标不是做一个“自动赚钱机器”,而是做一个可复用、可审计、可扩展的个人研究工作台。
整体构架
系统运行在 Windows + WSL2 环境中,核心目录大致如下:
~/investment-system/├── .mcp.json # Claude Code 项目级 MCP 配置├── .claude/│ └── skills/ # 投资分析框架├── mcp-servers/│ └── data_server.py # MCP 数据服务├── engines/│ ├── run.py # 统一命令入口│ ├── risk_engine.py # 风险评分│ ├── screener.py # 多因子选股│ ├── valuation_tracker.py # 估值追踪│ ├── macro_signal.py # 宏观信号│ ├── backtest.py # 回测│ └── optimizer.py # 仓位优化├── portfolio/│ ├── holdings.json # 实际持仓│ └── candidates.json # 候选股池├── output/ # 报告输出└── CLAUDE.md # Claude Code 主控文件
数据流可以简化理解为两条线:
Claude Code ←→ MCP ←→ data_server.py ←→ akshare / yfinanceClaude Code ←→ CLI ←→ engines/run.py ←→ 量化引擎
第一条线解决“AI 如何拿到实时数据”的问题。
第二条线解决“固定计算逻辑如何复用”的问题。
基础环境选择
我选择 WSL2 + Ubuntu,是因为它比直接在 Windows 上跑 Python 金融环境更省心:
-Python 依赖安装更接近服务器环境。
-Shell 脚本、虚拟环境、进程管理更自然。
-Claude Code、Node.js、MCP 服务都适合在类 Unix 环境运行。
- 后续如果迁移到云服务器,改动较小。
基础依赖包括:
-Node.js 18+:运行 Claude Code。
-Python 3 + venv:隔离投研环境。
-akshare:获取 A 股、宏观等数据。
-yfinance:获取美股、港股和部分行情财务数据。
-mcp:实现 MCP 数据服务。
发布版不展开每条安装命令。实际搭建时,建议先确认本机 WSL 可安装的 Ubuntu 版本,再按自己的网络环境配置依赖源。
MCP数据服务:让AI能调用数据
MCP 的价值在于,它把“数据工具”包装成 AI 可以调用的标准工具。
我在 `data_server.py` 中定义了 13 个工具,覆盖个人投研中最常用的数据:
| 工具 | 作用 || `get_stock_quote` | 获取股票实时行情 || `get_price_history` | 获取历史价格 || `get_financial_ratios` | 获取核心财务比率 || `get_income_statement` | 获取利润表 || `get_balance_sheet` | 获取资产负债表 || `get_cashflow_statement` | 获取现金流量表 || `get_valuation_history` | 获取 A 股 PE/PB 历史分位 || `get_company_info` | 获取公司基本信息 || `get_macro_data` | 获取中国宏观数据 || `get_sector_comparison` | 获取行业对比信息 || `get_technical_indicators` | 计算 RSI、MACD、布林带、KDJ || `get_a_share_financials` | 获取 A 股专项财务指标 || `get_shareholder_info` | 获取 A 股前十大股东 |
例如,一个 MCP 工具的结构大致是这样:
@mcp.tool()def get_stock_quote(symbol: str) -> str:"""获取股票实时行情。symbol: A股6位代码、港股如00700.HK、美股如AAPL"""ticker = to_yf_ticker(symbol)t = yf.Ticker(ticker)info = t.fast_inforeturn json.dumps({"symbol": symbol,"price": float(info.last_price),"market_cap": info.market_cap,"source": "yfinance"}, ensure_ascii=False, indent=2)
项目级 MCP 配置放在 `.mcp.json`:
{"mcpServers": {"investment-data": {"command": "${HOME}/investment-system/venv/bin/python3","args": ["${HOME}/investment-system/mcp-servers/data_server.py"]}}}
这样在 Claude Code 中,就可以让 AI 调用 `investment-data` 里的工具,而不是只靠模型记忆回答。
量化引擎:把重复计算固定下来
AI 擅长解释、总结和生成报告,但固定计算逻辑不应该每次都让 AI 临场发挥。
所以我把常用计算拆成几个 Python 引擎:
- `risk_engine.py`:单股风险、组合集中度、最大回撤。
- `screener.py`:多因子筛选。
- `valuation_tracker.py`:估值区间、PE 分位、FCF 收益率。
- `macro_signal.py`:宏观四象限、流动性评分。
- `backtest.py`:买入持有和估值择时回测。
- `optimizer.py`:仓位分配和再平衡建议。
统一入口是:
python3 engines/run.py selftestpython3 engines/run.py risk --symbol 600519python3 engines/run.py valuation --symbol 600519python3 engines/run.py macropython3 engines/run.py opt --symbols 600519,000333,600036
这里的股票代码只是接口示例,不代表任何投资建议。
引擎的意义是:
数据由 MCP 获取,计算由 Python 固化,结论由 AI 组织,人来做最终判断。
Skills:把投研方法论写成流程
光有数据还不够。真正影响研究质量的是分析流程。
我把常用投研框架整理成 18 个 Skills:
.claude/skills/├── stock-analysis.md├── value-investing.md├── macro-allocation.md├── buffett/│ ├── SKILL.md│ ├── moat.md│ ├── management.md│ ├── valuation.md│ └── circle-of-competence.md├── buffett-perspective/│ ├── SKILL.md│ ├── mr-market.md│ ├── safety-margin.md│ ├── punch-card.md│ └── mental-models.md└── druckenmiller/├── SKILL.md├── liquidity.md├── trend-following.md├── asymmetric-risk.md└── macro-indicators.md
这些 Skills 分成三类。
第一类是单股研究:
- 快速扫描:先判断是否值得深研。
- 价值投资分析:业务、护城河、财务、估值、风险。
- 巴菲特框架:能力圈、管理层、安全边际。
第二类是宏观配置:
- 宏观四象限。
- 流动性分析。
- A 股估值温度计。
- 资产配置权重。
第三类是决策复核:
- 市场先生。
- 20 次出手原则。
- 反向思维。
- 非对称赔率。
- 趋势与仓位管理。
每个 Skill 都尽量写清楚:
- 输入参数是什么。
- 可以调用哪些 MCP 工具。
- 可以调用哪些 Python 引擎。
- 哪些数据需要手工补充。
- 最终输出格式是什么。
这一步很重要。否则 AI 很容易输出一篇“看起来完整、实际上没有证据链”的分析。
一个典型使用流程
假设我要研究一家公司,理想流程是:
1. 先让 Claude Code 调用 `stock-analysis.md` 做快速扫描。
2. 如果通过,再进入 `value-investing.md` 做深度分析。
3. 用 MCP 获取行情、财务、现金流、估值分位、股东信息。
4. 用 Python 引擎跑风险评分、估值交叉验证和回测。
5. 用巴菲特框架检查能力圈、护城河、安全边际。
6. 用宏观框架判断当前仓位环境。
7. 最后输出一份结构化投研备忘录。
输出不应该只有“买入/卖出”,而应该包括:
- 核心判断。
- 关键数据。
- 主要假设。
- 反方证据。
- 风险清单。
- 重新评估触发条件。
- 数据缺口。
我更希望系统帮助我回答:
> 我为什么得出这个结论?
> 这个结论依赖哪些数据?
> 哪些事实出现后,我必须承认自己错了?
数据边界和风险边界
这个系统最需要警惕的不是“数据不够”,而是“看起来什么都有”。
当前 MCP 可以自动取到一部分数据,但有些关键内容仍然需要手工补充:
- 审计意见。
- 关联交易。
- 管理层诚信。
- 股权激励细节。
- 重要公告。
- 10 年国债收益率。
- DR007。
- 北向资金。
- DXY。
- VIX。
- 美联储资产负债表。
这些数据如果没有取到,就必须在报告里写“缺失”或“需手工补充”,不能让 AI 猜。
投资框架上也要避免极端表达:
- 不写“保证收益”。
- 不写“跟着买”。
- 不写“稳赚”。
- 不把单一指标当成买卖依据。
- 不把模型输出当成最终投资建议。
系统的定位是研究辅助,而不是投资顾问。
这套系统的价值
搭完之后,我觉得它最大的价值不是“更快得到答案”,而是让投研流程更稳定:
- 每次分析先走相同框架。
- 数据来源可追溯。
- 缺失数据会被标出来。
- 定性判断和定量计算分工清楚。
- 宏观、个股、估值、风险、仓位可以放在同一个工作台里。
它不会替你做判断,但能减少很多低质量重复劳动。
更重要的是,它迫使你把投资思考写成流程。
能写成流程的东西,才有机会被复盘、被改进、被自动化。
后续计划
后续我会继续完善几个方向:
- 增加更多数据源交叉验证。
- 把年报和公告解析纳入流程。
- 增加组合层面的回撤和相关性分析。
-给不同风险偏好设计不同仓位模板。
-把报告输出做成固定模板。
- 增加数据缓存,减少接口限流。
这个系统还只是个人投研工作台的 demo。
它不追求一步到位,核心是先把“研究过程”工程化。
结 语
AI 进入投研之后,真正的分水岭可能不是“谁会问问题”,而是谁能把数据、流程、判断和复盘放进一个稳定系统里。
如果只是让 AI 评价一家公司,它很容易说得头头是道。
如果让 AI 在固定数据源、固定框架、固定风险约束下工作,它才更像一个可靠的研究助手。
这也是我搭这个工作台的原因。
再次提示:本文是技术实践记录,不构成任何投资建议。
夜雨聆风