{"skill":{"slug":"ftshare-etf-data","displayName":"Skills of ETF data released by ft.tech.","summary":"A 股 ETF 数据技能集（market.ft.tech）。覆盖单只 ETF 详情、ETF 分页列表（排序/筛选）、ETF K 线（日/周/月/年线）、ETF 分钟级分时、ETF PCF 列表与下载。用户询问某只 ETF 行情、ETF 列表、ETF K 线、分时或 PCF 申购赎回清单时使用。","description":"---\nname: FTShare-etf-data\ndescription: A 股 ETF 数据技能集（market.ft.tech）。覆盖单只 ETF 详情、ETF 分页列表（排序/筛选）、ETF K 线（日/周/月/年线）、ETF 分钟级分时、ETF PCF 列表与下载。用户询问某只 ETF 行情、ETF 列表、ETF K 线、分时或 PCF 申购赎回清单时使用。\n---\n\n# FT ETF 数据 Skills\n\n本 skill 是 `FTShare-etf-data` 的**统一路由入口**。\n\n根据用户问题，从下方「能力总览」或「询问方式与子 skill 对应表」匹配对应子 skill，然后通过 `run.py` 执行并解析响应。\n\n> 所有接口均以 `https://market.ft.tech` 为基础域名。ETF 行情类子 skill（etf-detail、etf-list-paginated、etf-ohlcs、etf-prices）请求头已内置 `X-Client-Name: ft-web`；PCF 子 skill（etf-pcfs、etf-pcf-download）无需该请求头。\n\n---\n\n## 调用方式（唯一规则）\n\n`run.py` 与本文件（`SKILL.md`）位于同一目录。执行时：\n\n1. 取本文件的绝对路径，将末尾 `/SKILL.md` 替换为 `/run.py`，得到 `<RUN_PY>` 。\n2. 调用：`python <RUN_PY> <子skill名> [参数...]`\n\n```bash\n# 示例（<RUN_PY> 为实际绝对路径）\npython <RUN_PY> etf-detail --etf 510050.XSHG\npython <RUN_PY> etf-list-paginated --order_by \"change_rate desc\" --page_size 20 --page_no 1\npython <RUN_PY> etf-ohlcs --etf 510050.XSHG --span DAY1 --limit 50\npython <RUN_PY> etf-prices --etf 510050.XSHG --since TODAY\npython <RUN_PY> etf-pcfs --date 20260309\npython <RUN_PY> etf-pcf-download --filename pcf_159003_20260309.xml --output pcf_159003_20260309.xml\npython <RUN_PY> etf-component --symbol 510300.XSHG\npython <RUN_PY> etf-pre-single --symbol 510300.XSHG\npython <RUN_PY> etf-pre-single --symbol 510300.XSHG --date 20260316\npython <RUN_PY> get-nth-trade-date --n 5\n```\n\n> `run.py` 内部通过 `__file__` 自定位，无论安装在何处都能正确找到各子 skill 的脚本。\n\n---\n\n## ETF — 询问方式与子 skill 对应表\n\n| 询问方式（用户常说的词） | 子 skill |\n|------------------------|----------|\n| 某只 **ETF 详情**、**510050 行情**、**上证50ETF** 涨跌幅、ETF **跟踪指数/市值**、某只 ETF 名称/盘口 | `etf-detail` |\n| **ETF 列表**、**全市场 ETF**、**按涨跌幅排序的 ETF**、**筛选某类 ETF** | `etf-list-paginated` |\n| 某只 ETF 的 **K 线**、**510050 日线/周线/月线/年线**、ETF **开高低收**、**MA5/MA10/MA20** | `etf-ohlcs` |\n| 某只 ETF **分时**、**510050 当日分时**、ETF **一分钟行情**、**多日分时走势** | `etf-prices` |\n| **ETF PCF**、**申购赎回清单**、**指定日期 PCF 列表**、PCF 文件列表 | `etf-pcfs` |\n| **下载 PCF**、**PCF 文件内容**、某只 ETF **申购赎回清单 XML**、pcf_xxx.xml、ssepcf_xxx.xml | `etf-pcf-download` |\n| **某只 ETF 成份股**、**ETF 持仓**、**510300 成份**、**沪深300ETF 成份列表** | `etf-component` |\n| **某只 ETF 盘前**、**申购赎回单位**、**净值/现金差额**、**510300 盘前** | `etf-pre-single` |\n| **前 N 个交易日**、**近 N 天交易日**、**往前推 N 个交易日**（查近几天 K 线时先调此接口再转时间戳） | `get-nth-trade-date` |\n\n### 近 N 个交易日 K 线（必选流程）\n\n用户问「某 ETF 近 10 日 K 线」「恒生生物科技 ETF 易方达近 10 日 K 线数据」等时，需要的是**从今天往前一共 N 个交易日**的 K 线，必须按以下顺序调用：\n\n1. **先**调用 `get-nth-trade-date --n <N>`（如 `--n 10`），得到 `current_date`、`nth_trade_date`、`n`。\n2. **再**调用 `etf-ohlcs`：将 `current_date` 按北京时间转为该日结束时刻的毫秒时间戳作为 `--until_ts_ms`，并传 `--limit <N>`（与上面 N 一致），即可得到从第 N 个交易日至当前共 N 根日 K 线。\n\n示例（恒生生物科技 ETF 易方达近 10 日 K 线）：\n\n```bash\n# 步骤 1：获取前 10 个交易日\npython <RUN_PY> get-nth-trade-date --n 10\n# 假设返回 nth_trade_date=2026-03-04, current_date=2026-03-18\n\n# 步骤 2：用 current_date 对应日结束时间戳 + limit=10 查 K 线（需先解析步骤 1 的 JSON，将 current_date 转为东八区 23:59:59 毫秒时间戳）\npython <RUN_PY> etf-ohlcs --etf <该ETF代码> --span DAY1 --limit 10 --until_ts_ms <current_date 当日结束的毫秒时间戳>\n```\n\n> **PCF 相关**：使用 etf-pcfs / etf-pcf-download 时需**先判断交易所**——ETF 代码 **15** 开头为深交所（filename 前缀 **pcf_**），**51、56** 等为上交所（前缀 **ssepcf_**）；或先调 etf-pcfs 取列表，用返回的 `items[].filename` 再下载。\n\n---\n\n## 能力总览\n\n- **`get-nth-trade-date`**：获取当前日期的前 N 个交易日。必填：`--n`（≥1）。查「近 N 天」K 线时先调本接口得到 `nth_trade_date`，再按东八区转为毫秒时间戳用于 etf-ohlcs 等。\n- **`etf-detail`**：查询单只 ETF 详情（名称、行情、盘口、市值、涨跌幅、跟踪指数、投资类型等）。必填：`--etf`；可选 `--masks`。\n- **`etf-list-paginated`**：ETF 分页列表，支持分页、排序、筛选。可选：`--order_by`/`--ob`、`--filter`、`--masks`、`--page_size`、`--page_no`、`--filter_index`。\n- **`etf-ohlcs`**：查询单只 ETF OHLC K 线（开高低收、成交量、成交额），附带 MA5/MA10/MA20。必填：`--etf`、`--span`（DAY1/WEEK1/MONTH1/YEAR1）；可选 `--limit`、`--until_ts_ms`。\n- **`etf-prices`**：查询单只 ETF 分钟级分时价格。必填：`--etf`；时间范围二选一：`--since`（TODAY、FIVE_DAYS_AGO、TRADE_DAYS_AGO(n)）或 `--since_ts_ms`。\n- **`etf-pcfs`**：指定日期 ETF PCF 列表（申购赎回清单文件列表）。必填：`--date`（YYYYMMDD）；可选：`--page`、`--page_size`。使用前需先判断交易所：深交所（15xxxx）→ filename 前缀 pcf_，上交所（51/56xxxx）→ ssepcf_。\n- **`etf-pcf-download`**：按文件名下载 PCF XML 文件。必填：`--filename`；可选：`--output`。**先判断交易所**再拼 filename：深交所（15xxxx）用 pcf_{code}_{date}.xml，上交所（51/56xxxx）用 ssepcf_{code}_{date}.xml；或先调 etf-pcfs 取列表再取 items[].filename。\n- **`etf-component`**：查询单只 ETF 成份股列表（代码与名称）。必填：`--symbol`（如 510300.XSHG）；接口报错或未找到时将接口返回的错误信息原样输出到 stderr。\n- **`etf-pre-single`**：查询单只 ETF 盘前数据（申购赎回单位、净值、现金差额等）。必填：`--symbol`；可选：`--date`（YYYYMMDD，不传为当日 CST）；接口报错或未找到时将接口返回的错误信息原样输出到 stderr。\n\n---\n\n## 使用流程\n\n1. **记录本文件绝对路径**，将 `/SKILL.md` 替换为 `/run.py` 得到 `<RUN_PY>`。\n2. **理解用户意图**，从「询问方式与子 skill 对应表」或「能力总览」匹配子 skill 名称。\n3. （可选）读取 `sub-skills/<子skill名>/SKILL.md` 了解接口与参数。\n4. **执行**：`python <RUN_PY> <子skill名> [参数...]`，获取 JSON 输出。\n5. **解析并输出**：以表格或要点形式展示给用户。\n","tags":{"latest":"1.0.1"},"stats":{"comments":0,"downloads":1037,"installsAllTime":1,"installsCurrent":1,"stars":49,"versions":2},"createdAt":1773667597382,"updatedAt":1778491953611},"latestVersion":{"version":"1.0.1","createdAt":1773887313063,"changelog":"**新增多项子技能，扩展 ETF 数据查询能力。**\n\n- 新增 `etf-component`：支持查询单只 ETF 成份股列表。\n- 新增 `etf-pre-single`：支持查询单只 ETF 盘前数据（申购赎回单位、净值、现金差额等）。\n- 新增 `get-nth-trade-date`：支持获取前 N 个交易日，便于查询近 N 日 K 线。\n- SKILL.md 增补上述新子技能的参数说明、调用示例、典型应用场景与组合查询流程。\n- 子技能表、能力总览、使用说明均同步更新，提升 ETF 查询的流程化体验。","license":"MIT-0"},"metadata":null,"owner":{"handle":"shawn92","userId":"s178tyza29hgx3h8nsvhcmdphs83h6af","displayName":"Shawn92","image":"https://avatars.githubusercontent.com/u/17521361?v=4"},"moderation":null}