关于 cafci
cafci 是用于查询 CAFCI 阿根廷共同基金公开信息的命令行技能,整合目录、每日数据、收益资料和组合构成,并按日缓存目录与快照以便重复查询。
主要功能
- 01浏览基金及份额类别目录
- 02获取每日价格与基金资产数据
- 03查看各期收益和持仓
- 04本地搜索并解析基金
- 05按日缓存目录和每日数据
适用场景
- 01按类别比较基金资产规模
- 02查询基金费用与元数据
- 03查看基金收益及投资组合持仓
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ gauss314/ skills --skill cafci安装后在 Claude Code 中输入/cafci确认已加载。
附带文件references/REFERENCE.mdscripts/fetch_cafci.py
详细介绍
CAFCI — 阿根廷共同投资基金
用于通过 CAFCI(阿根廷共同投资基金协会)的 4 个官方来源,查询阿根廷共同投资基金公开信息的技能。
截至 2026-06,涵盖 1152 只基金和 4615 个活跃份额类别:货币市场、固定收益、股票、混合收益、PyMes、总回报、基础设施、封闭式基金、ASG、RG900。
⚠️ 法律声明
- 未提供官方文档的公共 API。端点可能会在不另行通知的情况下变更(此前的 REST API 于 2026-04 停用时就是如此)。
- 请遵守 CAFCI 使用条款。
- 数据存在延迟(工作日收盘数据,约 18hs ART)。
- 如需大量商业用途,请联系 CAFCI 获取官方数据源。
- 过往收益不保证未来收益。
📌 重要提示:此前的 REST API 已停用
REST API api.pub.cafci.org.ar/tipo-renta、/fondo/{id}、
/estadisticas/... 已于 2026-04 停用(HTTP 403 "Route not
allowed")。该主机上唯一仍可用的路径是 /pb_get。
本技能使用取代它的4 个替代来源:
/consulta-de-fondos.json(完整目录)/pb_get(每日 XLSX)defuddle.md/.../fondos/{F}?clase={C}(Markdown 详情页).../fondos/{F}?clase={C}(用于查看投资组合构成的 HTML)
脚本
| 脚本 | 描述 |
|---|---|
| fetch_cafci.py | 主脚本:包含所有端点和查询函数 |
需要: pip install openpyxl(用于解析每日 XLSX)。
快速使用
# ── DATASETS ENTEROS (con cache local diario) ──────────────────────────
# Catalogo completo: 1152 fondos, 4615 clases con IDs, honorarios, metadata
py scripts/fetch_cafci.py catalogo
py scripts/fetch_cafci.py catalogo -o catalogo.json # guarda 2.7MB
py scripts/fetch_cafci.py catalogo --no-cache # fuerza refetch
# Snapshot diario: VCP, patrimonio, variaciones (dia/mes/YTD/12m)
py scripts/fetch_cafci.py diario
py scripts/fetch_cafci.py diario -o diario.json
py scripts/fetch_cafci.py diario --no-cache
# ── CONSULTAS SOBRE EL CACHE ───────────────────────────────────────────
# Buscar fondo por nombre (parcial, case-insensitive)
py scripts/fetch_cafci.py buscar "ahorro"
py scripts/fetch_cafci.py buscar "delta"
py scripts/fetch_cafci.py buscar "renta fija"
# Resolver IDs (mas compacto: solo fondo_id, clase_id, nombres)
py scripts/fetch_cafci.py resolve "ieb estrategico"
py scripts/fetch_cafci.py resolve "1810"
# Top N por patrimonio en una categoria del diario
py scripts/fetch_cafci.py top "Mercado de Dinero Peso Argentina"
py scripts/fetch_cafci.py top "Mercado de Dinero Peso Argentina" --limit 20
py scripts/fetch_cafci.py top "Renta Variable Peso Argentina"
py scripts/fetch_cafci.py top "Renta Fija Peso Argentina" --limit 5
# ── FICHAS INDIVIDUALES ────────────────────────────────────────────────
# Ficha markdown (rendimientos TNA: 7d/1m/90d/180d/YTD/12m + datos del fondo)
py scripts/fetch_cafci.py ficha 304 308 # 1810 Ahorro
py scripts/fetch_cafci.py ficha 1717 5772 # otro fondo
py scripts/fetch_cafci.py ficha 304 308 -o ficha.md # guarda markdown
# Composicion de cartera (top activos + porcentaje)
py scripts/fetch_cafci.py cartera 304 308
py scripts/fetch_cafci.py cartera 1717 5772
# Ficha COMPLETA todo-en-uno (combina catalogo + diario + ficha + cartera)
py scripts/fetch_cafci.py fondo 304 308
py scripts/fetch_cafci.py fondo 304 308 -o 1810_ahorro_completo.json
# ── COMBINADO ──────────────────────────────────────────────────────────
# Catalogo + diario juntos (sin fichas individuales)
py scripts/fetch_cafci.py all -o cafci_snapshot.json
# ── OUTPUT ─────────────────────────────────────────────────────────────
# Modo silencioso (solo JSON/markdown, sin logs)
py scripts/fetch_cafci.py top "Mercado de Dinero Peso Argentina" -q
可用端点
| 模式 | 数据 | URL |
|---|---|---|
catalogo | 目录:1152 只基金、4615 个份额类别、ID、费用、元数据 | GET /consulta-de-fondos.json |
diario | 每日快照:VCP、资产净值、市场份额、变动 | GET /pb_get (XLSX) |
ficha FONDO CLASE | Markdown 详情页:各期间的 TNA 收益 | GET defuddle.md/.../fondos/{F}?clase={C} |
cartera FONDO CLASE | 投资组合构成(主要资产 + 百分比) | GET .../fondos/{F}?clase={C} (HTML) |
buscar QUERY | 按名称部分内容搜索基金 | (本地,基于目录) |
resolve QUERY | 根据名称解析 fondoId/claseId | (本地,基于目录) |
top CATEGORIA | 按某类别的资产净值列出前 N 名 | (本地,基于每日数据) |
fondo FONDO CLASE | 完整的一站式详情页(组合 4 个端点) | (本地 + 4 次请求) |
all | 目录 + 每日数据快照 | (本地 + 2 次请求) |
总计:4 个 HTTP 端点 + 5 个基于缓存的查询函数。
本地缓存
大型数据集(目录 + 每日数据)每天会在系统临时目录中缓存一次:
$TMP/cafci-catalog-YYYY-MM-DD.json (~2.7 MB)
$TMP/cafci-daily-YYYY-MM-DD.json (~1-2 MB)
- Windows:
C:\Users\<user>\AppData\Local\Temp\ - Linux/Mac:
/tmp/
如果一天内要进行多次查询(典型工作流),系统会自动复用缓存。使用 --no-cache 强制重新获取。
支持的收益类型
| 类型 | 基金数量 |
|---|---|
| 固定收益 | 542 |
| 混合收益 | 271 |
| 货币市场 | 96 |
| 股票 | 76 |
| PyMes | 65 |
| 总回报 | 42 |
| 基础设施 | 23 |
| 封闭式基金 | 22 |
| ASG | 10 |
| RG900 | 5 |
每日数据类别(用于 top)
每日数据类别由 tipo_renta + moneda + region 组合而成。常见示例:
| 类别 | 覆盖范围 |
|---|---|
Renta Variable Peso Argentina | 阿根廷股票 |
Mercado de Dinero Peso Argentina | 比索货币市场 |
Renta Fija Peso Argentina | 比索债券 |
Renta Fija Dolar Estadounidense Argentina | 阿根廷美元债券 |
Renta Mixta Peso Argentina | 比索混合基金 |
Retorno Total Peso Argentina | 比索总回报 |
查看完整列表:
py scripts/fetch_cafci.py diario -q | jq '.categorias'
技术注意事项
catalogo 返回的数据
顶层:
| 字段 | 描述 |
|---|---|
generated_at | 目录的 ISO 时间戳。 |
total_fondos、total_clases | 计数器。 |
filtros | 枚举目录:tipo_renta、region、moneda、benchmark、duration、horizonte、sociedad_gerente、tipo_dinero、tipo_renta_mixta。 |
fondos[] | 基金数组。 |
每个 fondos[] 都有 id、名称、codigo_cnv、状态、目标、tipo_dinero、valuacion、dias_liquidacion、inicio、sociedad_gerente、sociedad_depositaria、moneda、tipo_renta、region、duration、benchmark、horizonte 和 clases[]。
每个 clases[] 都有 id、名称、moneda、inversion_minima、honorarios
(ingreso、rescate、transferencia、administracion_gerente、administracion_depositaria、
gasto_ordinario_gestion)、suscripcion、liquidez、rg384、log_abierto、
ticker_bloomberg、ticker_isin。
⚠️
honorarios.*是 字符串(不是浮点数)。比较前请使用float()转换。
diario 返回的数据
{
"fecha_reporte": "2026-06-04",
"categorias": ["Renta Variable Peso Argentina", ...],
"fondos": [
{
"nombre": "Allaria Equity Selection - Clase A",
"categoria": "Renta Variable Peso Argentina",
"moneda": "ARS",
"region": "Arg",
"horizonte": "Cor",
"fecha": "2026-06-04",
"vcp_actual": 1642.85,
"vcp_anterior": 1628.345,
"variacion_dia_pct": 0.891,
"vcp_reexp_pesos": 1642.85,
"variacion_mes_pct": -1.181,
"variacion_ytd_pct": 11.939,
"variacion_12m_pct": 61.542,
"cantidad_cuotapartes": 1276470413.29,
"patrimonio": 2097049572.01,
"market_share": 0.107,
"depositaria": "Banco Comafi S.A.",
"codigo_cnv": "1603"
}
]
}
cartera 返回的数据
{
"fondo_id": 304,
"clase_id": 308,
"fecha_cartera": "15/05/2026",
"composicion": [
{"nombre": "Cta Cte $ Rem Bco Credico", "porcentaje": 17.4},
{"nombre": "Pzo Fi $ Bco Nacion", "porcentaje": 14.8},
...
{"nombre": "Resto de Activos", "porcentaje": 29.2}
]
}
CAFCI 只发布 排名前约 14 的资产,其余资产汇总为
"Resto de Activos"。 投资组合日期比每日数据延迟约 2–3 周。
fondo 返回的数据(全部整合)
{
"meta": { ...del catalogo... },
"diario": { ...del XLSX... },
"ficha_md": "...markdown defuddle...",
"cartera": { ...composicion... }
}
推荐工作流
A)按资产规模和费用列出前 N 名:
top "<categoria>" --limit N→ 获取基金列表- 对每个
nombre,使用resolve获取fondo_id, clase_id - 在
catalogo中按clases[].nombre的精确名称查找费用
B)获取基金完整资料:
resolve "<query>"→ 获取 IDfondo FONDO_ID CLASE_ID→ 获取整合后的全部信息
C)用户未指定类别时:
- 使用
buscar或resolve并展示可用类别 - 如果只有一个类别,则自动继续使用该类别
标志
| 标志 | 描述 |
|---|---|
--limit N | 结果数量(top)。默认值:10 |
--no-cache | 强制重新获取 catalogo/diario(忽略本地缓存) |
-o archivo | 将输出保存到 JSON 或 markdown 文件 |
-q / --quiet | 静默模式(仅输出 JSON/markdown,不显示日志) |
速率限制
没有已记录的速率限制。建议:
- 向 CAFCI 发送请求的间隔至少为 0.3 秒。
- 对于
defuddle.md(外部代理),遇到超时时请等待更长时间。 - 批量处理较大时,使用并发数最多为 5 的线程池。
错误处理
| 状态 | 常见原因 |
|---|---|
| 200 | 正常 |
403 Route not allowed | 路径已从旧版 REST API 中停用 |
403(在 /pb_get 上) | 缺少浏览器请求头(Origin、Referer)——脚本已自动发送 |
| 404 | URL 格式错误或 ID 不存在 |
defuddle.md 超时 | 外部代理响应缓慢——请重试 |
编码
UTF-8 编码有效。Windows 控制台可能会将重音字符显示为 ?,但 UTF-8 文件会正确保存(脚本使用 ensure_ascii=False)。
技能结构
skills/cafci/
├── SKILL.md # Este archivo (guia rapida)
├── references/
│ └── REFERENCE.md # Documentacion completa de los 4 endpoints + cache
└── scripts/
└── fetch_cafci.py # Script principal
详细文档: 请参阅 references/REFERENCE.md, 了解完整的 JSON schema、详尽的字段表、tipo_renta/region/horizonte/moneda 的代码、本地缓存、错误处理和 技术注意事项。
灵感来源: ferminrp/agent-skills/cafci-fondos-comunes-argentina — 此实现将相同的 4 个数据源设计移植到仓库的 SKILL.md / references/REFERENCE.md / scripts/fetch_*.py 架构中。