还在用 yfinance 拼凑数据?OpenBB 4.0+ 全新架构,一个命令搞定股票、宏观、加密货币……所有你需要的数据源都在这里。
什么是 OpenBB?
OpenBB 是开源金融数据平台,v4.0 之后彻底重构为 OpenBB Platform。它把几十个数据源(Yahoo、Alpha Vantage、FRED、Binance、Polygon……)统一成一套 Python API。无论你是量化交易员、数据分析师还是财经博主,都能用几行代码获取结构化、干净、可直接分析的数据。
核心特点:
✅ 统一接口:不同数据源用相同写法调用
✅ 原生 Pandas:返回 DataFrame,直接画图、建模
✅ 异步支持:并发请求,速度飞快
✅ 可扩展:可自行接入新数据源
安装与快速开始
如果希望使用所有数据源(含付费源),可以安装完整版:
⚠️ 注意:v4+ 不再支持旧的 openbb_terminal 命令行界面,改用 Python 原生方式。
第一个例子:获取苹果公司股价
from openbb import obb# 获取 AAPL 最近 30 天的日线数据df = obb.equity.price.historical( symbol="AAPL", start_date="2024-01-01", end_date="2024-12-31", interval="day", provider="yahoo" # 可选,默认自动选择)print(df.head())
输出:
open high low close volumedate 2024-01-02 185.5700 186.60 184.20 185.64 575352002024-01-03 185.8600 186.13 183.44 184.25 56225900...
流程图:OpenBB 数据工作流
如果不渲染,可以用文字代替:用户调用 -> 路由层 -> 数据源 -> 统一格式 -> 返回数据。
实战:多资产组合数据获取
import pandas as pdfrom openbb import obb# 定义资产组合assets = ["AAPL", "MSFT", "GOOGL", "AMZN", "NVDA"]# 批量获取(利用异步特性)dfs = []for sym in assets: data = obb.equity.price.historical( symbol=sym, start_date="2024-06-01", end_date="2024-06-30", interval="day" ) # 只保留收盘价,重命名列 dfs.append(data[["close"]].rename(columns={"close": sym}))# 合并到一个 DataFrame(日期对齐)portfolio = pd.concat(dfs, axis=1)print(portfolio.head())
输出示例:
AAPL MSFT GOOGL AMZN NVDAdate 2024-06-03 190.20 416.20 172.50 180.00 120.502024-06-04 191.50 418.00 173.20 181.20 122.30...
丰富多彩的数据类型
OpenBB 不仅支持股票,还可以轻松获取:
1. 宏观经济数据(FRED)
# 获取美国失业率unemp = obb.economy.series( symbol="UNRATE", # FRED 代码 start_date="2020-01-01", provider="fred")print(unemp.tail())
2. 加密货币(Binance)
# 比特币日线btc = obb.crypto.price.historical( symbol="BTC-USD", start_date="2024-01-01", provider="binance")print(btc.head())
3. 新闻与情绪(需要配置 API Key)
# 获取 AAPL 的财经新闻news = obb.news.equity( symbol="AAPL", limit=10, provider="benzinga" # 需申请 API Key)print(news[["title", "published_at"]])
进阶:结合可视化与回测
import matplotlib.pyplot as pltfrom openbb import obb# 获取 SPY 数据spy = obb.equity.price.historical( symbol="SPY", start_date="2023-01-01", interval="day")# 计算 20 日均线spy["SMA20"] = spy["close"].rolling(20).mean()# 绘图plt.figure(figsize=(12,6))plt.plot(spy.index, spy["close"], label="SPY Close", alpha=0.7)plt.plot(spy.index, spy["SMA20"], label="20 SMA", color="orange")plt.legend()plt.title("S&P 500 ETF with 20-day moving average")plt.grid(True)plt.show()
如果想做简单回测:
# 买入信号:收盘价上穿 20 日均线spy["Signal"] = 0spy.loc[spy["close"] > spy["SMA20"], "Signal"] = 1spy["Position"] = spy["Signal"].diff()# 策略收益(假设无交易成本)spy["Return"] = spy["close"].pct_change()spy["Strategy"] = spy["Return"] * spy["Signal"].shift(1)print(f"策略累计收益: {(spy['Strategy']+1).prod():.3f}")
总结
OpenBB v4.0+ 重新定义了我们与金融数据的交互方式。它不仅是“免费替代品”,更是一个模块化、可扩展的数据生态。无论你是在做量化研究、构建仪表盘,还是准备投资分析报告,OpenBB 都能让你把时间花在分析上,而不是数据清洗上。
下一步行动:安装 openbb,运行上面任何一个例子,然后尝试把 AAPL 换成你喜欢的任何代码(股票、ETF、商品、货币……)。
编辑:余文彬
审校:余雨馨