关于 morningstar
morningstar 是通过 Morningstar screener 的 JSON 端点检索全球股票数据的技能,适合需要筛选和导出证券信息的用户。它支持按市场、国家和字段查询,并可保存为 JSON 或 CSV;所用端点并非官方接口。
主要功能
- 01按名称搜索股票代码
- 02筛选或下载多个市场的数据
- 03选择可用字段
- 04导出为 JSON 或 CSV
- 05查看字段与市场代码参考
适用场景
- 01查找指定市场中的股票
- 02批量导出多个市场的证券列表
- 03按估值或收益字段筛选股票
- 04生成 CSV 以供后续分析
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gauss314/ skills --skill morningstar安装后在 Claude Code 中输入/morningstar确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/DATA_POINTS.mdUNIVERSES.mdreferences/REFERENCE.mdscripts/fetch_morningstar.py详细介绍
Morningstar — 通过 API JSON 使用筛选器
通过逆向工程发现的内部 JSON 端点,下载 Morningstar 的全球股票数据库。无需 API 密钥、无需身份验证,也没有严格的速率限制。
⚠️ 法律声明
- 此端点不是官方端点——它是通过拦截 Morningstar 网站筛选器界面的 XHR 流量发现的。
- 数据来自 Morningstar 的公开网站。请遵守该网站的服务条款。
- 只有
/security/screener端点无需身份验证即可访问。Morningstar 的其他端点(api-global、global、lt 等)需要通过 AWS WAF 验证挑战(此工具不支持)。 - 如需高频使用,请在请求之间暂停 0.5-1 秒。
脚本
| 脚本 | 说明 |
|---|---|
| fetch_morningstar.py | 主脚本:info、fields、search、screener、download |
安装依赖
pip install requests
仅使用纯
requests,没有额外依赖。
快速使用
# === INFO ===
python scripts/fetch_morningstar.py info # Stats del skill
python scripts/fetch_morningstar.py fields # 33 campos disponibles
# === 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
# === 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
# === 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
# === DESCARGA COMPLETA (53 universes, 100K+ listings) ===
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
# === DOWNLOAD (alias de screener) ===
python scripts/fetch_morningstar.py download --universe XBUE -o ar.csv
# === MODO SILENCIOSO (solo JSON, sin logs) ===
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) ===
python scripts/fetch_morningstar.py screener --universe XNAS --fields Ticker Name ClosePrice MarketCap PERatio
可用模式
| 模式 | 说明 | 示例 |
|---|---|---|
info | Skill 统计信息、域名、令牌、#universes、#字段 | python fetch_morningstar.py info |
fields | 列出 33 个可用的 securityDataPoints 及其说明 | python fetch_morningstar.py fields |
search | 在一个或多个 universe 中按名称搜索股票代码 | python fetch_morningstar.py search Apple --universe XNAS |
screener | 批量下载一个或多个 universe(整个数据库) | python fetch_morningstar.py screener --universe XNAS |
download | screener 的别名 | python fetch_morningstar.py download --universe XNAS |
参数
| 参数 | 说明 | 示例 |
|---|---|---|
--universe XNAS | 一个或多个 universe 代码(不带前缀 E0EXG$) | --universe XNAS XBUE |
--country AR | ISO 国家代码(支持 39 个国家) | --country AR US DE |
--all | 全部 53 个 universe(约 100K 条上市记录,耗时约 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 |
覆盖范围
53 个 universe、102,093 条上市记录、39 个国家——参见 assets/UNIVERSES.md。
排名前 10 的 universe
| Universe | 交易所 | 国家 | 上市记录 |
|---|---|---|---|
XFRA | Frankfurt (Tradegate) | 德国 | 14,082 |
XSTU | Stuttgart | 德国 | 9,971 |
XMUN | Munich | 德国 | 8,425 |
XDUS | Dusseldorf | 德国 | 8,297 |
XBOM | Bombay (BSE) | 印度 | 5,192 |
XTKS | Tokyo | 日本 | 3,989 |
XNAS | Nasdaq | 美国 | 3,741 |
XNSE | NSE India | 印度 | 3,018 |
XSHE | Shenzhen | 中国 | 2,934 |
XKRX | Korea Exchange | 韩国 | 2,877 |
阿根廷
XBUE (BCBA) → 469 份 CEDEAR(外国股票存托凭证),价格以 ARS 计。
python fetch_morningstar.py screener --universe XBUE -o ar.csv
每份 CEDEAR 的
PerformanceId都与原始 ADR 不同。例如:Apple Inc CEDEAR (0P0000TFNY) ≠ Apple Inc NASDAQ (0P000000GY)。
巴西
BVMF (B3) → 2,070 份 BDR/只股票,以 BRL 计。
墨西哥
XMEX (BMV) → 2,233 只股票,以 MXN 计。
字段(共 33 个)
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。
输出示例
search Apple --universe XNAS(1 个结果)
{
"_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 行)
_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 个结果)
{
"_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", ...},
...
]
}
技术注意事项
通用令牌
同一个令牌 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 阻止或端点不存在)。
编码
API 会根据 languageId(es-AR、de-DE 等)返回相应语言的行业/产业名称。**问题:**带重音符号的字符编码错误(返回 Energ�a 而不是 Energía)。
**脚本的解决方案:**对所有 Universe 使用 languageId=en-GB。公司名称(Apple、YPF 等)保持不变,只有行业/产业名称会以英语返回(这是量化筛选器的标准做法)。
速率限制
目前未观察到严格的速率限制。不过:
- 几秒内发出 50+ 个请求可能触发 CDN 限流
- 脚本在不同 Universe 之间等待 0.5-1 秒(可在
get()中配置) - 不会进行激进的重试
PerformanceId
每个上市项(在特定交易所挂牌的证券)都有唯一的 PerformanceId。同一个“Apple Inc”对应:
- NASDAQ(XNAS)上的
0P000000GY - XFRA(法兰克福)上的
0P0000EEDJ - BVMF(巴西 BDR)上的
0P0000VE8R - XBUE(阿根廷 CEDEAR)上的
0P0000TFNY
PerformanceId 不会在不同交易所之间通用。它是识别特定上市项的唯一稳定标识符。
技能结构
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
详细文档: 请参阅 references/REFERENCE.md,了解端点、JSON 架构、示例和故障排除的完整技术文档。