mcpField
C
cafci

cafci

github.com/gauss314数据与数据库252268 次安装20 周前更新
代码仓库

关于 cafci

cafci 是用于查询 CAFCI 阿根廷共同基金公开信息的命令行技能,整合目录、每日数据、收益资料和组合构成,并按日缓存目录与快照以便重复查询。

主要功能

  1. 01浏览基金及份额类别目录
  2. 02获取每日价格与基金资产数据
  3. 03查看各期收益和持仓
  4. 04本地搜索并解析基金
  5. 05按日缓存目录和每日数据

适用场景

  1. 01按类别比较基金资产规模
  2. 02查询基金费用与元数据
  3. 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 个替代来源:

  1. /consulta-de-fondos.json(完整目录)
  2. /pb_get(每日 XLSX)
  3. defuddle.md/.../fondos/{F}?clase={C}(Markdown 详情页)
  4. .../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 CLASEMarkdown 详情页:各期间的 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
PyMes65
总回报42
基础设施23
封闭式基金22
ASG10
RG9005

每日数据类别(用于 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 名:

  1. top "<categoria>" --limit N → 获取基金列表
  2. 对每个 nombre,使用 resolve 获取 fondo_id, clase_id
  3. 在 catalogo 中按 clases[].nombre 的精确名称查找费用

B)获取基金完整资料:

  1. resolve "<query>" → 获取 ID
  2. fondo 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)——脚本已自动发送
404URL 格式错误或 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 架构中。

评论

支持 Markdown