morningstar
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseMorningstar — Screener via API JSON
Morningstar — 基于公开JSON API的筛选器
Skill para descargar la base de datos de acciones globales de Morningstar usando un endpoint JSON interno descubierto por ingenieria inversa. Sin API key, sin autenticacion, sin rate limit agresivo.
本工具可通过逆向工程发现的内部JSON端点,下载Morningstar的全球股票数据库。无需API密钥,无需身份验证,无严格请求频率限制。
⚠️ Aviso Legal
⚠️ 法律声明
- Este endpoint no es oficial — fue descubierto interceptando el trafico XHR de la UI web del screener de Morningstar.
- Los datos provienen del sitio publico de Morningstar. Respetar los terminos de servicio del sitio.
- Solo el endpoint es accesible sin auth. Otros endpoints de Morningstar (api-global, global, lt, etc.) requieren resolver AWS WAF challenge (no soportado por este skill).
/security/screener - Para uso intensivo, respetar pausas de 0.5-1 segundo entre requests.
- 该端点非官方——是通过拦截Morningstar筛选器网页端的XHR流量发现的。
- 数据来源于Morningstar公开站点,请遵守站点的服务条款。
- 仅端点可无验证访问。Morningstar的其他端点(api-global、global、lt等)需要解决AWS WAF验证挑战(本工具不支持)。
/security/screener - 高频使用时,请在请求之间保留0.5-1秒的间隔。
Scripts
脚本
| Script | Descripcion |
|---|---|
| fetch_morningstar.py | Script principal: info, fields, search, screener, download |
| 脚本 | 描述 |
|---|---|
| fetch_morningstar.py | 主脚本:信息查询、字段列表、搜索、筛选、下载 |
Instalacion de dependencias
依赖安装
bash
pip install requestsSolopuro, sin dependencias extras.requests
bash
pip install requests仅需纯库,无额外依赖。requests
Uso rapido
快速使用
bash
undefinedbash
undefined=== INFO ===
=== 信息查询 ===
python scripts/fetch_morningstar.py info # Stats del skill
python scripts/fetch_morningstar.py fields # 33 campos disponibles
python scripts/fetch_morningstar.py info # 工具统计信息
python scripts/fetch_morningstar.py fields # 查看可用的33个字段
=== BUSCAR TICKERS (por nombre, multi-universe) ===
=== 搜索股票代码(按名称,支持多市场) ===
python scripts/fetch_morningstar.py search Apple --universe XNAS
python scripts/fetch_morningstar.py search Apple --universe XNAS XFRA XBUE
python scripts/fetch_morningstar.py search YPF --universe XBUE
python scripts/fetch_morningstar.py search "MercadoLibre" --universe XNAS BVMF
python scripts/fetch_morningstar.py search Apple --universe XNAS
python scripts/fetch_morningstar.py search Apple --universe XNAS XFRA XBUE
python scripts/fetch_morningstar.py search YPF --universe XBUE
python scripts/fetch_morningstar.py search "MercadoLibre" --universe XNAS BVMF
=== DESCARGA MASIVA (screener) ===
=== 批量下载(筛选器) ===
python scripts/fetch_morningstar.py screener --universe XNAS
python scripts/fetch_morningstar.py screener --universe XBUE
python scripts/fetch_morningstar.py screener --universe XNAS XLON XTKS
python scripts/fetch_morningstar.py screener --universe XNAS
python scripts/fetch_morningstar.py screener --universe XBUE
python scripts/fetch_morningstar.py screener --universe XNAS XLON XTKS
=== DESCARGA POR PAIS ===
=== 按国家下载 ===
python scripts/fetch_morningstar.py screener --country AR
python scripts/fetch_morningstar.py screener --country US
python scripts/fetch_morningstar.py screener --country DE
python scripts/fetch_morningstar.py screener --country AR
python scripts/fetch_morningstar.py screener --country US
python scripts/fetch_morningstar.py screener --country DE
=== DESCARGA COMPLETA (53 universes, 100K+ listings) ===
=== 完整下载(53个市场,10万+条目) ===
python scripts/fetch_morningstar.py screener --all
python scripts/fetch_morningstar.py screener --all
=== GUARDAR A ARCHIVO ===
=== 保存到文件 ===
python scripts/fetch_morningstar.py screener --universe XBUE -o argentina.json
python scripts/fetch_morningstar.py screener --universe XNAS -o nasdaq.csv
python scripts/fetch_morningstar.py screener --country AR -o ar.csv
python scripts/fetch_morningstar.py search "YPF" --universe XBUE -o ypf_results.json
python scripts/fetch_morningstar.py screener --universe XBUE -o argentina.json
python scripts/fetch_morningstar.py screener --universe XNAS -o nasdaq.csv
python scripts/fetch_morningstar.py screener --country AR -o ar.csv
python scripts/fetch_morningstar.py search "YPF" --universe XBUE -o ypf_results.json
=== DOWNLOAD (alias de screener) ===
=== DOWNLOAD(screener的别名) ===
python scripts/fetch_morningstar.py download --universe XBUE -o ar.csv
python scripts/fetch_morningstar.py download --universe XBUE -o ar.csv
=== MODO SILENCIOSO (solo JSON, sin logs) ===
=== 静默模式(仅输出JSON,无日志) ===
python scripts/fetch_morningstar.py search Apple --universe XNAS -q
python scripts/fetch_morningstar.py screener --universe XBUE -q -o ar.json
python scripts/fetch_morningstar.py search Apple --universe XNAS -q
python scripts/fetch_morningstar.py screener --universe XBUE -q -o ar.json
=== CAMPOS ESPECIFICOS (--fields) ===
=== 指定字段(--fields) ===
python scripts/fetch_morningstar.py screener --universe XNAS --fields Ticker Name ClosePrice MarketCap PERatio
---python scripts/fetch_morningstar.py screener --universe XNAS --fields Ticker Name ClosePrice MarketCap PERatio
---Modos disponibles
可用模式
| Modo | Descripcion | Ejemplo |
|---|---|---|
| Stats del skill, dominios, token, #universes, #campos | |
| Lista los 33 securityDataPoints disponibles con descripcion | |
| Buscar tickers por nombre en uno o varios universes | |
| Descarga masiva de uno o varios universes (toda la DB) | |
| Alias de | |
| 模式 | 描述 | 示例 |
|---|---|---|
| 工具统计信息、域名、token、市场数量、字段数量 | |
| 列出33个可用securityDataPoints及描述 | |
| 在单个或多个市场中按名称搜索股票代码 | |
| 批量下载单个或多个市场的完整数据库 | |
| | |
Flags
参数
| Flag | Descripcion | Ejemplo |
|---|---|---|
| Uno o varios universe codes (sin prefijo | |
| Codigos de pais ISO (39 paises soportados) | |
| Todos los 53 universes (~100K listings, demora ~1-2 min) | |
| Sub-set de campos (default: los 33) | |
| Guardar a JSON | |
| Guardar a CSV (flat) | |
| Solo JSON, sin logs | |
| 参数 | 描述 | 示例 |
|---|---|---|
| 单个或多个市场代码(无需前缀 | |
| ISO国家代码(支持39个国家) | |
| 全部53个市场(约10万条目,耗时约1-2分钟) | |
| 指定字段子集(默认:全部33个) | |
| 保存为JSON格式 | |
| 保存为CSV格式(扁平化) | |
| 仅输出JSON,无日志 | |
Cobertura
覆盖范围
53 universes, 102,093 listings, 39 paises — ver assets/UNIVERSES.md.
53个交易市场,102,093个证券条目,39个国家——详见assets/UNIVERSES.md。
Top 10 universes
十大交易市场
| Universe | Exchange | Pais | Listings |
|---|---|---|---|
| Frankfurt (Tradegate) | Germany | 14,082 |
| Stuttgart | Germany | 9,971 |
| Munich | Germany | 8,425 |
| Dusseldorf | Germany | 8,297 |
| Bombay (BSE) | India | 5,192 |
| Tokyo | Japan | 3,989 |
| Nasdaq | United States | 3,741 |
| NSE India | India | 3,018 |
| Shenzhen | China | 2,934 |
| Korea Exchange | South Korea | 2,877 |
| 市场代码 | 交易所 | 国家 | 条目数量 |
|---|---|---|---|
| 法兰克福(Tradegate) | 德国 | 14,082 |
| 斯图加特 | 德国 | 9,971 |
| 慕尼黑 | 德国 | 8,425 |
| 杜塞尔多夫 | 德国 | 8,297 |
| 孟买(BSE) | 印度 | 5,192 |
| 东京 | 日本 | 3,989 |
| 纳斯达克 | 美国 | 3,741 |
| 印度国家证券交易所 | 印度 | 3,018 |
| 深圳 | 中国 | 2,934 |
| 韩国交易所 | 韩国 | 2,877 |
Argentina
阿根廷市场
XBUEbash
python fetch_morningstar.py screener --universe XBUE -o ar.csvCada CEDEAR tiene undistinto del ADR original. Ej: Apple Inc CEDEAR (PerformanceId) ≠ Apple Inc NASDAQ (0P0000TFNY).0P000000GY
XBUEbash
python fetch_morningstar.py screener --universe XBUE -o ar.csv每个CEDEAR的与原ADR不同。例如:Apple Inc CEDEAR (PerformanceId) ≠ Apple Inc NASDAQ (0P0000TFNY)。0P000000GY
Brasil
巴西市场
BVMFBVMFMexico
墨西哥市场
XMEXXMEXCampos (33 en total)
字段(共33个)
5 metadata: , , , ,
TickerNamePerformanceIdUniverseMarketCountryName5 categoricos: , , (1-9), (1-5)
SectorNameIndustryNameEquityStyleBoxQuantitativeStarRating23 numericos:
- Precio/tamano (2): ,
ClosePriceMarketCap - Valuacion (3): ,
PERatio,PEGRatioDividendYield - Calidad (7): ,
DebtEquityRatio,NetMargin,EBTMarginYear1,ROATTM,ROETTM,ROEYear1ROICYear1 - Crecimiento (2): ,
EPSGrowth3YYear1RevenueGrowth3Y - Retornos (9): ,
ReturnD1,ReturnW1,ReturnM0,ReturnM1,ReturnM3,ReturnM6,ReturnM12,ReturnM36,ReturnM60ReturnM120
Ver assets/DATA_POINTS.md para detalles.
5个元数据字段: , , , ,
TickerNamePerformanceIdUniverseMarketCountryName5个分类字段: , , (1-9), (1-5)
SectorNameIndustryNameEquityStyleBoxQuantitativeStarRating23个数值字段:
- 价格/规模(2个): ,
ClosePriceMarketCap - 估值(3个): ,
PERatio,PEGRatioDividendYield - 质量(7个): ,
DebtEquityRatio,NetMargin,EBTMarginYear1,ROATTM,ROETTM,ROEYear1ROICYear1 - 增长(2个): ,
EPSGrowth3YYear1RevenueGrowth3Y - 回报率(9个): ,
ReturnD1,ReturnW1,ReturnM0,ReturnM1,ReturnM3,ReturnM6,ReturnM12,ReturnM36,ReturnM60ReturnM120
详见assets/DATA_POINTS.md获取详细说明。
Ejemplos de output
输出示例
search Apple --universe XNAS
(1 resultado)
search Apple --universe XNASsearch Apple --universe XNAS
(1条结果)
search Apple --universe XNASjson
{
"_meta": {
"query": "Apple",
"universe_count": 1,
"total_results": 1
},
"results": [
{
"Ticker": "AAPL",
"PerformanceId": "0P000000GY",
"Name": "Apple Inc",
"ClosePrice": 311.23,
"MarketCap": 4571145807880,
"MarketCountryName": "United States",
"SectorName": "Technology",
"IndustryName": "Consumer Electronics",
"_universe_code": "XNAS",
"_universe_name": "Nasdaq"
}
]
}json
{
"_meta": {
"query": "Apple",
"universe_count": 1,
"total_results": 1
},
"results": [
{
"Ticker": "AAPL",
"PerformanceId": "0P000000GY",
"Name": "Apple Inc",
"ClosePrice": 311.23,
"MarketCap": 4571145807880,
"MarketCountryName": "United States",
"SectorName": "Technology",
"IndustryName": "Consumer Electronics",
"_universe_code": "XNAS",
"_universe_name": "Nasdaq"
}
]
}screener --universe XBUE -o ar.csv
(469 filas)
screener --universe XBUE -o ar.csvscreener --universe XBUE -o ar.csv
(469行)
screener --universe XBUE -o ar.csvcsv
_universe_code,Ticker,Name,PerformanceId,Universe,ClosePrice,MarketCap,SectorName,IndustryName,EquityStyleBox,...
XBUE,MMM,3M Co Cedear,0P0000D5UB,E0EXG$XBUE,23100,Industrials,Conglomerates,4,...
XBUE,A3,A3 Mercados SA Ordinary Shares,0P0000WJD7,E0EXG$XBUE,2215,Financial Services,Financial Data & Stock Exchanges,,...
XBUE,YPFD,YPF SA Class D,0P0000BS4D,E0EXG$XBUE,83850,Energy,Oil & Gas Integrated,9,...csv
_universe_code,Ticker,Name,PerformanceId,Universe,ClosePrice,MarketCap,SectorName,IndustryName,EquityStyleBox,...
XBUE,MMM,3M Co Cedear,0P0000D5UB,E0EXG$XBUE,23100,Industrials,Conglomerates,4,...
XBUE,A3,A3 Mercados SA Ordinary Shares,0P0000WJD7,E0EXG$XBUE,2215,Financial Services,Financial Data & Stock Exchanges,,...
XBUE,YPFD,YPF SA Class D,0P0000BS4D,E0EXG$XBUE,83850,Energy,Oil & Gas Integrated,9,...search YPF --universe XBUE
(4 resultados)
search YPF --universe XBUEsearch YPF --universe XBUE
(4条结果)
search YPF --universe XBUEjson
{
"_meta": {"query": "YPF", "universe_count": 1, "total_results": 4},
"results": [
{"Ticker": "YPFD", "PerformanceId": "0P0000BS4D", "Name": "YPF SA Class D", "ClosePrice": 83850, "SectorName": "Energy", "IndustryName": "Oil & Gas Integrated", "_universe_code": "XBUE"},
{"Ticker": "YPFD1", "PerformanceId": "0P0001NX4I", "Name": "YPF SA Class D Cedear", ...},
{"Ticker": "YPF", "PerformanceId": "...", "Name": "YPF SA", ...},
...
]
}json
{
"_meta": {"query": "YPF", "universe_count": 1, "total_results": 4},
"results": [
{"Ticker": "YPFD", "PerformanceId": "0P0000BS4D", "Name": "YPF SA Class D", "ClosePrice": 83850, "SectorName": "Energy", "IndustryName": "Oil & Gas Integrated", "_universe_code": "XBUE"},
{"Ticker": "YPFD1", "PerformanceId": "0P0001NX4I", "Name": "YPF SA Class D Cedear", ...},
{"Ticker": "YPF", "PerformanceId": "...", "Name": "YPF SA", ...},
...
]
}Consideraciones tecnicas
技术说明
Token universal
通用Token
El mismo token funciona en 5 sub-dominios de :
klr5zyak8xtools.morningstar.*| Dominio | Idioma default |
|---|---|
| English (UK) |
| German |
| French |
| Italian |
| Spanish |
Todos devuelven la misma data. El script prueba los 5 hasta que uno responda 200.
NO funciona en:(US),tools.morningstar.com,.com.au,.br, etc. (geofencing, IP blocking o no existe el endpoint)..jp
同一个Token 可在的5个子域名上使用:
klr5zyak8xtools.morningstar.*| 域名 | 默认语言 |
|---|---|
| 英语(英国) |
| 德语 |
| 法语 |
| 意大利语 |
| 西班牙语 |
所有域名返回的数据一致。脚本会依次尝试这5个域名,直到获取200响应。
不可用域名:(美国)、tools.morningstar.com、.com.au、.br等(存在地理限制、IP拦截或无对应端点)。.jp
Encoding
编码问题
El API devuelve nombres de sectores/industrias en el idioma del (es-AR, de-DE, etc.). PROBLEMA: los caracteres acentuados vienen mal-encodados ( en vez de ).
languageIdEnerg�aEnergíaSolucion del script: usar para todos los universes. Los nombres de empresas (Apple, YPF, etc.) se mantienen, solo los nombres de sectores/industrias se devuelven en inglés (que es el estándar para screener cuantitativo).
languageId=en-GBAPI会根据(如es-AR、de-DE)返回行业/板块名称的对应语言版本。问题: 带重音的字符会出现编码错误(如应为)。
languageIdEnerg�aEnergía脚本解决方案: 对所有市场使用。企业名称(如Apple、YPF等)保持不变,仅行业/板块名称返回英文(这是量化筛选的标准做法)。
languageId=en-GBRate limit
请求频率限制
No hay rate limit agresivo observado. Sin embargo:
- Hacer 50+ requests en pocos segundos puede triggerear throttling del CDN
- El script espera 0.5-1 segundo entre universes (configurable en )
get() - Sin reintentos agresivos
未观测到严格的请求频率限制,但需注意:
- 短时间内发送50+请求可能触发CDN限流
- 脚本在不同市场请求之间会等待0.5-1秒(可在中配置)
get() - 无激进重试机制
PerformanceId
PerformanceId
Cada listing (instrumento en un exchange especifico) tiene un unico. El mismo "Apple Inc" tiene:
PerformanceId- en NASDAQ (XNAS)
0P000000GY - en XFRA (Frankfurt)
0P0000EEDJ - en BVMF (Brasil BDR)
0P0000VE8R - en XBUE (CEDEAR Argentina)
0P0000TFNY
El PerformanceId NO se transfiere entre exchanges. Es la unica clave estable para identificar un listing especifico.
每个证券条目(特定交易所的工具)都有唯一的。同一公司(如Apple Inc)在不同交易所有不同的ID:
PerformanceId- 在纳斯达克(XNAS)
0P000000GY - 在法兰克福(XFRA)
0P0000EEDJ - 在巴西BVMF(BDR)
0P0000VE8R - 在阿根廷XBUE(CEDEAR)
0P0000TFNY
无法跨交易所通用,是识别特定证券条目的唯一稳定标识。PerformanceId
Estructura del skill
工具结构
skills/morningstar/
├── SKILL.md # Este archivo (guia rapida)
├── assets/
│ ├── UNIVERSES.md # Lista completa de 53 universes
│ └── DATA_POINTS.md # Lista de 33 campos disponibles
├── references/
│ └── REFERENCE.md # Documentacion tecnica detallada
└── scripts/
└── fetch_morningstar.py # Script principalDocumentacion detallada: Consultar references/REFERENCE.md para la doc tecnica exhaustiva de endpoints, JSON schemas, ejemplos y troubleshooting.
skills/morningstar/
├── SKILL.md # 本文件(快速指南)
├── assets/
│ ├── UNIVERSES.md # 53个交易市场完整列表
│ └── DATA_POINTS.md # 33个可用字段列表
├── references/
│ └── REFERENCE.md # 详细技术文档
└── scripts/
└── fetch_morningstar.py # 主脚本详细文档: 查阅references/REFERENCE.md获取端点、JSON Schema、示例及故障排查的完整技术说明。