morningstar

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Morningstar — 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
    /security/screener
    es accesible
    sin auth. Otros endpoints de Morningstar (api-global, global, lt, etc.) requieren resolver AWS WAF challenge (no soportado por este skill).
  • Para uso intensivo, respetar pausas de 0.5-1 segundo entre requests.

  • 该端点非官方——是通过拦截Morningstar筛选器网页端的XHR流量发现的。
  • 数据来源于Morningstar公开站点,请遵守站点的服务条款
  • /security/screener
    端点可无验证访问
    。Morningstar的其他端点(api-global、global、lt等)需要解决AWS WAF验证挑战(本工具不支持)。
  • 高频使用时,请在请求之间保留0.5-1秒的间隔。

Scripts

脚本

ScriptDescripcion
fetch_morningstar.pyScript principal: info, fields, search, screener, download

脚本描述
fetch_morningstar.py主脚本:信息查询、字段列表、搜索、筛选、下载

Instalacion de dependencias

依赖安装

bash
pip install requests
Solo
requests
puro, sin dependencias extras.

bash
pip install requests
仅需纯
requests
库,无额外依赖。

Uso rapido

快速使用

bash
undefined
bash
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

可用模式

ModoDescripcionEjemplo
info
Stats del skill, dominios, token, #universes, #campos
python fetch_morningstar.py info
fields
Lista los 33 securityDataPoints disponibles con descripcion
python fetch_morningstar.py fields
search
Buscar tickers por nombre en uno o varios universes
python fetch_morningstar.py search Apple --universe XNAS
screener
Descarga masiva de uno o varios universes (toda la DB)
python fetch_morningstar.py screener --universe XNAS
download
Alias de
screener
python fetch_morningstar.py download --universe XNAS
模式描述示例
info
工具统计信息、域名、token、市场数量、字段数量
python fetch_morningstar.py info
fields
列出33个可用securityDataPoints及描述
python fetch_morningstar.py fields
search
在单个或多个市场中按名称搜索股票代码
python fetch_morningstar.py search Apple --universe XNAS
screener
批量下载单个或多个市场的完整数据库
python fetch_morningstar.py screener --universe XNAS
download
screener
的别名
python fetch_morningstar.py download --universe XNAS

Flags

参数

FlagDescripcionEjemplo
--universe XNAS
Uno o varios universe codes (sin prefijo
E0EXG$
)
--universe XNAS XBUE
--country AR
Codigos de pais ISO (39 paises soportados)
--country AR US DE
--all
Todos los 53 universes (~100K listings, demora ~1-2 min)
--all
--fields Ticker Name
Sub-set de campos (default: los 33)
--fields Ticker Name ClosePrice
--output archivo.json
Guardar a JSON
-o data.json
--output archivo.csv
Guardar a CSV (flat)
-o data.csv
-q
/
--quiet
Solo JSON, sin logs
-q

参数描述示例
--universe XNAS
单个或多个市场代码(无需前缀
E0EXG$
--universe XNAS XBUE
--country AR
ISO国家代码(支持39个国家)
--country AR US DE
--all
全部53个市场(约10万条目,耗时约1-2分钟)
--all
--fields Ticker Name
指定字段子集(默认:全部33个)
--fields Ticker Name ClosePrice
--output archivo.json
保存为JSON格式
-o data.json
--output archivo.csv
保存为CSV格式(扁平化)
-o data.csv
-q
/
--quiet
仅输出JSON,无日志
-q

Cobertura

覆盖范围

53 universes, 102,093 listings, 39 paises — ver assets/UNIVERSES.md.
53个交易市场,102,093个证券条目,39个国家——详见assets/UNIVERSES.md

Top 10 universes

十大交易市场

UniverseExchangePaisListings
XFRA
Frankfurt (Tradegate)Germany14,082
XSTU
StuttgartGermany9,971
XMUN
MunichGermany8,425
XDUS
DusseldorfGermany8,297
XBOM
Bombay (BSE)India5,192
XTKS
TokyoJapan3,989
XNAS
NasdaqUnited States3,741
XNSE
NSE IndiaIndia3,018
XSHE
ShenzhenChina2,934
XKRX
Korea ExchangeSouth Korea2,877
市场代码交易所国家条目数量
XFRA
法兰克福(Tradegate)德国14,082
XSTU
斯图加特德国9,971
XMUN
慕尼黑德国8,425
XDUS
杜塞尔多夫德国8,297
XBOM
孟买(BSE)印度5,192
XTKS
东京日本3,989
XNAS
纳斯达克美国3,741
XNSE
印度国家证券交易所印度3,018
XSHE
深圳中国2,934
XKRX
韩国交易所韩国2,877

Argentina

阿根廷市场

XBUE
(BCBA) → 469 CEDEARs (certificados de deposito de acciones extranjeras) con precios en ARS.
bash
python fetch_morningstar.py screener --universe XBUE -o ar.csv
Cada CEDEAR tiene un
PerformanceId
distinto del ADR original. Ej: Apple Inc CEDEAR (
0P0000TFNY
) ≠ Apple Inc NASDAQ (
0P000000GY
).
XBUE
(BCBA)→ 469个CEDEARs(外国股票存托凭证),以阿根廷比索计价。
bash
python fetch_morningstar.py screener --universe XBUE -o ar.csv
每个CEDEAR的
PerformanceId
与原ADR不同。例如:Apple Inc CEDEAR (
0P0000TFNY
) ≠ Apple Inc NASDAQ (
0P000000GY
)。

Brasil

巴西市场

BVMF
(B3) → 2,070 BDRs/acciones en BRL.
BVMF
(B3)→ 2,070个BDRs/股票,以巴西雷亚尔计价。

Mexico

墨西哥市场

XMEX
(BMV) → 2,233 acciones en MXN.

XMEX
(BMV)→ 2,233个股票,以墨西哥比索计价。

Campos (33 en total)

字段(共33个)

5 metadata:
Ticker
,
Name
,
PerformanceId
,
Universe
,
MarketCountryName
5 categoricos:
SectorName
,
IndustryName
,
EquityStyleBox
(1-9),
QuantitativeStarRating
(1-5)
23 numericos:
  • Precio/tamano (2):
    ClosePrice
    ,
    MarketCap
  • Valuacion (3):
    PERatio
    ,
    PEGRatio
    ,
    DividendYield
  • Calidad (7):
    DebtEquityRatio
    ,
    NetMargin
    ,
    EBTMarginYear1
    ,
    ROATTM
    ,
    ROETTM
    ,
    ROEYear1
    ,
    ROICYear1
  • Crecimiento (2):
    EPSGrowth3YYear1
    ,
    RevenueGrowth3Y
  • Retornos (9):
    ReturnD1
    ,
    ReturnW1
    ,
    ReturnM0
    ,
    ReturnM1
    ,
    ReturnM3
    ,
    ReturnM6
    ,
    ReturnM12
    ,
    ReturnM36
    ,
    ReturnM60
    ,
    ReturnM120
Ver assets/DATA_POINTS.md para detalles.

5个元数据字段:
Ticker
,
Name
,
PerformanceId
,
Universe
,
MarketCountryName
5个分类字段:
SectorName
,
IndustryName
,
EquityStyleBox
(1-9),
QuantitativeStarRating
(1-5)
23个数值字段:
  • 价格/规模(2个):
    ClosePrice
    ,
    MarketCap
  • 估值(3个):
    PERatio
    ,
    PEGRatio
    ,
    DividendYield
  • 质量(7个):
    DebtEquityRatio
    ,
    NetMargin
    ,
    EBTMarginYear1
    ,
    ROATTM
    ,
    ROETTM
    ,
    ROEYear1
    ,
    ROICYear1
  • 增长(2个):
    EPSGrowth3YYear1
    ,
    RevenueGrowth3Y
  • 回报率(9个):
    ReturnD1
    ,
    ReturnW1
    ,
    ReturnM0
    ,
    ReturnM1
    ,
    ReturnM3
    ,
    ReturnM6
    ,
    ReturnM12
    ,
    ReturnM36
    ,
    ReturnM60
    ,
    ReturnM120
详见assets/DATA_POINTS.md获取详细说明。

Ejemplos de output

输出示例

search Apple --universe XNAS
(1 resultado)

search Apple --universe XNAS
(1条结果)

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"
    }
  ]
}
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.csv
(469行)

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,...
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 XBUE
(4条结果)

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",                ...},
    ...
  ]
}

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
klr5zyak8x
funciona en 5 sub-dominios de
tools.morningstar.*
:
DominioIdioma default
tools.morningstar.co.uk
English (UK)
tools.morningstar.de
German
tools.morningstar.fr
French
tools.morningstar.it
Italian
tools.morningstar.es
Spanish
Todos devuelven la misma data. El script prueba los 5 hasta que uno responda 200.
NO funciona en:
tools.morningstar.com
(US),
.com.au
,
.br
,
.jp
, etc. (geofencing, IP blocking o no existe el endpoint).
同一个Token
klr5zyak8x
可在
tools.morningstar.*
5个子域名上使用:
域名默认语言
tools.morningstar.co.uk
英语(英国)
tools.morningstar.de
德语
tools.morningstar.fr
法语
tools.morningstar.it
意大利语
tools.morningstar.es
西班牙语
所有域名返回的数据一致。脚本会依次尝试这5个域名,直到获取200响应。
不可用域名:
tools.morningstar.com
(美国)、
.com.au
.br
.jp
等(存在地理限制、IP拦截或无对应端点)。

Encoding

编码问题

El API devuelve nombres de sectores/industrias en el idioma del
languageId
(es-AR, de-DE, etc.). PROBLEMA: los caracteres acentuados vienen mal-encodados (
Energ�a
en vez de
Energía
).
Solucion del script: usar
languageId=en-GB
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).
API会根据
languageId
(如es-AR、de-DE)返回行业/板块名称的对应语言版本。问题: 带重音的字符会出现编码错误(如
Energ�a
应为
Energía
)。
脚本解决方案: 对所有市场使用
languageId=en-GB
。企业名称(如Apple、YPF等)保持不变,仅行业/板块名称返回英文(这是量化筛选的标准做法)。

Rate 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
PerformanceId
unico. El mismo "Apple Inc" tiene:
  • 0P000000GY
    en NASDAQ (XNAS)
  • 0P0000EEDJ
    en XFRA (Frankfurt)
  • 0P0000VE8R
    en BVMF (Brasil BDR)
  • 0P0000TFNY
    en XBUE (CEDEAR Argentina)
El PerformanceId NO se transfiere entre exchanges. Es la unica clave estable para identificar un listing especifico.
每个证券条目(特定交易所的工具)都有唯一的
PerformanceId
。同一公司(如Apple Inc)在不同交易所有不同的ID:
  • 0P000000GY
    在纳斯达克(XNAS)
  • 0P0000EEDJ
    在法兰克福(XFRA)
  • 0P0000VE8R
    在巴西BVMF(BDR)
  • 0P0000TFNY
    在阿根廷XBUE(CEDEAR)
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 principal

Documentacion 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、示例及故障排查的完整技术说明。