gangtise-openapi-cli 0.33.0 → 0.34.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +21 -20
- package/dist/src/cli.js +151 -55
- package/dist/src/core/commandBodies.js +9 -7
- package/dist/src/core/errors.js +6 -3
- package/dist/src/core/quoteSharding.js +11 -11
- package/dist/src/version.js +1 -1
- package/gangtise-openapi/SKILL.md +36 -35
- package/gangtise-openapi/references/commands/ai.md +2 -3
- package/gangtise-openapi/references/commands/fundamental.md +3 -2
- package/gangtise-openapi/references/commands/indicator.md +49 -33
- package/gangtise-openapi/references/commands/insight.md +10 -11
- package/gangtise-openapi/references/commands/quote.md +44 -25
- package/gangtise-openapi/references/commands/reference-and-lookup.md +3 -3
- package/gangtise-openapi/references/commands/vault.md +2 -1
- package/gangtise-openapi/references/examples.md +7 -7
- package/gangtise-openapi/references/fields.md +2 -2
- package/gangtise-openapi/references/lookup-ids.md +2 -2
- package/gangtise-openapi/references/response-schema.md +4 -4
- package/package.json +1 -1
|
@@ -6,41 +6,54 @@
|
|
|
6
6
|
|
|
7
7
|
**关键规则**:查"最近"K线必须显式 `--start-date`/`--end-date` 拉范围,再从 `tradeDate` 取尾部最近 N 条;不要只用 `--limit N`(会截取查询窗口开头)。
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
🔴 **全市场关键字换了(2026-08-14)**:`quote day-kline` 的 `--security all` **已不再支持**,改为三个市场关键字之一——`aShares` / `hkStocks` / `usStocks`,且**必须单独传**(不能与证券代码或另一个关键字混填)。传 `all` 或混填 CLI 会直接报错并提示正确写法。三个已下线的旧命令(`day-kline-hk` / `day-kline-us` / `index-day-kline`)仍认 `all`。
|
|
10
|
+
|
|
11
|
+
**自动分片**:全市场关键字跨日期范围时 CLI 自动按日切片并并发执行,合并结果返回,无需手动分批。分片粒度按各市场单个交易日的行数规模定,保证单请求不撞 10000 行的 API 上限:
|
|
12
|
+
|
|
13
|
+
| 命令 | 全市场关键字 | 分片粒度 |
|
|
14
|
+
| :-- | :-- | :-- |
|
|
15
|
+
| `day-kline` | `aShares` | 1 天/片 |
|
|
16
|
+
| `day-kline` | `hkStocks` | 2 天/片 |
|
|
17
|
+
| `day-kline` | `usStocks` | 1 天/片 |
|
|
18
|
+
| `fund-flow` | `aShares` | 1 天/片 |
|
|
19
|
+
| `day-kline-hk` / `day-kline-us` / `index-day-kline`(旧) | `all` | 2 / 1 / 15 天/片 |
|
|
20
|
+
|
|
21
|
+
分片路径会自动把 `limit` 抬到 10000(API 上限),避免默认 6000 行截断;按日分片自动跳过周六日。
|
|
10
22
|
|
|
11
23
|
**日K线历史性**(v0.14.0 起 API 文档明确):所有日K线接口仅返回**历史数据**,不提供实时行情。盘中实时数据请改用 `quote realtime`。当日数据入库时间:A 股约 15:30、港股约 16:30、美股约 07:00(北京时间)。
|
|
12
24
|
|
|
13
25
|
---
|
|
14
26
|
|
|
15
|
-
## 日 K
|
|
27
|
+
## 日 K 线(统一,A 股 / 港股 / 美股 / 指数) `quote day-kline`
|
|
16
28
|
|
|
17
29
|
```bash
|
|
18
30
|
gangtise quote day-kline [--security <code>] [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--limit <n>] [--field <name>]
|
|
19
31
|
```
|
|
20
32
|
|
|
21
|
-
-
|
|
22
|
-
- `--limit` 默认 6000,上限 10000
|
|
23
|
-
- 常用字段:`open` `high` `low` `close` `pctChange` `volume` `amount`
|
|
24
|
-
|
|
25
|
-
## 日 K 线(港股) `quote day-kline-hk`
|
|
33
|
+
**2026-08-14 起这一个命令覆盖全部品种**,港股 / 美股 / 指数不用再换命令,也可以在一次请求里混着传:
|
|
26
34
|
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
35
|
+
| 品种 | 代码格式 | 示例 |
|
|
36
|
+
| :-- | :-- | :-- |
|
|
37
|
+
| A 股 | `.SH` `.SZ` `.BJ` | `600519.SH` `835305.BJ` |
|
|
38
|
+
| 港股 | `.HK` | `00700.HK` |
|
|
39
|
+
| 美股 | `.O` 纳斯达克 / `.N` 纽交所 / `.A` AMEX | `AAPL.O` |
|
|
40
|
+
| 交易所指数 | `.SH` `.SZ` `.BJ` | `000001.SH` 上证指数、`399006.SZ` 创业板指 |
|
|
41
|
+
| 概念指数 | `.GT` | `880134.GT` 机器人 |
|
|
42
|
+
| 行业指数 | `.CI` 中信 / `.SWI` 申万(一二三级) | `821031.SWI` |
|
|
30
43
|
|
|
31
|
-
-
|
|
44
|
+
- **全市场**:`--security aShares` / `hkStocks` / `usStocks`,**必须单独传**(见文件开头)。⚠️ 指数**不支持**全市场关键字,必须逐个传代码
|
|
45
|
+
- 混市场查询时各证券只返回其所属交易所的交易日:春节期间 A 股休市而美股正常,则当期只有美股行;美国独立日反之
|
|
32
46
|
- `--limit` 默认 6000,上限 10000
|
|
47
|
+
- 常用字段:`open` `high` `low` `close` `pctChange` `volume` `amount` `adjustFactor`
|
|
48
|
+
- `adjustFactor` 复权因子:后复权价 = 不复权价 × `adjustFactor`;前复权价 = 不复权价 × `adjustFactor` ÷ 最新交易日的 `adjustFactor`。**指数无复权因子,该字段为 `null`**
|
|
33
49
|
|
|
34
|
-
##
|
|
50
|
+
## ⚠️ 已下线的三个旧命令(仍可调用)
|
|
35
51
|
|
|
36
|
-
|
|
37
|
-
gangtise quote day-kline-us [--security <code>] [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--limit <n>] [--field <name>]
|
|
38
|
-
```
|
|
52
|
+
`quote day-kline-hk` / `quote day-kline-us` / `quote index-day-kline` 的能力已并入上面的 `day-kline`,官方于 2026-08-14 把它们从菜单下线,接口仍可调用。**新代码一律用 `day-kline`**,理由不止是少记三个命令:
|
|
39
53
|
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
43
|
-
- 字段与 A 股/港股相同,货币单位为美元
|
|
54
|
+
- 旧命令**不校验证券代码**——传错代码返回 `{"total":0}` 而不是报错,与「该票该区间真无数据」无法区分;`day-kline` 会报 `120001`
|
|
55
|
+
- 参数与字段和 `day-kline` 完全一致(`--security` / `--start-date` / `--end-date` / `--limit` / `--field`),迁移只是换命令名
|
|
56
|
+
- 三者的全市场关键字仍是 `all`(不是 `aShares` 那套)
|
|
44
57
|
|
|
45
58
|
## 实时行情 `quote realtime`
|
|
46
59
|
|
|
@@ -48,8 +61,9 @@ gangtise quote day-kline-us [--security <code>] [--start-date <YYYY-MM-DD>] [--e
|
|
|
48
61
|
gangtise quote realtime [--security <code>] [--field <name>]
|
|
49
62
|
```
|
|
50
63
|
|
|
51
|
-
-
|
|
52
|
-
- **全市场关键字**:`--security aShares` 全部 A 股 /
|
|
64
|
+
- **覆盖三大市场 + 指数**:A 股 / 港股 / 美股个股与交易所指数(`.SH`/`.SZ`/`.BJ`)、概念指数(`.GT`)、行业指数(`.CI`/`.SWI`)可混合传入(如 `--security 600519.SH --security 00700.HK --security 000001.SH --security 880134.GT`)
|
|
65
|
+
- **全市场关键字**:`--security aShares` 全部 A 股 / `hkStocks` 全部港股 / `usStocks` 全部美股,**必须单独传**(不能与代码或另一个关键字混填,CLI 会本地拦截);建议配合 `--field` 精简返回字段。⚠️ 指数不支持全市场关键字
|
|
66
|
+
- 指数返回的是点位,无货币单位;概念 / 行业指数交易时间与 A 股一致
|
|
53
67
|
- 返回**最新时刻**的行情快照(最新价/开高低/涨跌/成交量额/振幅)
|
|
54
68
|
- 非交易时间返回最近一个交易日的收盘快照;停牌证券返回停牌前最后一个有效快照
|
|
55
69
|
- **实测全量字段(16 个,2026-07-24)**:`securityCode` `exchange` `tradeDate` `tradeTime` `open` `high` `low` `latestPrice` `preClose` `change` `pctChange` `volume` `amount` `turnoverRate` `amplitude` `volumeRatio`
|
|
@@ -74,24 +88,29 @@ gangtise quote fund-flow [--security <code>] [--start-date <YYYY-MM-DD>] [--end-
|
|
|
74
88
|
- 金额单位:元;占比单位:%(各分类流入占比之和 = 100)
|
|
75
89
|
- 无积分消耗
|
|
76
90
|
|
|
77
|
-
## 指数日 K 线 `quote index-day-kline`
|
|
91
|
+
## 指数日 K 线 `quote index-day-kline`(⚠️ 已下线,改用 `day-kline`)
|
|
78
92
|
|
|
79
93
|
```bash
|
|
80
94
|
gangtise quote index-day-kline [--security <code>] [--start-date <YYYY-MM-DD>] [--end-date <YYYY-MM-DD>] [--limit <n>] [--field <name>]
|
|
81
95
|
```
|
|
82
96
|
|
|
83
|
-
- 沪深京指数:如 `000001.SH` 上证综指、`399001.SZ` 深成指;`--security all`
|
|
97
|
+
- 沪深京指数:如 `000001.SH` 上证综指、`399001.SZ` 深成指;`--security all` 全市场指数(**仍是 `all`,不是 `aShares` 那套**)
|
|
84
98
|
- `--limit` 默认 6000,上限 10000
|
|
85
99
|
- 常用字段:`securityCode` `securityName` `tradeDate` `open` `high` `low` `close` `preClose` `change` `pctChange` `volume` `amount`
|
|
86
100
|
- `securityName` 为指数名称(如 `上证指数`),v0.15.0 起返回
|
|
101
|
+
- **还值得用它的两个场景**(都是 `day-kline` 做不到的,实测 2026-08-13):
|
|
102
|
+
1. **一次拿全部沪深京指数**(`--security all`)——`day-kline` 的指数必须逐个传代码
|
|
103
|
+
2. **要指数名称**——`index-day-kline` 返回 `securityName`(如「上证指数」),`day-kline` **没有这个字段**,查指数只拿得到代码
|
|
104
|
+
- 反过来 `day-kline` 独有 `adjustFactor`(复权因子),但指数本来就没有复权,该字段查指数时恒为 `null`
|
|
87
105
|
|
|
88
|
-
## 分钟 K
|
|
106
|
+
## 分钟 K 线 `quote minute-kline`
|
|
89
107
|
|
|
90
108
|
```bash
|
|
91
109
|
gangtise quote minute-kline --security <code> [--start-time <datetime>] [--end-time <datetime>] [--limit <n>] [--field <name>]
|
|
92
110
|
```
|
|
93
111
|
|
|
94
|
-
-
|
|
112
|
+
- 支持**沪深** A 股个股(`.SH` / `.SZ`,不含北交所)、交易所指数(`.SH` / `.SZ`)、概念指数(`.GT`)、行业指数(`.CI` / `.SWI`),2026-08-14 起扩展;**必须传 `--security`**(否则返回 `100003`,msg 为「securityCode不可为空」;2026-07-20 实测)
|
|
113
|
+
- **一次只能查一只**(参数是 `securityCode` 单值,不是列表),要多只就循环调用
|
|
95
114
|
- `--start-time` / `--end-time`:`yyyy-MM-dd HH:mm:ss`(兼容 `yyyy-MM-dd` 自动补全)
|
|
96
115
|
- `--limit` 默认 6000,上限 10000
|
|
97
116
|
- 常用字段:`securityCode` `tradeTime` `open` `high` `low` `close` `change` `pctChange` `volume` `amount`
|
|
@@ -108,7 +108,7 @@ gangtise reference constant-category [--format json]
|
|
|
108
108
|
>
|
|
109
109
|
> 先记住三套码的归属,**别把行业码算到 `gangtiseIndustry` 头上**:`citicIndustry` = 30 条行业码 `1008001xx`;`swIndustry` = 31 条行业码 `104xx0000`;`gangtiseIndustry` = **只有 6 条方向码** `122000xxx`(宏观 `122000001` / 策略 `122000002` / 固收 `122000003` / 金工 `122000004` / 海外 `122000005` / 其他 `122000007`),里面**没有任何行业**,去它那里找「食品饮料」永远找不到。
|
|
110
110
|
>
|
|
111
|
-
> - **`--industry`(industryList)→ 用 `citicIndustry`(`1008001xx`)**:opinion / research / foreign-report / official-account 正确过滤。`swIndustry`(`104xx0000`)在这 4 个上**也生效,但不是等效**——两套码的行业成分不同,4 个里有 2 个结果集对不上(research / foreign-report 完全一致;**opinion 与 official-account 传两套码取回的条数相差约 2%–5%**)。所以**统一用中信码**,同一批查询里别把两套码混着传。方向码 `122000xxx` 在 `--industry` 上一律返 0。⚠️
|
|
111
|
+
> - **`--industry`(industryList)→ 用 `citicIndustry`(`1008001xx`)**:opinion / research / foreign-report / official-account 正确过滤。`swIndustry`(`104xx0000`)在这 4 个上**也生效,但不是等效**——两套码的行业成分不同,4 个里有 2 个结果集对不上(research / foreign-report 完全一致;**opinion 与 official-account 传两套码取回的条数相差约 2%–5%**)。所以**统一用中信码**,同一批查询里别把两套码混着传。方向码 `122000xxx` 在 `--industry` 上一律返 0。⚠️ 一个例外:`insight foreign-opinion` / `independent-opinion` 只要传 `--industry` 就拿不到数据(不报错,且 **payload 是字面 `null`、不是空 list**,详见 `insight.md`),只能不带该过滤取回后本地筛。`vault wechat-message-list` 的 `--industry` **只认中信码**,申万码会被静默忽略并返回全量(详见 `vault.md`)。
|
|
112
112
|
> - **`--research-area`(researchAreaList)→ 用 `citicIndustry` 行业码 `1008001xx`,方向再叠 `gangtiseIndustry` 的 `122000xxx`**。⚠️ **申万码 `104xx0000` 只有 `summary` / `pamirs-summary` 认**,其余端点返 0(与传乱码表现一致,不报错)。逐端点实测(同一行业分别传三套码,✅ = 正常过滤,❌ = 返 0):
|
|
113
113
|
>
|
|
114
114
|
> | 端点 | 中信 `1008001xx` | 申万 `104xx0000` | 方向 `122000xxx` |
|
|
@@ -224,9 +224,9 @@ gangtise lookup meeting-org list # 会议/牵头机构全量(--instit
|
|
|
224
224
|
| 银行 / 银行股 | 银行 | `104480000` | `821047.SWI` |
|
|
225
225
|
| 汽车 / 新车 | 汽车 | `104280000` | `821036.SWI` |
|
|
226
226
|
|
|
227
|
-
> ¹ 第 3 列是**申万码**(`104xx0000`),仅在 opinion / research / foreign-report / official-account 上可作 `--industry` 使用,且**与中信码不等效**(opinion / official-account 两套码结果集不同,见上方 ⭐ 权威口径);用于 `--research-area` 时只有 summary / pamirs-summary 认,其余端点返 0。`vault wechat-message-list` 的 `--industry`
|
|
227
|
+
> ¹ 第 3 列是**申万码**(`104xx0000`),仅在 opinion / research / foreign-report / official-account 上可作 `--industry` 使用,且**与中信码不等效**(opinion / official-account 两套码结果集不同,见上方 ⭐ 权威口径);用于 `--research-area` 时只有 summary / pamirs-summary 认,其余端点返 0。`vault wechat-message-list` 的 `--industry` **只认中信码,申万码被静默忽略**。通用/推荐的**中信码**(`1008001xx`)见 `references/lookup-ids.md` 中信表或 `constant-list --category citicIndustry`。
|
|
228
228
|
|
|
229
|
-
> **参数名选择**:`--industry`(industryList,用 `citicIndustry` 码 `1008001xx`)用于 opinion / research / foreign-report / official-account
|
|
229
|
+
> **参数名选择**:`--industry`(industryList,用 `citicIndustry` 码 `1008001xx`)用于 opinion / research / foreign-report / official-account / `vault wechat-message-list`(后者只认中信码);`foreign-opinion` / `independent-opinion` 也有这个参数,但**当前不生效**,见上方 ⭐ 权威口径;`--research-area`(researchAreaList,行业用 `citicIndustry` 码 `1008001xx`、方向用 `gangtiseIndustry` 码 `122000xxx`)用于 opinion / summary / pamirs-summary / roadshow / site-visit / forum / my-conference;`--gts-code` 仅用于 `ai security-clue`(需申万格式 `821xxx.SWI`,不是数字 ID)。注意 strategy(线下策略会)无 `--research-area`,只按 `--institution` / `--location` 筛。
|
|
230
230
|
|
|
231
231
|
> **"消费"歧义**:用户说"消费/大消费"覆盖多个子行业(食品饮料 `104340000` / 商贸零售 `104450000` / 社会服务 `104460000` / 家电 `104330000` / 纺织服饰 `104350000` / 美容护理 `104770000`),需向用户确认具体方向,或用 `--keyword 消费` 做宽泛搜索。
|
|
232
232
|
|
|
@@ -49,7 +49,8 @@ gangtise vault wechat-message-list [--keyword <text>] [--security <code>] [--wec
|
|
|
49
49
|
|
|
50
50
|
- 数据权限:仅用户已绑定并激活群消息助理、且助理已入群的群消息
|
|
51
51
|
- `--security`:按证券代码过滤(如 `000001.SZ`),可重复
|
|
52
|
-
- `--industry
|
|
52
|
+
- `--industry`:**只认中信码**(`1008001xx`,见 `reference constant-list --category citicIndustry`)。⚠️ 申万码(`104xx0000`)和任何不认识的值都会被**静默忽略、返回未过滤的全量**,不报错——所以别混用码表,拿到的条数与不加过滤一样时先核对码系。返回行里不含行业标签字段,过滤在服务端完成
|
|
53
|
+
- 🔴 **`--industry` 是收窄工具,不是全量召回**:行业标签由服务端标注,**同一条消息可能挂多个行业,也可能一个都没挂**。实测同一个关键词加上「本行业」过滤后,命中数掉到三到四成——**少掉的既有没打标签的,也有被标到相邻行业去的**(如半导体相关的消息在计算机 / 机械 / 通信下同样查得到)。所以「按行业筛出 N 条」不能读成「该行业只有 N 条」;要尽量全,用 `--keyword` 取回后本地判断,或把相邻行业码一起查再去重
|
|
53
54
|
- `--wechat-group-id`:先用 `vault wechat-chatroom-list` 查;可重复
|
|
54
55
|
- `--category`:`text` | `image` | `documents` | `url`(可重复)
|
|
55
56
|
- `--tag`:`roadShow` | `research` | `strategyMeeting` | `meetingSummary` | `industryComment` | `companyComment` | `earningsReview`(可重复)
|
|
@@ -74,13 +74,13 @@
|
|
|
74
74
|
**用户**:"比亚迪 A 股和港股最近的日 K 线"
|
|
75
75
|
|
|
76
76
|
```
|
|
77
|
-
1. 路由 → quote day-kline
|
|
77
|
+
1. 路由 → quote day-kline(2026-08-14 起一个命令覆盖 A/港/美股,跨市场可一次查完)
|
|
78
78
|
2. 比亚迪 A 股 002594.SZ,港股 01211.HK
|
|
79
79
|
"最近" → K 线默认今日往前 45 天(保证含最近 10 个交易日)
|
|
80
80
|
3. Pre-flight:认证 OK
|
|
81
|
-
4. gangtise quote day-kline --security 002594.SZ --start-date 2026-03-19 --end-date 2026-05-03 --format json
|
|
82
|
-
|
|
83
|
-
|
|
81
|
+
4. gangtise quote day-kline --security 002594.SZ --security 01211.HK --start-date 2026-03-19 --end-date 2026-05-03 --format json
|
|
82
|
+
5. 按 securityCode 分组,各自按 tradeDate 取尾部最近 10 个交易日
|
|
83
|
+
注意:两地交易日历不同(A 股与港股假期不重合),同一日期未必两边都有行——按 securityCode 分组后再取尾部,别按行下标对齐
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
## 例 6:指数最近值(务必拉范围)
|
|
@@ -88,10 +88,10 @@
|
|
|
88
88
|
**用户**:"查上证综指最近的指数"
|
|
89
89
|
|
|
90
90
|
```
|
|
91
|
-
1. 路由 → quote index-day-kline
|
|
91
|
+
1. 路由 → quote day-kline(指数已并入,index-day-kline 已下线)
|
|
92
92
|
2. 上证综指 → 000001.SH;"最近" → 今日往前 45 天
|
|
93
93
|
3. Pre-flight:认证 OK;今天若周末 end-date 仍填当天,API 返回最近交易日
|
|
94
|
-
4. gangtise quote
|
|
94
|
+
4. gangtise quote day-kline --security 000001.SH --start-date 2026-03-19 --end-date 2026-05-03 --format json
|
|
95
95
|
5. 按 tradeDate 取尾部最近 10 个交易日。**不要用 --limit 20**(截取的是窗口开头)
|
|
96
96
|
```
|
|
97
97
|
|
|
@@ -257,7 +257,7 @@
|
|
|
257
257
|
--date 2026-07-31 --key-by code --format json
|
|
258
258
|
4. 按 security 合并两张宽表(列头即 indicatorCode,各取所需日期的值);不要把不同日期语义的指标塞进同一个 --date。
|
|
259
259
|
5. 计费:search 免费;两次取数各按请求单元格数量计费,每次不足 100 单元格按 100 计。
|
|
260
|
-
6. 无数据(无覆盖 / 非交易日 / 未来日期)一律保留行列并给占位单元格,退出码 0——但占位值多数是 null、个别指标(如 is_dnrpnp)是 0,0 会穿过比较与聚合,别当真值(见 commands/indicator.md
|
|
260
|
+
6. 无数据(无覆盖 / 非交易日 / 未来日期)一律保留行列并给占位单元格,退出码 0——但占位值多数是 null、个别指标(如 is_dnrpnp)是 0,0 会穿过比较与聚合,别当真值(见 commands/indicator.md)。代码写错或参数名写错则直接报 100003 并点名是哪个(指标码拼错、证券后缀错如美股写成 .US、参数名写错、同 code 重复配置),按报错改即可。
|
|
261
261
|
```
|
|
262
262
|
|
|
263
263
|
## 例 15b:帕米尔专家纪要(新库,筛选项与踩坑都和 summary 不同)
|
|
@@ -6,9 +6,9 @@
|
|
|
6
6
|
|
|
7
7
|
## Quote 行情
|
|
8
8
|
|
|
9
|
-
### 日K
|
|
9
|
+
### 日K线 `quote day-kline`(A股 / 港股 / 美股 / 各类指数;旧的 `day-kline-hk` / `day-kline-us` 已下线,字段相同)
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
各市场字段相同(货币单位随市场:A股=元、港股=港元、美股=美元;**指数为点位、无货币单位,且 `adjustFactor` 恒为 `null`**):
|
|
12
12
|
|
|
13
13
|
| 字段 | 含义 | 字段 | 含义 |
|
|
14
14
|
|------|------|------|------|
|
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
|
|
7
7
|
## 中信行业分类(--industry 参数)
|
|
8
8
|
|
|
9
|
-
完整列表用 `reference constant-list --category citicIndustry`(30 条)。**`--industry` 全命令通用首选用这套(`1008001xx`)**——opinion / research / foreign-report / official-account
|
|
9
|
+
完整列表用 `reference constant-list --category citicIndustry`(30 条)。**`--industry` 全命令通用首选用这套(`1008001xx`)**——opinion / research / foreign-report / official-account 都正确过滤,`vault wechat-message-list` 也认这一套(⚠️ 两个例外:`insight foreign-opinion` / `independent-opinion` 传了 `--industry` 拿不到数据、且 **payload 是字面 `null` 不是空 list**);这套 ID 同时也是 `--research-area` **行业维度唯一全端点通吃的一套**(见下方研究方向)。
|
|
10
10
|
|
|
11
11
|
| ID | 行业 | ID | 行业 |
|
|
12
12
|
|----|------|----|------|
|
|
@@ -30,7 +30,7 @@
|
|
|
30
30
|
|
|
31
31
|
## 申万行业(--industry 参数)
|
|
32
32
|
|
|
33
|
-
完整列表用 `reference constant-list --category swIndustry`(31 条)。⚠️ 申万码(`104xx0000`)只在**部分** insight list 上可作 `--industry` 使用,且**与中信码不等效**——两套码行业成分不同,实测 opinion 与 official-account 上取回的结果集就对不上(同一行业相差约 2%–5%),别混用;用于 `--research-area` 时**只有 `summary` / `pamirs-summary` 认,其余端点返 0**(不报错,与传乱码表现一致)。`vault wechat-message-list` 的 `--industry`
|
|
33
|
+
完整列表用 `reference constant-list --category swIndustry`(31 条)。⚠️ 申万码(`104xx0000`)只在**部分** insight list 上可作 `--industry` 使用,且**与中信码不等效**——两套码行业成分不同,实测 opinion 与 official-account 上取回的结果集就对不上(同一行业相差约 2%–5%),别混用;用于 `--research-area` 时**只有 `summary` / `pamirs-summary` 认,其余端点返 0**(不报错,与传乱码表现一致)。`vault wechat-message-list` 的 `--industry` **只认中信码**,传申万码会被静默忽略并返回全量——哪套码用于哪些命令的**权威口径见 `references/commands/reference-and-lookup.md`「行业 / 研究方向过滤——选哪套 category」**(含逐端点实测矩阵),勿在此重复枚举。拿不准就统一用上方中信码。
|
|
34
34
|
|
|
35
35
|
| ID | 行业 | ID | 行业 | ID | 行业 |
|
|
36
36
|
|----|------|----|------|----|------|
|
|
@@ -4,7 +4,7 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
|
|
|
4
4
|
|
|
5
5
|
> 例外:`indicator`(EDE)四个接口(`search` / `cross-section` / `time-series` / `screener`)成功时**双层信封**(`data` 里再裹一层 `{code, status, data}`)。内层字段名 2026-08-01 起为 `securityCodeList` / `securityNameList` / `indicatorList[{code,name,dataType}]`(screener 另带 `field`),`values` 是 2D 矩阵:**截面与 screener 为 `[证券][指标]`**(该版转置过,此前是 `[指标][证券]`)、时序仍为 `[序列][日期]`。
|
|
6
6
|
>
|
|
7
|
-
> **缺数据 vs 代码写错**(2026-08-
|
|
7
|
+
> **缺数据 vs 代码写错**(2026-08-15 实测):无数据 / 无覆盖一律保留行列并给占位单元格——**多数指标是 `null`,个别(如 `is_dnrpnp`)是 `0`,`0` 会穿过比较与聚合,详见 `commands/indicator.md`**。**代码写错则直接报 `100003` 并点名**(指标 code 拼错 →「指标 xxx 不存在」;证券 code 后缀错 →「xxx 不是有效证券或者板块ID」,美股是 `.O`/`.N` 不是 `.US`),**无论同批有没有正确的 code 都会报**。CLI 的 `indicator` 子命令已二次解包、拍平成宽表;`partial` + `omittedIndicators`/`omittedSecurities` + 退出码 3 的差集检测仍保留作兜底,但当前服务端行为下基本收不到样本。**`screener` 例外**:把缺列的变量当作无法求值,按表达式的**布尔结构**判断是否还有分支能成立(`A && B` 要两边、`A || B` 只要一边)。一条都不剩 → **退出码 1 且不输出**(那些行以「通过了该条件」的名义呈现,而条件根本无法证明被执行过);仍有分支可求值、或缺的只是输出用的辅助变量 → `partial` + 退出码 3。直接 `raw call indicator.*` 只会剥外层,内层需自行处理。
|
|
8
8
|
|
|
9
9
|
## 通用模式(5 类)
|
|
10
10
|
|
|
@@ -23,7 +23,7 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
|
|
|
23
23
|
| insight opinion list | `{list, total}` | `list[].id` / `list[].title` / `list[].publishDate` / `list[].chiefName` / `list[].securityCode` / `list[].institutionName` |
|
|
24
24
|
| insight summary list | `{list, total}` | `list[].summaryId` / `list[].title` / `list[].publishTime` |
|
|
25
25
|
| insight summary download | 文件路径(stdout) | — |
|
|
26
|
-
| insight pamirs-summary list | `{list, total}` | `list[].summaryId` / `list[].title` / `list[].brief` / `list[].summaryTime`(纪要生成时间)/ `list[].publishTime`(发布时间)/ `list[].securityList[]{securityCode, securityName}` / `list[].researchAreaList[]{researchAreaId, researchAreaName}` / `list[].conceptList[]{conceptId, conceptName}` / `list[].categoryList` / `list[].marketList`。⚠️
|
|
26
|
+
| insight pamirs-summary list | `{list, total}` | `list[].summaryId` / `list[].title` / `list[].brief` / `list[].summaryTime`(纪要生成时间)/ `list[].publishTime`(发布时间)/ `list[].securityList[]{securityCode, securityName}` / `list[].researchAreaList[]{researchAreaId, researchAreaName}` / `list[].conceptList[]{conceptId, conceptName}` / `list[].categoryList` / `list[].marketList`。⚠️ `conceptList` / `categoryList` / `marketList` 三个标签字段**稀疏,且是否有值随记录和查法而变**:不带筛选时经常整条为空,用 `--category` 或 `--market` 任一过滤时回填率明显更高(这两个字段绑定,一起有或一起没有)。所以**别拉全量再本地分组**(会漏记录),也**别据此断言某条记录没有该属性**(为空只说明这次没回填)。详见 `commands/insight.md` |
|
|
27
27
|
| insight pamirs-summary download | 文件路径(stdout) | — |
|
|
28
28
|
| insight roadshow / site-visit / strategy / forum list | `{list, total}` | `list[].id` / `list[].title` / `list[].publishTime` / `list[].institution.institutionName` |
|
|
29
29
|
| insight research list | `{list, total}` | `list[].reportId` / `list[].title` / `list[].brief`(全文摘要) / `list[].publishTime` / `list[].publisher.brokerName` / `list[].securityList[].rating` |
|
|
@@ -56,11 +56,11 @@ CLI 自动处理 envelope:`{code, msg, data}` 信封会按 `code === "000000"`
|
|
|
56
56
|
| reference concept-search | `{returnedCount, list}` | `list[].conceptId` / `list[].conceptName` / `list[].matchScore` |
|
|
57
57
|
| reference sector-search | `{returnedCount, list}` | `list[].sectorId` / `list[].sectorName` / `list[].hierarchy`(层级路径) / `list[].matchScore` |
|
|
58
58
|
| reference sector-constituents | `{total, list}` | `list[].gtsCode` / `list[].gtsName`;total=0 说明 sectorId 不对(先 sector-search 确认) |
|
|
59
|
-
| quote day-kline
|
|
59
|
+
| quote day-kline(及已下线的 day-kline-hk / day-kline-us / index-day-kline) | `{fieldList, list}` 或规范化后 `{list: [{...}]}` | `tradeDate` / `securityCode` / `open` / `close` / `pctChange` / `volume` / `adjustFactor`(指数为 `null`);`index-day-kline` 另含 `securityName`(指数名称,v0.15.0 起) |
|
|
60
60
|
| quote minute-kline | `{list: [{...}]}` | `tradeTime` / `open` / `close` / `volume` |
|
|
61
61
|
| quote realtime | `{fieldList, list, total}` 或规范化后 `{list: [{...}]}` | `securityCode` / `exchange` / `tradeDate` / `tradeTime` / `open` / `high` / `low` / `latestPrice` / `preClose` / `change` / `pctChange` / `volume` / `amount` / `turnoverRate` / `amplitude` / `volumeRatio`(共 16 个,**无 `close`、无市值**) |
|
|
62
62
|
| quote fund-flow | `{fieldList, list, total}` 列式 → 规范化后 `{list: [{...}], total}` 宽表 | `securityCode` / `tradeDate` + 请求的字段(`mainNetInflow` / `largeInflow` / `xlargeOutflow` / …) |
|
|
63
|
-
| fundamental income-statement / balance-sheet / cash-flow(含 quarterly / -hk / -us) | `{total, list: [{...}]}` | `fiscalYear` / `period` / `endDate` / `companyName` / `companyType` / `currency` / `unit` + 各 `--field` 字段;港股/美股另含 `timeCovered`(不规则跨度)。⚠️
|
|
63
|
+
| fundamental income-statement / balance-sheet / cash-flow(含 quarterly / -hk / -us) | `{total, list: [{...}]}` | `fiscalYear` / `period` / `endDate` / `companyName` / `companyType` / `currency` / `unit` + 各 `--field` 字段;港股/美股另含 `timeCovered`(不规则跨度)。⚠️ A 股 `*-quarterly` 单季表的 `companyType` 返回未映射的数字码(如 `102119999`),`currency` 正常;累计口径的三张表两列均正确。科目数字不受影响 |
|
|
64
64
|
| fundamental main-business | `{fieldList, list}` 列式 → 规范化后 `{list: [{...}]}` | 前 3 列恒定:`periodName` / `periodEndDate` / `categoryName`(分项名,随 `--breakdown` 变)+ `opRevenue` / `opRevenueYoy` / `opRevenueRatio` / `opCost` / `opCostYoy` / `opCostRatio` / `grossProfit` / `grossProfitYoy` / `grossProfitRatio` / `grossMargin` / `grossMarginYoy` / `grossMarginRatio`(共 15 个,实测 2026-07-24)。`--field` 只能从后 12 个里选 |
|
|
65
65
|
| fundamental valuation-analysis(仅 A 股) | `{fieldList, list}` 列式 → 规范化后 `{list: [{...}]}` | `tradeDate` / `value` / `percentileRank` / `average` / `median` / `upper1Std` / `lower1Std`(共 7 个,实测 2026-07-24);**无 `securityCode`**——误传会拿到一列重复的 `tradeDate` |
|
|
66
66
|
| fundamental earning-forecast(仅 A 股) | `{securityCode, securityName, updateList: [...]}` | `updateList[].date` / `updateList[].fieldList[].forecastYear` + 各 consensus 指标 |
|