yahoo-finance
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseYahoo Finance — API Directa (sin yfinance)
Yahoo Finance — 直接API(无需yfinance)
API no oficial de Yahoo Finance. Accedé a datos de acciones, ETFs, crypto, forex, bonos, índices, opciones, fundamentos y noticias mediante requests HTTP directos sin usar ni ningún wrapper.
yfinanceBase URL:
Alternativa:
https://query1.finance.yahoo.comhttps://query2.finance.yahoo.com这是Yahoo Finance的非官方API。无需使用或任何包装器,直接通过HTTP请求获取股票、ETF、加密货币、外汇、债券、指数、期权、基本面数据和新闻。
yfinance基础URL:
备用地址:
https://query1.finance.yahoo.comhttps://query2.finance.yahoo.com⚠️ Importante
⚠️ 重要提示
- Yahoo no tiene API pública oficial desde 2017. Estos endpoints son no oficiales y pueden cambiar sin aviso.
- Algunos endpoints requieren autenticación via cookie + crumb (abajo se explica).
- El endpoint funciona sin autenticación (solo User-Agent de navegador).
v8/finance/chart - Siempre implementar rate limiting y manejo de errores.
- Yahoo自2017年起就没有官方公开API。这些是非官方端点,可能会无预警变更。
- 部分端点需要通过cookie + crumb进行认证(下文会说明)。
- 端点无需认证(仅需浏览器的User-Agent)。
v8/finance/chart - 务必实现速率限制和错误处理。
Documentación completa
完整文档
Para referencia exhaustiva de todos los endpoints, campos, JSON structures, códigos de error, tickers internacionales, estrategias de rate limiting y ejemplos detallados, ver:
📖 references/API_REFERENCE.md
Ese documento incluye:
- Los 33 módulos de con cada campo documentado
quoteSummary - JSON responses completas de cada endpoint
- Tickers internacionales (para Argentina,
.BApara Brasil, etc.).SA - WebSocket streaming
- Screener, lookup, trending
- Estrategias de rate limiting con exponential backoff y rotación de User-Agent
如需了解所有端点、字段、JSON结构、错误代码、国际代码、速率限制策略和详细示例,请查看:
📖 references/API_REFERENCE.md
该文档包含:
- 的33个模块及每个字段的说明
quoteSummary - 每个端点的完整JSON响应
- 国际代码(阿根廷用,巴西用
.BA等).SA - WebSocket流
- 筛选器、查询、趋势
- 带指数退避和User-Agent轮换的速率限制策略
Autenticación: Cookie + Crumb
认证:Cookie + Crumb
Varios endpoints requieren un crumb (token CSRF) que se obtiene con cookies de sesión.
python
import requests
BASE = "https://query1.finance.yahoo.com"
HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
def yahoo_session():
"""Retorna requests.Session con cookie A3 y crumb."""
s = requests.Session()
s.headers.update(HEADERS)
s.get("https://fc.yahoo.com", timeout=10)
crumb = s.get(f"{BASE}/v1/test/getcrumb", timeout=10).text.strip()
s.params = {"crumb": crumb}
return s多个端点需要crumb(CSRF令牌),可通过会话cookie获取。
python
import requests
BASE = "https://query1.finance.yahoo.com"
HEADERS = {
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36"
}
def yahoo_session():
"""返回包含A3 cookie和crumb的requests.Session对象。"""
s = requests.Session()
s.headers.update(HEADERS)
s.get("https://fc.yahoo.com", timeout=10)
crumb = s.get(f"{BASE}/v1/test/getcrumb", timeout=10).text.strip()
s.params = {"crumb": crumb}
return sUso:
使用示例:
s = yahoo_session()
s = yahoo_session()
undefinedundefinedEndpoints según autenticación
按认证要求分类的端点
| Sin auth (solo User-Agent) | Requieren crumb |
|---|---|
| |
| |
| |
| |
| 无需认证(仅需User-Agent) | 需要crumb |
|---|---|
| |
| |
| |
| |
Endpoints — Resumen rápido
端点快速概览
1. Históricos OHLCV — v8/finance/chart
v8/finance/chart1. OHLCV历史数据 — v8/finance/chart
v8/finance/chart| Parámetro | Ejemplos |
|---|---|
| |
| |
| |
python
import requests
headers = {"User-Agent": "Mozilla/5.0 (...) Chrome/120.0.0.0 Safari/537.36"}
r = requests.get("https://query1.finance.yahoo.com/v8/finance/chart/AAPL",
params={"range": "1y", "interval": "1d", "events": "div,splits"},
headers=headers)
data = r.json()["chart"]["result"][0]| 参数 | 示例 |
|---|---|
| |
| |
| |
python
import requests
headers = {"User-Agent": "Mozilla/5.0 (...) Chrome/120.0.0.0 Safari/537.36"}
r = requests.get("https://query1.finance.yahoo.com/v8/finance/chart/AAPL",
params={"range": "1y", "interval": "1d", "events": "div,splits"},
headers=headers)
data = r.json()["chart"]["result"][0]data["timestamp"] -> fechas Unix
data["timestamp"] -> Unix时间戳格式的日期
data["indicators"]["quote"][0] -> open, high, low, close, volume
data["indicators"]["quote"][0] -> 开盘价、最高价、最低价、收盘价、成交量
data["indicators"]["adjclose"][0] -> precios ajustados
data["indicators"]["adjclose"][0] -> 调整后价格
data["events"] -> dividendos y splits
data["events"] -> 股息和拆股信息
undefinedundefined2. Quote — v7/finance/quote
v7/finance/quote2. 报价数据 — v7/finance/quote
v7/finance/quotepython
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL,MSFT,GOOGL")
quotes = r.json()["quoteResponse"]["result"]
for q in quotes:
print(q["symbol"], q["regularMarketPrice"], q["regularMarketChangePercent"])Campos: , , , , , , , (PRE/REGULAR/POST/CLOSED).
regularMarketPriceregularMarketChangePercentmarketCaptrailingPEfiftyTwoWeekHigh/LowdividendYieldvolumemarketStatepython
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL,MSFT,GOOGL")
quotes = r.json()["quoteResponse"]["result"]
for q in quotes:
print(q["symbol"], q["regularMarketPrice"], q["regularMarketChangePercent"])可用字段:(常规市场价格)、(常规市场涨跌幅)、(市值)、(滚动市盈率)、(52周最高/低价)、(股息率)、(成交量)、(市场状态:PRE/REGULAR/POST/CLOSED)。
regularMarketPriceregularMarketChangePercentmarketCaptrailingPEfiftyTwoWeekHigh/LowdividendYieldvolumemarketState3. Fundamentos — v10/finance/quoteSummary
v10/finance/quoteSummary3. 基本面数据 — v10/finance/quoteSummary
v10/finance/quoteSummarypython
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v10/finance/quoteSummary/AAPL",
params={"modules": "assetProfile,financialData,defaultKeyStatistics,incomeStatementHistory,balanceSheetHistory,cashflowStatementHistory,earnings,recommendationTrend"})
fundamentals = r.json()["quoteSummary"]["result"][0]
profile = fundamentals["assetProfile"] # sector, industry, employees, description
financials = fundamentals["financialData"] # EBITDA, revenue, margins, ROE, ROA
stats = fundamentals["defaultKeyStatistics"] # beta, shares, PE, PEG, short infoHay 33 módulos disponibles. Ver lista completa en API_REFERENCE.md sección 4.
python
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v10/finance/quoteSummary/AAPL",
params={"modules": "assetProfile,financialData,defaultKeyStatistics,incomeStatementHistory,balanceSheetHistory,cashflowStatementHistory,earnings,recommendationTrend"})
fundamentals = r.json()["quoteSummary"]["result"][0]
profile = fundamentals["assetProfile"] # 行业板块、细分行业、员工数量、公司描述
financials = fundamentals["financialData"] # EBITDA、营收、利润率、净资产收益率、资产收益率
stats = fundamentals["defaultKeyStatistics"] # β系数、股份数、市盈率、市盈增长比率、做空信息共有33个可用模块。完整列表请查看API_REFERENCE.md第4节。
4. Opciones — v7/finance/options
v7/finance/options4. 期权数据 — v7/finance/options
v7/finance/optionspython
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v7/finance/options/AAPL")
data = r.json()["optionChain"]["result"][0]
expirations = data["expirationDates"]
strikes = data["strikes"]
options = data["options"][0] # calls + putspython
s = yahoo_session()
r = s.get("https://query1.finance.yahoo.com/v7/finance/options/AAPL")
data = r.json()["optionChain"]["result"][0]
expirations = data["expirationDates"]
strikes = data["strikes"]
options = data["options"][0] # 认购期权+认沽期权5. Búsqueda + Noticias — v1/finance/search
v1/finance/search5. 搜索+新闻 — v1/finance/search
v1/finance/searchpython
r = requests.get("https://query1.finance.yahoo.com/v1/finance/search",
params={"q": "Apple", "quotesCount": 3, "newsCount": 5},
headers=HEADERS)
data = r.json()python
r = requests.get("https://query1.finance.yahoo.com/v1/finance/search",
params={"q": "Apple", "quotesCount": 3, "newsCount": 5},
headers=HEADERS)
data = r.json()data["quotes"] -> tickers encontrados
data["quotes"] -> 搜索到的代码
data["news"] -> noticias relacionadas
data["news"] -> 相关新闻
---
---Scripts
脚本
| Script | Descripción |
|---|---|
| fetch_all.py | Script integral: fetch de histórico + quote + fundamentals + opciones + search + recomendaciones. Genérico para cualquier ticker con argumentos CLI. |
| fetch_quote.py | Fetch rápido de quote + fundamentals por ticker. |
| download_historical.py | Descarga históricos OHLCV a CSV. |
| 脚本 | 描述 |
|---|---|
| fetch_all.py | 集成脚本:获取历史数据+报价+基本面数据+期权+搜索+相关推荐。支持通过CLI参数适配任意代码。 |
| fetch_quote.py | 快速获取指定代码的报价+基本面数据。 |
| download_historical.py | 将OHLCV历史数据下载为CSV文件。 |
fetch_all.py — El script principal
fetch_all.py — 主脚本
python scripts/fetch_all.py --ticker AAPL --all # Todo lo disponible
python scripts/fetch_all.py --ticker GGAL --all --range 5y --interval 1d # GGAL con 5 años
python scripts/fetch_all.py --ticker MSFT --chart --range max # Histórico completo
python scripts/fetch_all.py --ticker NVDA --quote --fundamentals # Quote + fundamentals
python scripts/fetch_all.py --ticker TSLA --all --all-modules # Todos los módulos (~33)
python scripts/fetch_all.py --ticker AAPL --options # Solo opciones
python scripts/fetch_all.py -t AAPL -o mi_data.json -q # Output a archivo, quietFlags principales:
- : fetch de todo (chart, quote, fundamentals, options, search, recommendations)
--all - : histórico OHLCV
--chart - : precio en tiempo real
--quote - : fundamentos (quoteSummary)
--fundamentals - : cadena de opciones
--options - : búsqueda y noticias
--search - /
--range: control del histórico--interval - /
--modules: módulos de quoteSummary--all-modules - : archivo JSON de salida
--output
python scripts/fetch_all.py --ticker AAPL --all # 获取所有可用数据
python scripts/fetch_all.py --ticker GGAL --all --range 5y --interval 1d # 获取GGAL的5年数据
python scripts/fetch_all.py --ticker MSFT --chart --range max # 获取完整历史数据
python scripts/fetch_all.py --ticker NVDA --quote --fundamentals # 获取报价+基本面数据
python scripts/fetch_all.py --ticker TSLA --all --all-modules # 获取所有模块(约33个)
python scripts/fetch_all.py --ticker AAPL --options # 仅获取期权数据
python scripts/fetch_all.py -t AAPL -o mi_data.json -q # 输出到文件,静默模式主要参数:
- : 获取全部数据(历史数据、报价、基本面、期权、搜索、相关推荐)
--all - : 获取OHLCV历史数据
--chart - : 获取实时价格
--quote - : 获取基本面数据(quoteSummary)
--fundamentals - : 获取期权链
--options - : 获取搜索结果和新闻
--search - /
--range: 控制历史数据的范围和间隔--interval - /
--modules: 指定quoteSummary的模块--all-modules - : 指定JSON输出文件
--output
Prueba real con GGAL (testeado)
GGAL真实测试(已验证)
>> Chart (1y, 1d)... OK 250 bars
>> Quote... OK Price: $50.33 (-1.62%)
>> Fundamentals... OK 12 módulos (core)
>> Options... OK 5 expiration dates, 17 calls, 19 puts
>> Search+News... OK 5 news items
Guardado en: ggal_temp.json (123 KB)>> 历史数据(1年,1天间隔)... 成功 250条数据
>> 报价... 成功 价格: $50.33 (-1.62%)
>> 基本面数据... 成功 12个核心模块
>> 期权... 成功 5个到期日,17份认购期权,19份认沽期权
>> 搜索+新闻... 成功 5条新闻
已保存至: ggal_temp.json (123 KB)Tickers internacionales
国际代码
Yahoo Finance usa sufijos para mercados fuera de EE.UU.:
| Mercado | Sufijo | Ejemplo |
|---|---|---|
| Argentina (BCBA) | | |
| Brasil (Bovespa) | | |
| México (BMV) | | |
| Crypto | | |
| Forex | | |
| Índices | | |
Ver lista completa en API_REFERENCE.md sección 14.
Yahoo Finance为美国以外的市场使用后缀:
| 市场 | 后缀 | 示例 |
|---|---|---|
| 阿根廷(BCBA) | | |
| 巴西(Bovespa) | | |
| 墨西哥(BMV) | | |
| 加密货币 | | |
| 外汇 | | |
| 指数 | | |
完整列表请查看API_REFERENCE.md第14节。
Rate Limits
速率限制
| Límite | Comportamiento |
|---|---|
| ~2 req/s | Seguro |
| 3-5 req/s | Probabilidad alta de 429 |
| >10 req/s | IP block temporal |
Siempre usar entre requests e implementar exponential backoff.
time.sleep(0.5)| 限制 | 表现 |
|---|---|
| ~2次请求/秒 | 安全 |
| 3-5次请求/秒 | 大概率触发429错误 |
| >10次请求/秒 | 临时封禁IP |
务必在请求之间添加,并实现指数退避机制。
time.sleep(0.5)Errores Comunes
常见错误
| Error | Causa | Solución |
|---|---|---|
| Falta crumb | Usar |
| Rate limit | Esperar 30-60s |
| Crumb expirado | Regenerar crumb |
| Ticker inválido | Verificar con search primero |
| User-Agent default | Setear uno de navegador |
| 错误 | 原因 | 解决方案 |
|---|---|---|
| 缺少crumb | 使用 |
| 触发速率限制 | 等待30-60秒 |
| crumb过期 | 重新生成crumb |
| 代码无效 | 先通过搜索验证代码 |
| 默认User-Agent问题 | 设置浏览器的User-Agent |
Estructura del skill
技能结构
skills/yahoo-finance/
├── SKILL.md # Este archivo (quickstart)
├── references/
│ └── API_REFERENCE.md # Documentación completa de todos los endpoints
└── scripts/
├── fetch_all.py # Script integral (recomendado)
├── fetch_quote.py # Quote + fundamentals rápido
└── download_historical.py # Históricos a CSVskills/yahoo-finance/
├── SKILL.md # 本文档(快速入门)
├── references/
│ └── API_REFERENCE.md # 所有端点的完整文档
└── scripts/
├── fetch_all.py # 集成脚本(推荐使用)
├── fetch_quote.py # 快速获取报价+基本面数据
└── download_historical.py # 将历史数据下载为CSV