원클릭으로
yahoo-finance
API no oficial de Yahoo Finance: precios, históricos, fundamentales, opciones, noticias en JSON puro sin wrappers.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
API no oficial de Yahoo Finance: precios, históricos, fundamentales, opciones, noticias en JSON puro sin wrappers.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
History of Market (historyofmarket.com) — API publica con 88 datasets historicos de indices US desde 1871. S&P 500 (price, CAPE, EPS, drawdowns, changes, constituents), Nasdaq Composite/Nasdaq 100 (price, volatility, VXN, changes), Dow Jones, SOX/SMH, sector ETFs (XLK, XLF), Magnificent 7 y macro. Sin API key, CORS libre, CC BY 4.0.
Construcción y optimización cuantitativa de portafolios: Markowitz (scipy.optimize + Monte Carlo), Black-Litterman (prior CAPM, views absolutas/relativas, posterior bayesiano), HRP/HERC/NCO (clustering jerárquico, risk parity, NCO con restricciones). Todo flat numpy + scipy, sin Riskfolio-Lib ni PyPortfolioOpt.
Trading API de Primary (Matba ROFEX): futuros, opciones, acciones, bonos. Órdenes, posiciones, cuenta, market data.
Academic backtesting framework for quantitative research. ~30 risk and performance ratios, 10 classes of indicators, event-driven engine with 6+ strategies, MPT optimizer, forward-looking simulation with Johnson SU + t-Copula, walk-forward CV, stress testing, fundamental analysis (Altman Z, Piotroski, DuPont). All flat Python + numpy.
Pricing completo de opciones europeas y americanas. 9 metodos: Black-Scholes, Binomial CRR, Trinomial, Monte Carlo (antithetic) + Longstaff-Schwartz, Bjerksund-Stensland 2002 / BAW (American closed-form), Heston 1993 (vol estocastica, sonrisa via Fourier), Bates 1996 (Heston + Merton jumps, crash risk), greeks (BS), implied vol, P(ITM) y P(Profit). Disenado para backtesting: cada funcion es flat Python vectorizado con numpy (sin abstracciones), usa math.erfc (no scipy). BS 2.4 us/op, BS2 3.6 us, Heston 400 us, Binomial N=500 5.6 ms. CLI con 15 modos mas validate y bench. Time complexity O(1) para todos los closed-form.
Datos macro y sociales de Argentina via la API oficial Series de Tiempo del Estado (apis.datos.gob.ar/series). ~4250 series del INDEC + BCRA + Min Economia + Sec Trabajo. Sin auth, sin API key. IPC nacional, EMAE, IPI, ISAC, EPH (desempleo), pobreza, comercio exterior, salarios (RIPTE, SMVM), tipo de cambio, reservas, REM expectativas. Transformaciones builtin (% YoY, % YTD, change) y agregacion temporal (daily→monthly→yearly) server-side. La API mas estable y mejor documentada del repo.
| name | yahoo-finance |
| description | API no oficial de Yahoo Finance: precios, históricos, fundamentales, opciones, noticias en JSON puro sin wrappers. |
| license | MIT |
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 yfinance ni ningún wrapper.
Base URL: https://query1.finance.yahoo.com
Alternativa: https://query2.finance.yahoo.com
v8/finance/chart funciona sin autenticación (solo User-Agent de navegador).Para referencia exhaustiva de todos los endpoints, campos, JSON structures, códigos de error, tickers internacionales, estrategias de rate limiting y ejemplos detallados, ver:
Ese documento incluye:
quoteSummary con cada campo documentado.BA para Argentina, .SA para Brasil, etc.)Varios endpoints requieren un crumb (token CSRF) que se obtiene con cookies de sesión.
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
# Uso:
# s = yahoo_session()
# r = s.get("https://query1.finance.yahoo.com/v7/finance/quote?symbols=AAPL,MSFT")
| Sin auth (solo User-Agent) | Requieren crumb |
|---|---|
v8/finance/chart (históricos) | v7/finance/quote (precios) |
v1/finance/search (búsqueda) | v10/finance/quoteSummary (fundamentos) |
v1/finance/trending (tendencias) | v7/finance/options (opciones) |
v1/finance/lookup (lookup) | v6/finance/recommendationsbysymbol |
v8/finance/chartGET https://query1.finance.yahoo.com/v8/finance/chart/{symbol}?range=1y&interval=1d
| Parámetro | Ejemplos |
|---|---|
range | 1d, 5d, 1mo, 3mo, 6mo, 1y, 5y, 10y, ytd, max |
interval | 1m, 5m, 15m, 1h, 1d, 1wk, 1mo |
events | div,splits (incluye dividendos y splits) |
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["indicators"]["quote"][0] -> open, high, low, close, volume
# data["indicators"]["adjclose"][0] -> precios ajustados
# data["events"] -> dividendos y splits
v7/finance/quotes = 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: regularMarketPrice, regularMarketChangePercent, marketCap, trailingPE, fiftyTwoWeekHigh/Low, dividendYield, volume, marketState (PRE/REGULAR/POST/CLOSED).
v10/finance/quoteSummarys = 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 info
Hay 33 módulos disponibles. Ver lista completa en API_REFERENCE.md sección 4.
v7/finance/optionss = 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 + puts
v1/finance/searchr = 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["news"] -> noticias relacionadas
| Script | Descripción |
|---|---|
| batch_fetch.py | Batch multi-ticker con token bucket + ThreadPoolExecutor. Quote batching (todos en 1 request). Charts en paralelo respetando rate limit. |
| 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. |
# Test seguro (3 tickers, solo chart, 2 req/s)
py scripts/batch_fetch.py --tickers AAPL,MSFT,NVDA --chart --rate 2.0
# Batch completo (quote en 1 request + charts en paralelo)
py scripts/batch_fetch.py --tickers AAPL,MSFT,NVDA,GOOGL,META,AMZN,TSLA --all --rate 2.0 --workers 4
# Solo quotes (siempre 1 request, imposible rate-limit)
py scripts/batch_fetch.py --tickers AAPL,MSFT,NVDA,GOOGL --quote
# Personalizar rate + workers
py scripts/batch_fetch.py --tickers AAPL,MSFT,NVDA --all --rate 1.5 --workers 3 --range 5y
Flags clave:
--rate : tokens/segundo del token bucket (default: 2.0 — máximo seguro)--burst : tokens acumulables para ráfagas (default: 5)--workers : hilos en paralelo (default: 4)Arquitectura:
v7/finance/quote?symbols=AAPL,MSFT,...)ThreadPoolExecutor con TokenBucket thread-safe compartido entre workers. Cada worker adquiere un token antes de cada request. A 2 req/s con burst=5, se pueden lanzar hasta 5 requests instantáneas sin bloquear; luego el bucket estabiliza el throughput.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, quiet
Flags principales:
--all : fetch de todo (chart, quote, fundamentals, options, search, recommendations)--chart : histórico OHLCV--quote : precio en tiempo real--fundamentals : fundamentos (quoteSummary)--options : cadena de opciones--search : búsqueda y noticias--range / --interval : control del histórico--modules / --all-modules : módulos de quoteSummary--output : archivo JSON de salida>> 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)
Yahoo Finance usa sufijos para mercados fuera de EE.UU.:
| Mercado | Sufijo | Ejemplo |
|---|---|---|
| Argentina (BCBA) | .BA | GGAL.BA, YPFD.BA |
| Brasil (Bovespa) | .SA | PETR4.SA, VALE3.SA |
| México (BMV) | .MX | WALMEX.MX |
| Crypto | -USD | BTC-USD, ETH-USD |
| Forex | =X | EURUSD=X |
| Índices | ^ | ^GSPC (S&P 500) |
Ver lista completa en API_REFERENCE.md sección 14.
| Límite | Comportamiento |
|---|---|
| ~2 req/s | Seguro |
| 3-5 req/s | Probabilidad alta de 429 |
| >10 req/s | IP block temporal |
Siempre usar time.sleep(0.5) entre requests e implementar exponential backoff.
Para fetch multi-ticker, usar batch_fetch.py que implementa token bucket a 2 req/s con burst de 5. A diferencia de yfinance (que no tiene rate limiter y lanza N threads simultáneos), batch_fetch garantiza que el throughput agregado no supere el límite seguro.
| Error | Causa | Solución |
|---|---|---|
401 Unauthorized | Falta crumb | Usar yahoo_session() |
429 Too Many Requests | Rate limit | Esperar 30-60s |
Bad Request | Crumb expirado | Regenerar crumb |
result vacío | Ticker inválido | Verificar con search primero |
Python-requests block | User-Agent default | Setear uno de navegador |
skills/yahoo-finance/
├── SKILL.md # Este archivo (quickstart)
├── references/
│ └── API_REFERENCE.md # Documentación completa de todos los endpoints
└── scripts/
├── batch_fetch.py # Batch multi-ticker con rate limiting (recomendado)
├── fetch_all.py # Script integral
├── fetch_quote.py # Quote + fundamentals rápido
└── download_historical.py # Históricos a CSV