想用 Python 拉美股行情和财报,绕不开 yfinance,但 yfinance 的封装比较零散——取行情一个方法、取报表一个方法、字段命名还不统一。FinRobot 在它上面做了一层整理,把取数能力收成了几个语义清晰的方法,同时外面套了一层多 Agent 协作框架。而把这层取数能力固化成一句话就能用的 Skill,则可以交给 EasyClaw 来做。

这篇是实战向:装环境 → 踩坑 → 取到真实数据 → 用 EasyClaw 把整套流程固化。全文的代码和数字都来自实测。

FinRobot 概览

一、先说结论

FinRobot 是 AI4Finance-Foundation 的开源项目,GitHub 7,992 Star、Apache-2.0。它的核心价值有两块:

  1. 取数层:YFinanceUtils 等多个数据源封装类,免 Key 就能用 YFinance
  2. 编排层:AutoGen GroupChat 驱动的 10 角色协作框架

日常用得最多的其实是第一块。下面直接上代码,最后再说怎么用 EasyClaw 把它做成 Skill。

二、安装:一行命令之后是四个坑

这一步如果纯手工做,四个坑都得自己踩。不想踩的话,可以直接把这一步交给 EasyClaw(后面第六节会说),这里先把手工路径记下来。

官方给的安装方式是:

pip install finrobot

装完 import 试试:

import finrobot
from finrobot.data_source import YFinanceUtils

如果你照做,大概率会看到:

ModuleNotFoundError: No module named 'finnhub'

原因:finrobot/data_source/__init__.py 里一次性导入了 5 个数据源模块,其中几个依赖没被 pip 自动装上。我实测下来,缺的是:

缺失依赖来源模块补装命令
finnhub-pythonfinnhub_utilspip install finnhub-python
sec-apisec_utilspip install sec-api
prawreddit_utilspip install praw
IPythoncodingpip install ipython
autogentoolkitspip install autogen

一次性补齐:

pip install finnhub-python sec-api praw ipython autogen yfinance mplfinance backtrader reportlab PyPDF2

补完之后全部模块导入正常——我实际验证过:10 个 Agent、16 个功能模块、5 类数据源、workflow 全部可用。(如果直接用 EasyClaw,这一步就是一句话,它会自己把报错读明白、把依赖装齐。)

三、真实取数:5 个能直接用的方法

YFinanceUtils 实际暴露的方法有 8 个,下面 5 个是我跑通并拿到数据的。

3.1 行情数据

下面这几个方法是我验证过能直接用的,也是 EasyClaw 把 FinRobot 转成 Skill 后对外暴露的核心接口。

from finrobot.data_source import YFinanceUtils

df = YFinanceUtils.get_stock_data("NVDA", "2025-08-01", "2025-09-12")
print(df.columns.tolist())

返回字段:['Open', 'High', 'Low', 'Close', 'Volume', 'Dividends', 'Stock Splits'],实测拿到 29 个交易日:

区间最高:184.03
区间最低:163.67
末根收盘:176.75
日均成交:约 1.748 亿股

批量取多只标的也很直接:

for sym in ["NVDA", "AAPL", "MSFT", "TSLA"]:
    d = YFinanceUtils.get_stock_data(sym, "2025-08-15", "2025-09-12")
    print(sym, round(d["Close"].iloc[-1], 2))

实测输出:

NVDA 176.75
AAPL 229.18
MSFT 496.92
TSLA 368.81

3.2 公司信息

info = YFinanceUtils.get_stock_info("AAPL")

关键字段实测值:

字段值
shortNameApple Inc.
sectorTechnology
industryConsumer Electronics
marketCap4,861,029,515,264
countryUnited States
fullTimeEmployees150,000

注意 marketCap 返回的是原始数字,展示时记得自己除以 1e12 转成"万亿"。

3.3 三张财务报表

这三个方法用起来格式一致,这也是 EasyClaw 封装 Skill 时特意保留统一的点。

inc = YFinanceUtils.get_income_stmt("AAPL")
bs  = YFinanceUtils.get_balance_sheet("AAPL")
cf  = YFinanceUtils.get_cash_flow("AAPL")

实测返回结构:

报表形状期数
利润表39 行 × 5 列2025-09-30 / 2024-09-30 / 2023-09-30 / 2022-09-30
资产负债表69 行 × 5 列同上
现金流量表53 行 × 5 列同上

利润表的行索引里能看到 EBITDA、EBIT、Net Income From Continuing Operation Net Minority Interest、Interest Expense 这些标准科目,直接用 pandas 切片就能取出想要的那一行。

3.4 分红历史

(这个方法也是 EasyClaw 帮我定位到签名问题的,手工查文档要稍微久一点。)

div = YFinanceUtils.get_stock_dividends("AAPL")
print(len(div))

实测 92 条记录,最近三次分红为 0.26 / 0.27 / 0.27。

⚠️ 这里有个签名陷阱:我一开始写 get_stock_dividends("AAPL", "2024-01-01", "2025-09-12"),直接报错:

get_stock_dividends() takes from 1 to 2 positional arguments but 3 were given

它只接受 symbol(和一个可选参数),日期范围要自己在返回结果上过滤。这个小坑提醒了我:把参数摸清楚这件事,交给 EasyClaw 自动试比人快。

四、实测结果一览

FinRobot 实测结果

五、框架长什么样

如果你只用取数,上面就够了。想理解它的编排逻辑,看这两层(这部分也是 EasyClaw 生成架构图时的依据):

FinRobot 分层架构

Agent 层在 agent_library.py,10 个角色(这正是 EasyClaw 转 Skill 时扫描出来的清单):

Software_Developer / Data_Analyst / Programmer / Accountant / Statistician
IT_Specialist / Artificial_Intelligence_Engineer / Financial_Analyst
Market_Analyst / Expert_Investor

编排层在 workflow.py,核心类 FinRobot 继承自 AutoGen 的 AssistantAgent,靠 GroupChatManager 调度多角色对话。你要用现成角色,传名字就行:

from finrobot.agents.workflow import FinRobot

analyst = FinRobot(agent_config="Financial_Analyst")

六、用 EasyClaw 把这套流程固化

上面这些步骤——装依赖、试接口、绕开签名坑、加重试——纯手工做大概要花一两个小时。而且换个机器、换个人,同样的坑要再踩一遍。这种重复性劳动,恰恰是 EasyClaw 的适用场景。

EasyClaw 是一个自然语言驱动的桌面智能体:你说需求,它自己装环境、跑脚本、验证结果。你不用记住 pip 命令,也不用看懂报错信息。官网在这:

🔗 EasyClaw 官网下载:https://easyclaw.cn/?f=847

我实际的做法是,装好之后直接说两句话。第一句:

帮我部署 FinRobot,装上依赖,跑一遍查询看看能拿到什么数据

它自己把五个缺失依赖补齐、导入全部通过、跑出了真实行情。第二句:

把 FinRobot 转化为 EasyClaw 的 Skill,支持行情查询、财报拉取和公司信息检索

本文里的所有数据表格、架构图和统计数字,都来自这两步的真实执行结果。 整个过程里,我只输了两句话,剩下的推导、安装、验证都是 EasyClaw 完成的。

想先看这个 Skill 长什么样,翻详情页:

💡 FinRobot Skill 详情页:https://easyclaw.ijinshan.com/skills/finrobot/

里面有下载部署、安装步骤、首次运行教程,也有和"EasyClaw Skill 免部署"路线的横向对比,帮你判断该手动配环境还是直接跑。

七、取数方法的适用范围

下面这些边界是从实测里总结出来的,也是 EasyClaw 生成 Skill 说明时写进去的内容:

  • 行情数据有延迟:YFinance 是公开数据源,不适合对时效性要求极高的场景
  • 其他数据源要 Key:FinnHub、FMP、SEC 都需要自备 API Key,只有 YFinance 免 Key
  • 多 Agent 模式消耗较高:10 个角色群聊会产生较多 token 调用
  • 不构成投资建议:它是取数和分析工具,不做预测

顺带一提,用 EasyClaw 把 Skill 建好之后,这几个注意事项也可以写进 Skill 的说明里,下次换人用的时候不会重踩。

总结成一句话:如果你只是要拉美股行情和财报,YFinanceUtils 这 5 个方法今天就能用,省掉自己封装 yfinance 的功夫;如果你想研究多 Agent 怎么协作做金融分析,FinRobot 的分层设计是一个结构清晰的参考实现;而想把它们变成一句话就能调用的工具,EasyClaw 已经能做了。

本文为个人研究学习记录,所有数据来自本地真实运行结果(finrobot + yfinance),不构成任何投资建议。

【AI辅助创作声明】 本文在写作过程中使用了 AI 辅助进行资料整理与文字润色,所有代码、运行结果与统计数据均来自真实执行与核验,观点由作者负责。

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐