继上次测试完AI量化交易-TradingAgents项目之后,再次测试另一个AI对冲基金项目-ai-hedge-fund项目,
项目链接:ai-hedge-fund
AI量化交易-TradingAgents全流程实践可以看一下我前面一篇文章:
一. 项目概述
AI Hedge Fund 是一个概念验证型 AI 驱动对冲基金系统,通过模拟全球顶级投资大师的思维框架,对股票进行多维度分析,最终生成交易建议。
- 技术栈:
LangGraph + deepseek-v3.2 - 数据来源:(均需要申请key,免费,FD API不稳定,数据需要依赖于AlphaVantage补充)
Financial Datasets API(基本面、价格、内幕交易、新闻等) Alpha Vantage - 实验标的:
2026-1-1到2026-4-13英伟达(NVDA) - 分析师数量:
18 个 Agent(13 位名人投资风格 + 5 个专题分析师)
二. 实验结果

简单说一下实验结果内容:
- 交易决策: 有75%的置信度买入75股
- 理由:
看涨因素:fundamentals(75), warren(85), news(77), cathie(85), stanley(85) 看跌因素:sentiment(91), ben(85), rakesh(85) 结论:净看涨 (Net bullish) - 投资组合摘要:
Bullish (看涨因子数量): 8 Bearish (看跌因子数量): 6 Neutral (中性因子数量): 4
三. 系统架构与完整流程
1. 执行流程简要

① 用户输入
系统启动参数:
股票代码(如 NVDA) 分析 / 回测日期范围 初始资金
② 数据预取层
由 scripts/fetch_data.py 统一拉取多维度数据并落盘为 JSON:
日线价格数据 TTM & 年度财务比率 营收、净利等财务明细 公司基本信息 内幕交易记录 新闻舆情数据
③ 多 Agent 并行分析
通过 LangGraph 构建工作流,并行调度:
13 位名人风格投资分析师 5 位专题领域分析师
每个 Agent 独立读取数据、计算指标、调用 LLM 生成多空信号,最终汇总到共享状态。
④ 风险管理 Agent
汇总全 Agent 看多 / 看空 / 中性信号 计算波动率、集中度等风险指标 限制单标的仓位与总组合风险
⑤ 投资组合管理 Agent
对信号加权打分 结合当前持仓与现金 输出标准化交易指令
⑥ 最终输出
交易方向:BUY / SELL / HOLD 交易数量 决策置信度 推理摘要
2. 详细执行流程
① 用户输入
通过命令行启动,指定分析标的与时间范围:
python src/main.py --ticker NVDA --start-date 2024-01-01 --end-date 2026-04-13系统初始化一个空白投资组合(全现金仓位):
portfolio={
"cash":100000.0,# 初始资金 $10 万
"margin_requirement":0.0,
"positions":{
"NVDA":{"long":0,"short":0,"long_cost_basis":0.0,...}
},
"realized_gains":{"NVDA":{"long":0.0,"short":0.0}}
}② 数据预取层(scripts/fetch_data.py)
需要注意的是:原项目中是没有这部分代码,因api非常不稳定,改为预先从Financial Datasets API以及Alpha Vantage API拉取数据保存到本地,再从本地分析数据,防止拉去失败反复拉去。
在分析开始前,系统通过API 拉取所有所需数据并缓存到本地 data/NVDA/ 目录:
python -m scripts.fetch_data --tickers NVDA --start-date 2024-01-01 --end-date 2026-04-13实际拉取的数据文件与内容样例:
financial_metrics_ttm.json(最新一条,截至 2026-01-25):
{
"ticker":"NVDA",
"market_cap":4560381000000.0,//市值$4.56万亿
"price_to_earnings_ratio":37.982,//P/E38x
"price_to_sales_ratio":21.119,//P/S21x
"free_cash_flow_yield":0.0212,//FCFyield2.12%
"gross_margin":0.711,//毛利率71.1%
"operating_margin":0.6562,//营业利润率65.6%
"net_margin":0.556,//净利率55.6%
"return_on_equity":1.044,//ROE104.4%
"return_on_invested_capital":1.197,//ROIC119.7%
"debt_to_equity":0.315,//D/E极低
"current_ratio":3.905,//流动比率3.9
"revenue_growth":0.1539,//营收增速15.4%
"earnings_growth":0.2104,//盈利增速21.0%
"interest_coverage":547.1//利息保障倍数547x
}line_items_ttm.json(财务科目明细,截至 2026-01-31):
{
"ticker":"NVDA",
"revenue":215938000000,//营收$2159亿
"net_income":120067000000,//净利润$1201亿
"operating_income":130387000000,//营业利润$1304亿
"free_cash_flow":96676000000,//自由现金流$967亿
"research_and_development":18497000000,//R&D投入$185亿
"total_assets":206803000000,//总资产$2068亿
"total_debt":8840000000,//总负债(债务)$88亿
"shareholders_equity":157293000000,//股东权益$1573亿
"current_assets":125605000000,//流动资产$1256亿
"current_liabilities":32163000000,//流动负债$322亿
"outstanding_shares":24432000000//流通股244亿股
}insider_trades.json(内幕交易,共记录 1000 条+):
//样例:大量历史减持记录(SentimentAgent统计后:907次卖出vs93次买入)
//但近期(PhilFisher引用):48次买入vs2次卖出
[
{"ticker":"NVDA","transaction_type":"S-Sale","shares":150000,...},
{"ticker":"NVDA","transaction_type":"P-Purchase","shares":60000,...},
...
]company_news.json(本次抓取到 5 篇新闻):
//LLM分类结果:4篇看多,0篇看空,1篇中性→综合置信度77.38%
[
{"title":"NVIDIA Reports Record Revenue...","sentiment":"bullish"},
{"title":"AI Chip Demand Continues to Surge...","sentiment":"bullish"},
...
]③ 工作流引擎(LangGraph StateGraph)
数据就绪后,src/main.py 调用 create_workflow() 构建有向无环图并启动推理:
workflow=create_workflow(selected_analysts=None)# None = 使用全部 18 个 Agent
agent=workflow.compile()
final_state=agent.invoke({
"messages":[HumanMessage("Make trading decisions based on the provided data.")],
"data":{
"tickers":["NVDA"],
"portfolio":portfolio,
"start_date":"2024-01-01",
"end_date":"2026-04-13",
"analyst_signals":{},# 各 Agent 的信号将写入此处
},
"metadata":{"model_name":"deepseek-v3-2","model_provider":"..."}
})工作流拓扑(所有分析师 Agent 与 start_node 并行连接,汇入 risk_management_agent):
start_node
│
├──►fundamentals_analyst_agent→BULLISH75%
├──►growth_analyst_agent→NEUTRAL5%
├──►sentiment_analyst_agent→BEARISH90.7%
├──►technical_analyst_agent→NEUTRAL0%
├──►warren_buffett_agent→BULLISH85%
├──►nassim_taleb_agent→BEARISH20%
├──►charlie_munger_agent→BULLISH0%⚠️异常
├──►news_sentiment_agent→BULLISH77.4%
├──►mohnish_pabrai_agent→BEARISH75%
├──►ben_graham_agent→BEARISH85%
├──►aswath_damodaran_agent→NEUTRAL50%
├──►bill_ackman_agent→BEARISH75%
├──►michael_burry_agent→NEUTRAL30%
├──►phil_fisher_agent→BULLISH75.5%
├──►cathie_wood_agent→BULLISH85%
├──►rakesh_jhunjhunwala_agent→BEARISH85%
├──►peter_lynch_agent→BULLISH75%
└──►stanley_druckenmiller_agent→BULLISH85%
│(18个Agent全部完成后汇入)
▼
risk_management_agent
│
▼
portfolio_manager──►END说明:本系统的 18 个 Agent 分为两种完全不同的执行机制,下面各举一例:
类型一:纯规则计算型 Agent(不调用 LLM)
代表:Fundamentals Analyst、Growth Analyst、Sentiment Analyst、Technical Analyst、Valuation Analyst、Risk Manager
这类 Agent 通过硬编码阈值和数学公式对财务数据打分,全程不调用任何 LLM,结果完全确定性可复现。
以 Fundamentals Analyst(src/agents/fundamentals.py)为例:
# Step 1: 读取 NVDA TTM 财务指标(API / 本地缓存)
metrics=get_financial_metrics("NVDA",end_date="2026-04-13",period="ttm")[0]
# Step 2: 对 4 个维度逐一打分(纯阈值比较,无 LLM)
# ① 盈利能力:ROE=104.4% > 15% ✓,净利率=55.6% > 20% ✓,营业利润率=65.6% > 15% ✓
# → 3/3 项达标 → "bullish"
# ② 成长性:营收增速=15.4% > 10% ✓,盈利增速=21.0% > 10% ✓
# → 2/2 项达标 → "bullish"
# ③ 财务健康:流动比率=3.91 > 1.5 ✓,D/E=0.32 < 0.5 ✓
# → 2/2 项达标 → "bullish"
# ④ 估值比率:P/E=38 > 25,P/B=29 > 3,P/S=21 > 5(三项全部超阈值)
# → 3/3 项超标 → "bearish"
# Step 3: 统计,3 bullish vs 1 bearish → 整体 BULLISH,置信度 = 3/4 = 75%
overall_signal="bullish"
confidence=75.0
# Step 4: 写入共享状态(不经过 LLM,直接写结果)
state["data"]["analyst_signals"]["fundamentals_analyst_agent"]={
"NVDA":{"signal":"bullish","confidence":75.0,"reasoning":{
"profitability_signal":{"signal":"bullish","details":"ROE: 104.40%, Net Margin: 55.60%, Op Margin: 65.62%"},
"growth_signal":{"signal":"bullish","details":"Revenue Growth: 15.39%, Earnings Growth: 21.04%"},
"financial_health_signal":{"signal":"bullish","details":"Current Ratio: 3.90, D/E: 0.32"},
"price_ratios_signal":{"signal":"bearish","details":"P/E: 37.98, P/B: 28.99, P/S: 21.12"},
}}
}实际终端输出:
| Fundamentals Analyst |BULLISH| 75.0% |ROE:104.40%,NetMargin:55.60%,OpMargin:65.62%
||||RevenueGrowth:15.39%,EarningsGrowth:21.04%
||||CurrentRatio:3.90,D/E:0.32
||||P/E:37.98,P/B:28.99,P/S:21.12(bearish)|类型二:LLM 驱动型 Agent(调用 LLM 生成推理)
代表:Warren Buffett、Ben Graham、Bill Ackman、Cathie Wood、Charlie Munger、Michael Burry、Mohnish Pabrai、Nassim Taleb、Peter Lynch、Phil Fisher、Rakesh Jhunjhunwala、Stanley Druckenmiller、Aswath Damodaran、News Sentiment、Portfolio Manager
这类 Agent 先用规则代码计算出结构化财务事实(Facts),再将 Facts 注入到角色扮演 Prompt 中,调用 LLM生成信号与推理文本,输出结果具有不确定性(每次运行可能不同)。
以 Warren Buffett(src/agents/warren_buffett.py)为例:
# Step 1: 规则代码预先计算护城河、内在价值、安全边际等结构化指标
facts={
"moat":"71.1% gross margin, 65.6% operating margin, ROIC 119.7%",
"intrinsic_value":2130000000000,# 用 DCF / 业主收益法估算
"market_cap":4560381000000,
"margin_of_safety":-0.53,# (内在价值 - 市值) / 市值 = -53%
"debt_to_equity":0.315,
"revenue_growth":0.154,
...
}
# Step 2: 构造角色扮演 Prompt,注入 Buffett 投资哲学与决策规则
template=ChatPromptTemplate.from_messages([
("system",
"You are Warren Buffett. Decide bullish, bearish, or neutral...\n"
"Signal rules:\n"
"- Bullish: strong business AND margin_of_safety > 0.\n"# 安全边际必须为正
"- Bearish: poor business OR clearly overvalued.\n"
"- Neutral: good business but margin_of_safety <= 0...\n"
"Keep reasoning under 120 characters. Return JSON only."
),
("human","Ticker: {ticker}\nFacts:\n{facts}\n\nReturn: signal / confidence / reasoning")
])
# Step 3: 将 Facts 填入模板,调用 LLM
prompt=template.invoke({"ticker":"NVDA","facts":json.dumps(facts)})
result=call_llm(prompt,pydantic_model=WarrenBuffettSignal,...)
# → LLM 接收到:"margin_of_safety=-53%,但 ROE 和利润率极强"
# → 输出:signal="bullish", confidence=85, reasoning="Exceptional ROE & margins show strong moat..."实际终端输出:
| Warren Buffett |BULLISH| 85% |ExceptionalROE&marginsshowstrongmoat,
||||conservativedebt,thoughvaluationunclear|Charlie Munger 本次出现 "Error in analysis, using default" 是因为 LLM 连续调用失败 3 次后触发了 create_default_response(),系统自动填入默认值(signal="bullish", confidence=0),因此该结果不可信,不计入有效信号。但最后统计仍然加入到统计了
④ 风险管理 Agent(src/agents/risk_manager.py)
所有 18 个 Agent 完成后,Risk Manager 汇总各方信号并确定仓位约束:
汇总结果(NVDA):
看多Agent:8个(Fundamentals75%、Warren85%、News77%、
PhilFisher75.5%、CathieWood85%、
PeterLynch75%、Stanley85%、Charlie0%)
看空Agent:6个(Sentiment90.7%、BenGraham85%、
Rakesh85%、MohnishPabrai75%、
BillAckman75%、NassimTaleb20%)
中性Agent:4个(Growth5%、Technical0%、Damodaran50%、Burry30%)
→净信号:看多(数量8>看空6)
→综合置信度:75%(信号存在明显分歧,不使用满仓)
→可用现金:$100,000
→当时NVDA股价:约$187/股
→最大仓位限制:$100,000×75%≈$14,025→约75股⑤ 投资组合管理 Agent(src/agents/portfolio_manager.py)
Portfolio Manager 接收 Risk Manager 的汇总结论,生成最终交易指令:
看多信号加权:fundamentals(75)+warren(85)+news(77)+cathie(85)+stanley(85)=407
看空信号加权:sentiment(91)+ben(85)+rakesh(85)=261
净看多权重407>净看空权重261→决策:BUY
仓位:75股×$187≈$14,025(占总资金约14%)⑥ 最终输出
TRADINGDECISION:[NVDA]
+------------+--------------------------------------------------------------+
| Action |BUY|+------------+--------------------------------------------------------------+
|Quantity| 75 |
+------------+--------------------------------------------------------------+
| Confidence |75.0%|+------------+--------------------------------------------------------------+
|Reasoning| Bullish: fundamentals(75), warren(85), news(77), cathie(85), |
||stanley(85).Bearish:sentiment(91),ben(85),rakesh(85).||| Net bullish. |
+------------+--------------------------------------------------------------+
PORTFOLIOSUMMARY:
+--------+--------+----------+--------------+---------+---------+---------+
| Ticker |Action| Quantity |Confidence| Bullish |Bearish| Neutral |
+========+========+==========+==============+=========+=========+=========+
| NVDA |BUY| 75 |75.0%| 8 |6| 4 |
+--------+--------+----------+--------------+---------+---------+---------+四. 19 位分析师 Agent 详解
五. 数据层说明
data/NVDA/
├──prices.json#日线OHLCV(2023~2026年,每日收盘)
├──financial_metrics_ttm.json#TTM财务比率时序(12期)
├──financial_metrics_annual.json#年度财务比率
├──line_items_ttm.json#TTM财务科目(营收、净利、FCF等)
├──company_facts.json#公司基本信息(行业、员工等)
├──insider_trades.json#内幕交易记录(1000条+)
└──company_news.json#公司新闻(5篇可用)主要财务数据说明
六、NVDA 分析结果(实际运行输出)
1. 为何决策BUY?
| 类别 |Agent| 置信度 |方向权重||------|-------|-------|--------|
| 看多 |FundamentalsAnalyst| 75% |+75||看多| Warren Buffett |85%| +85 |
| 看多 |NewsSentiment| 77% |+77||看多| Cathie Wood |85%| +85 |
| 看多 |StanleyDruckenmiller| 85% |+85||看空| Sentiment Analyst |91%| -91 |
| 看空 |BenGraham| 85% |-85||看空| Rakesh Jhunjhunwala |85%| -85 |
>净结果:看多信号总权重>看空信号总权重→BUY决策2. 为何买入 75 股?
1) 第一步:Risk Manager 计算最大可买股数(纯规则,无 LLM)
①获取NVDA历史价格数据(prices.json,共249条日线)
最新收盘价(prices_df["close"].iloc[-1])= $188.63(2026-04-10)
②用最近60个交易日的日收益率,计算年化波动率
日波动率=0.0238(stdofdailyreturns)
年化波动率=0.0238×√252=37.7%
③根据波动率查函数calculate_volatility_adjusted_limit(),得仓位上限比例
37.7%落在"高波动率(30%~50%)"区间:
vol_multiplier=0.75-(0.377-0.30)×0.5=0.75-0.039=0.711
vol_adjusted_limit_pct=20%(基准)×0.711=14.2%
④计算最大仓位金额
total_portfolio_value=$100,000(初始全现金)
position_limit=$100,000×14.2%=$14,226
remaining_limit=$14,226-$0(当前无持仓)=$14,226
max_position_size=min($14,226,$100,000可用现金)=$14,226
⑤换算为最大可买股数
max_shares=int($14,226÷$188.63)=int(75.42)=75股
→RiskManager结论:NVDA最多可买75股,传给PortfolioManager2) 第二步:Portfolio Manager(LLM)在上限内决定实际数量
Risk Manager 的计算结果被转换为如下格式发送给 LLM:
//LLM收到的输入
Signals:{
"NVDA":{
"fundamentals_analyst":{"sig":"bullish","conf":75},
"warren_buffett_agent":{"sig":"bullish","conf":85},
"sentiment_analyst":{"sig":"bearish","conf":91},
"ben_graham_agent":{"sig":"bearish","conf":85},
...
}
}
Allowed:{
"NVDA":{"buy":75,"short":75,"hold":0}
//↑RiskManager算出的硬上限,LLM只能选≤75
}
LLM 看到信号整体净看多,直接选择了上限75 股满额买入,输出置信度 75%。
说明:75 股是 Risk Manager 的硬上限,LLM 选择了用满额度。置信度 75% 是 Portfolio Manager 对自己决策的主观评分,与股数计算无关。
重要:根据输出的结果,可以利用LLM做进一步的分析,比如对立面的分析-Ben Graham(看空 85%) VS Peter Lynch(看多 75%); 再比如核心估值矛盾-传统 DCF 框架(Ben Graham、Bill Ackman) vs AI 平台溢价(Cathie Wood、Druckenmiller)等等,仔细分析后,还是可以获取一些有用的信息,此处就不详细进行叙述了
以上,TradingAgents和ai-hedge-fund均已经跑完,关于AI量化交易相关的方案调研会告一段落,整体上来看,LLM agent对于这两个项目中的意义更多是在于数据分析阶段,后续的决策依据/方案还略显单薄。
后续,本人会继续追踪最新的LLM/agent底层技术,以及在各个领域中的应用,
如果觉得有用,【赞同】+【关注】就是对我最大的鼓励,感谢。下期见。
夜雨聆风