stock-sdk 1.10.1 → 2.0.0-beta.1
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 +202 -301
- package/dist/adapters-BvE63CMd.d.cts +77 -0
- package/dist/adapters-BvE63CMd.d.ts +77 -0
- package/dist/addIndicators-DwEr9RKK.d.cts +540 -0
- package/dist/addIndicators-DwEr9RKK.d.ts +540 -0
- package/dist/cache.cjs +1 -0
- package/dist/cache.d.cts +126 -0
- package/dist/cache.d.ts +126 -0
- package/dist/cache.js +1 -0
- package/dist/chunk-2PYGJ5I5.cjs +1 -0
- package/dist/chunk-3NSUE34F.cjs +1 -0
- package/dist/chunk-4PVVFEOQ.js +1 -0
- package/dist/chunk-4Q7UQ5Q3.cjs +1 -0
- package/dist/chunk-4VDLQK6F.cjs +1 -0
- package/dist/chunk-C4CA7QBB.cjs +1 -0
- package/dist/chunk-D2MGPO3R.js +1 -0
- package/dist/chunk-DU7MCVLJ.js +1 -0
- package/dist/chunk-F3KZXCVO.js +1 -0
- package/dist/chunk-G5KF73BW.js +1 -0
- package/dist/chunk-GBHWMR2O.js +1 -0
- package/dist/chunk-LAT6L2TO.js +1 -0
- package/dist/chunk-LCX5Q36O.js +1 -0
- package/dist/chunk-PMERLSCU.cjs +1 -0
- package/dist/chunk-SR7FGCVZ.cjs +1 -0
- package/dist/chunk-TVIEKKDQ.cjs +1 -0
- package/dist/chunk-UBIQBXQ7.js +1 -0
- package/dist/chunk-WCBK5KYA.cjs +1 -0
- package/dist/chunk-WOT6VMZA.js +1 -0
- package/dist/chunk-YR2SVSXB.cjs +1 -0
- package/dist/cli.cjs +22 -0
- package/dist/cli.d.cts +1 -0
- package/dist/cli.d.ts +1 -0
- package/dist/cli.js +22 -0
- package/dist/errors.cjs +1 -0
- package/dist/errors.d.cts +1 -0
- package/dist/errors.d.ts +1 -0
- package/dist/errors.js +1 -0
- package/dist/index-mlzPfoON.d.cts +210 -0
- package/dist/index-mlzPfoON.d.ts +210 -0
- package/dist/index.cjs +1 -1
- package/dist/index.d.cts +55 -3659
- package/dist/index.d.ts +55 -3659
- package/dist/index.js +1 -1
- package/dist/indicators.cjs +1 -0
- package/dist/indicators.d.cts +408 -0
- package/dist/indicators.d.ts +408 -0
- package/dist/indicators.js +1 -0
- package/dist/mcp.cjs +5 -0
- package/dist/mcp.d.cts +93 -0
- package/dist/mcp.d.ts +93 -0
- package/dist/mcp.js +5 -0
- package/dist/screener.cjs +1 -0
- package/dist/screener.d.cts +69 -0
- package/dist/screener.d.ts +69 -0
- package/dist/screener.js +1 -0
- package/dist/sdk-Cg_jTmTk.d.cts +2235 -0
- package/dist/sdk-DOz03n_v.d.ts +2235 -0
- package/dist/signals.cjs +1 -0
- package/dist/signals.d.cts +60 -0
- package/dist/signals.d.ts +60 -0
- package/dist/signals.js +1 -0
- package/dist/symbols.cjs +1 -0
- package/dist/symbols.d.cts +28 -0
- package/dist/symbols.d.ts +28 -0
- package/dist/symbols.js +1 -0
- package/package.json +45 -8
package/README.md
CHANGED
|
@@ -3,22 +3,29 @@
|
|
|
3
3
|
[](https://www.npmjs.com/package/stock-sdk)
|
|
4
4
|
[](https://www.npmjs.com/package/stock-sdk)
|
|
5
5
|
[](https://github.com/chengzuopeng/stock-sdk/blob/master/LICENSE)
|
|
6
|
-
[](https://
|
|
7
|
-
[](https://stock-sdk.linkdiary.cn/mcp/)
|
|
6
|
+
[](https://stock-sdk-v2.linkdiary.cn/mcp/)
|
|
7
|
+
[](https://stock-sdk-v2.linkdiary.cn/mcp/)
|
|
8
8
|
|
|
9
9
|
**[English](./README_EN.md)** | 中文
|
|
10
10
|
|
|
11
11
|
为 **前端和 Node.js 设计的股票行情 JavaScript SDK**。
|
|
12
12
|
|
|
13
|
-
无需 Python、无需后端服务,直接在 **浏览器或 Node.js** 中获取 **A 股 / 港股 / 美股 / 公募基金** 的实时行情与 K
|
|
13
|
+
无需 Python、无需后端服务,直接在 **浏览器或 Node.js** 中获取 **A 股 / 港股 / 美股 / 公募基金** 的实时行情与 K 线数据。还自带 **命令行工具** 与 **MCP server**,一条命令取行情或接入 AI。
|
|
14
14
|
|
|
15
|
-
**✨
|
|
15
|
+
**✨ 零依赖、轻量发布包 | 🌐 Browser + Node.js | 📦 ESM + CJS + subpath | 🧠 完整 TypeScript 类型 | 🖥️ CLI | 🤖 MCP**
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
> 🧪 **v2.0.0 Beta**:v2 是一次架构跃迁(命名空间 API、统一符号模型、`Quote` 可辨识联合、统一错误体系、CLI / MCP / subpath 导出)。
|
|
18
|
+
> 安装 beta:`npm i stock-sdk@beta`。从 v1 升级请先读 [v1 → v2 迁移指南](https://stock-sdk-v2.linkdiary.cn/guide/migration-v1-to-v2)(**破坏性变更,无兼容别名**)。
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
## 📖 官网文档(v2 Beta)
|
|
20
21
|
|
|
21
|
-
|
|
22
|
+
> ## 👉 https://stock-sdk-v2.linkdiary.cn
|
|
23
|
+
>
|
|
24
|
+
> **v2 Beta 的临时官网** —— 完整 API、命名空间总览、CLI / MCP 指南、在线 Playground、v1 → v2 迁移文档全部在这里。先看官网再上手最快。
|
|
25
|
+
>
|
|
26
|
+
> (v1 稳定版文档仍在 https://stock-sdk.linkdiary.cn)
|
|
27
|
+
|
|
28
|
+
📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线 Playground](https://stock-sdk-v2.linkdiary.cn/playground/)
|
|
22
29
|
|
|
23
30
|
🧭 [Stock Dashboard](https://chengzuopeng.github.io/stock-dashboard/):基于 stock-sdk 搭建的股票数据大盘演示站点,欢迎体验。
|
|
24
31
|
|
|
@@ -29,7 +36,6 @@
|
|
|
29
36
|
* 股票行情工具大多是 **Python 生态**,前端难以直接使用
|
|
30
37
|
* 想做行情看板 / Demo,不想额外维护后端服务
|
|
31
38
|
* 财经接口返回格式混乱、编码复杂(GBK / 并发 / 批量)
|
|
32
|
-
* AkShare 很强,但并不适合浏览器或 Node.js 项目
|
|
33
39
|
|
|
34
40
|
**stock-sdk 的目标很简单:**
|
|
35
41
|
|
|
@@ -44,355 +50,250 @@
|
|
|
44
50
|
* 🎓 股票 / 金融课程 Demo
|
|
45
51
|
* 🧪 量化策略原型验证(JS / Node)
|
|
46
52
|
* 🕒 Node.js 定时抓取行情数据
|
|
53
|
+
* 🖥️ 命令行临时查行情 / 🤖 给 AI 工具接数据源
|
|
47
54
|
|
|
48
55
|
---
|
|
49
56
|
|
|
50
57
|
## 特性
|
|
51
58
|
|
|
52
|
-
- ✅
|
|
53
|
-
- ✅
|
|
54
|
-
- ✅
|
|
55
|
-
- ✅
|
|
56
|
-
- ✅
|
|
57
|
-
- ✅
|
|
58
|
-
- ✅
|
|
59
|
-
- ✅
|
|
60
|
-
- ✅
|
|
61
|
-
- ✅
|
|
62
|
-
- ✅
|
|
63
|
-
- ✅
|
|
64
|
-
- ✅
|
|
65
|
-
- ✅ **大宗交易** + **融资融券** 全套数据
|
|
66
|
-
- ✅ 获取全部 **A 股代码列表**(5000+ 只股票)和批量获取**全市场行情**(内置并发控制)
|
|
67
|
-
- ✅ 支持 **provider 级重试 / 限流 / 熔断策略覆盖**,兼容旧的全局请求配置
|
|
68
|
-
- ✅ **AI / MCP 就绪** — 配套 [stock-sdk-mcp](https://www.npmjs.com/package/stock-sdk-mcp) MCP Server,一行命令接入 Cursor / Claude / Gemini 等 AI 工具
|
|
69
|
-
|
|
70
|
-
## 市场支持矩阵
|
|
71
|
-
|
|
72
|
-
不同市场的能力覆盖度差异较大,下表帮你快速判断 SDK 是否覆盖你的场景。
|
|
73
|
-
|
|
74
|
-
- ✅ 已支持
|
|
75
|
-
- ⚠️ 部分支持 / 限制见备注
|
|
76
|
-
- ❌ 暂未实现(市场有此能力或存在数据源,SDK 后续可补)
|
|
77
|
-
- — 概念不适用(该市场 / 产品本身不存在此能力,如基金不会涨停、期货合约无分红)
|
|
78
|
-
|
|
79
|
-
| 能力 | A 股 | 港股 | 美股 | 公募基金 | 期货 | 期权 |
|
|
80
|
-
|------|:----:|:----:|:----:|:--------:|:----:|:----:|
|
|
81
|
-
| 实时行情 | ✅ | ✅ | ✅ | ✅ | ✅ 全球期货 | ✅ ETF / 中金所 / 商品 |
|
|
82
|
-
| 历史 K 线(日/周/月) | ✅ | ✅ | ✅ | ⚠️ 场内 ETF/LOF(走 `getHistoryKline`) | ✅ 国内 + 全球 | ✅ |
|
|
83
|
-
| 分钟 K 线(5/15/30/60) | ✅ | ✅ `getHKMinuteKline` | ✅ `getUSMinuteKline` | ⚠️ 场内 ETF/LOF(走 `getMinuteKline`) | ❌ | ❌ |
|
|
84
|
-
| 当日分时(1 分钟) | ✅ | ✅ `getHKMinuteKline` (period='1') | ✅ `getUSMinuteKline` (period='1') | ⚠️ 场内 ETF/LOF | ❌ | ✅ ETF 期权 |
|
|
85
|
-
| 分红派送 | ✅ | ❌ | ❌ | ✅ 基金 + ETF(`getFundDividendList`) | — | — |
|
|
86
|
-
| 资金流向 | ✅ 个股/大盘/排名/板块 | ❌ | ❌ | — | — | — |
|
|
87
|
-
| 板块(行业 / 概念) | ✅ | ❌ | ❌ | ❌ | — | — |
|
|
88
|
-
| 龙虎榜 | ✅ | — | — | — | — | ✅ 期权龙虎榜 |
|
|
89
|
-
| 沪深港通 / 北向资金 | ✅ 北向 | ✅ 南向 | — | — | — | — |
|
|
90
|
-
| 大宗交易 | ✅ | ❌ | ❌ | — | — | — |
|
|
91
|
-
| 融资融券 | ✅ | — | — | — | — | — |
|
|
92
|
-
| 涨停板 / 盘口异动 | ✅ | — | — | — | — | — |
|
|
93
|
-
| 全市场代码列表 | ✅ 5000+ | ✅ | ✅ | ✅ | ❌ | ❌ |
|
|
94
|
-
| 批量行情 | ✅ | ✅ | ✅ | ❌ | ❌ | ❌ |
|
|
95
|
-
| 库存数据 | — | — | — | — | ✅ 国内 + COMEX | — |
|
|
96
|
-
| 交易日历 | ✅ + `isTradingDay()` 等工具 | ⚠️ 仅市场状态判断(按周一-周五) | ⚠️ 仅市场状态判断(按周一-周五) | — | — | — |
|
|
59
|
+
- ✅ **零依赖**,浏览器 + Node.js 18+ 双端运行;同时提供 **ESM** 和 **CommonJS**
|
|
60
|
+
- ✅ **命名空间 API**:`sdk.quotes.cn()` / `sdk.kline.cn()` / `sdk.options.etf.dailyKline()`,按领域分组、IDE 自动补全友好
|
|
61
|
+
- ✅ **统一符号模型**:`string` 一等公民,`sh600519` / `600519` / `600519.SH` / `00700` / `hk00700` / `AAPL` / `105.AAPL` 等写法容错解析
|
|
62
|
+
- ✅ **A 股 / 港股 / 美股 / 公募基金**实时行情、历史 K 线(日/周/月)、分钟 K 线(1/5/15/30/60)、当日分时
|
|
63
|
+
- ✅ **技术指标**:MA / MACD / BOLL / KDJ / RSI / WR / BIAS / CCI / ATR / OBV / ROC / DMI / SAR / KC
|
|
64
|
+
- ✅ **信号 / 选股 / 回测**:`calcSignals`(金叉死叉/超买超卖等事件识别)、链式选股器、本地回测
|
|
65
|
+
- ✅ **期货 / 期权 / 资金流 / 龙虎榜 / 北向 / 大宗交易 / 融资融券 / 涨停板** 等全套扩展数据
|
|
66
|
+
- ✅ **基金深度数据**:历史净值、实时估值、同类排名走势、基金/ETF 分红送配
|
|
67
|
+
- ✅ **subpath 导出**:`stock-sdk/{indicators,signals,symbols,screener,cache,errors}`,纯计算不拖入网络层,tree-shake 友好
|
|
68
|
+
- ✅ **统一错误体系**:对外只抛 `SdkError`,带标准 `code`,可从 `stock-sdk/errors` 导入
|
|
69
|
+
- ✅ **请求治理**:provider 级重试 / 限流 / 熔断 + 可注入 `fetchImpl` / `signal` / 生命周期 `hooks`
|
|
70
|
+
- ✅ **CLI**:`stock-sdk quote 600519` 终端直接取行情
|
|
71
|
+
- ✅ **内置 MCP server**:`stock-sdk mcp` 一行接入 Cursor / Claude / Codex 等 AI 工具(零依赖手写,无 `@modelcontextprotocol/sdk`)
|
|
97
72
|
|
|
98
|
-
|
|
99
|
-
> 通常有数十秒到数分钟延迟。SDK 不适合做高频交易决策。
|
|
100
|
-
>
|
|
101
|
-
> **港股 / 美股 K 线类型**:自 v1.9.1 起拆分为 `HKHistoryKline` / `USHistoryKline`,
|
|
102
|
-
> 各自带 `currency` 与时区元信息;老的 `HKUSHistoryKline` 别名仍兼容。
|
|
73
|
+
---
|
|
103
74
|
|
|
104
75
|
## 安装
|
|
105
76
|
|
|
106
77
|
```bash
|
|
78
|
+
# v2 Beta(命名空间 API / CLI / MCP)
|
|
79
|
+
npm install stock-sdk@beta
|
|
80
|
+
|
|
81
|
+
# v1 稳定版
|
|
107
82
|
npm install stock-sdk
|
|
108
|
-
# 或
|
|
109
|
-
yarn add stock-sdk
|
|
110
|
-
# 或
|
|
111
|
-
pnpm add stock-sdk
|
|
112
83
|
```
|
|
113
84
|
|
|
114
|
-
##
|
|
85
|
+
## 快速开始
|
|
115
86
|
|
|
116
87
|
```ts
|
|
117
88
|
import { StockSDK } from 'stock-sdk';
|
|
118
89
|
|
|
119
90
|
const sdk = new StockSDK();
|
|
120
91
|
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
'sh600519',
|
|
125
|
-
]);
|
|
126
|
-
|
|
127
|
-
quotes.forEach(q => {
|
|
92
|
+
// 命名空间 API(v2)— 符号写法容错,'600519' / 'sh600519' / '600519.SH' 都可
|
|
93
|
+
const quotes = await sdk.quotes.cnSimple(['sh000001', 'sz000858', 'sh600519']);
|
|
94
|
+
quotes.forEach((q) => {
|
|
128
95
|
console.log(`${q.name}: ${q.price} (${q.changePercent}%)`);
|
|
129
96
|
});
|
|
97
|
+
|
|
98
|
+
// 历史 K 线 + 技术指标
|
|
99
|
+
const kline = await sdk.kline.withIndicators('600519', {
|
|
100
|
+
period: 'daily',
|
|
101
|
+
indicators: { ma: { periods: [5, 10, 20] }, macd: {} },
|
|
102
|
+
});
|
|
103
|
+
|
|
104
|
+
// 全市场 A 股行情(5000+ 股票,内置并发控制)
|
|
105
|
+
const all = await sdk.batch.cn({ concurrency: 5 });
|
|
106
|
+
console.log(`共 ${all.length} 只`);
|
|
130
107
|
```
|
|
131
108
|
|
|
132
|
-
|
|
109
|
+
> 港股 `'00700'` / `'hk00700'`,美股 `'AAPL'` / `'105.AAPL'`,由 `normalizeSymbol` 统一容错解析。
|
|
133
110
|
|
|
134
|
-
|
|
111
|
+
---
|
|
112
|
+
|
|
113
|
+
## 命令行(CLI)
|
|
114
|
+
|
|
115
|
+
安装后即得 `stock-sdk` 命令(或用 `npx`):
|
|
116
|
+
|
|
117
|
+
```bash
|
|
118
|
+
# 行情(按代码自动识别市场)
|
|
119
|
+
npx stock-sdk quote 600519 00700 AAPL
|
|
120
|
+
# K 线 + 输出截断
|
|
121
|
+
npx stock-sdk kline 600519 --period weekly --limit 30
|
|
122
|
+
# 带技术指标
|
|
123
|
+
npx stock-sdk indicators 600519 --ma 5,10,20 --macd
|
|
124
|
+
# 搜索
|
|
125
|
+
npx stock-sdk search 茅台
|
|
126
|
+
# 任意命名空间方法直达
|
|
127
|
+
npx stock-sdk quotes cn sh600519 sz000001
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
默认 JSON 输出,可加 `--format table|csv`、`--pretty`、`--limit N`。
|
|
131
|
+
|
|
132
|
+
---
|
|
133
|
+
|
|
134
|
+
## 🤖 AI / MCP 集成
|
|
135
|
+
|
|
136
|
+
v2 内置零依赖 MCP server,一条命令启动:
|
|
137
|
+
|
|
138
|
+
```bash
|
|
139
|
+
npx stock-sdk mcp
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
接入 Cursor / Claude Desktop / Codex / Gemini 等(配置 `mcpServers`):
|
|
143
|
+
|
|
144
|
+
```json
|
|
145
|
+
{
|
|
146
|
+
"mcpServers": {
|
|
147
|
+
"stock-sdk": {
|
|
148
|
+
"command": "npx",
|
|
149
|
+
"args": ["-y", "stock-sdk", "mcp"]
|
|
150
|
+
}
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
```
|
|
154
|
+
|
|
155
|
+
环境变量 `STOCK_SDK_MCP_TOOLS=core|full|<逗号分隔工具名>` 控制工具集范围(默认 `core`)。
|
|
156
|
+
|
|
157
|
+
👉 [完整 MCP 文档](https://stock-sdk-v2.linkdiary.cn/mcp/)
|
|
158
|
+
|
|
159
|
+
---
|
|
160
|
+
|
|
161
|
+
## 信号 / 选股 / 回测
|
|
135
162
|
|
|
136
163
|
```ts
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
},
|
|
164
|
+
import { calcSignals } from 'stock-sdk/signals';
|
|
165
|
+
import { screen, backtest } from 'stock-sdk/screener';
|
|
166
|
+
|
|
167
|
+
// 金叉/死叉/超买超卖等事件识别(基于带指标的 K 线)
|
|
168
|
+
const signals = calcSignals(klineWithIndicators, {
|
|
169
|
+
ma: { fast: 5, slow: 20 },
|
|
170
|
+
rsi: {},
|
|
143
171
|
});
|
|
144
172
|
|
|
145
|
-
|
|
173
|
+
// 链式选股(输入任意行情数组,纯本地、无网络)
|
|
174
|
+
const picks = screen(allQuotes)
|
|
175
|
+
.where((q) => q.pe != null && q.pe < 20)
|
|
176
|
+
.where((q) => q.changePercent > 3)
|
|
177
|
+
.sortBy((q) => q.amount)
|
|
178
|
+
.top(20);
|
|
179
|
+
|
|
180
|
+
// 本地回测
|
|
181
|
+
const report = backtest({
|
|
182
|
+
klines,
|
|
183
|
+
strategy: (bar, i, all) => 'hold', // 返回 'buy' | 'sell' | 'hold'
|
|
184
|
+
});
|
|
185
|
+
console.log(report.totalReturn, report.winRate, report.maxDrawdown);
|
|
146
186
|
```
|
|
147
187
|
|
|
148
|
-
|
|
188
|
+
---
|
|
189
|
+
|
|
190
|
+
## 请求治理与错误
|
|
149
191
|
|
|
150
192
|
```ts
|
|
151
|
-
import { StockSDK
|
|
193
|
+
import { StockSDK } from 'stock-sdk';
|
|
194
|
+
import { HttpError, getSdkErrorCode } from 'stock-sdk/errors';
|
|
152
195
|
|
|
153
196
|
const sdk = new StockSDK({
|
|
154
197
|
retry: { maxRetries: 2, baseDelay: 500 },
|
|
155
198
|
providerPolicies: {
|
|
156
|
-
eastmoney: {
|
|
157
|
-
timeout: 12000,
|
|
158
|
-
rateLimit: { requestsPerSecond: 3, maxBurst: 3 },
|
|
159
|
-
},
|
|
199
|
+
eastmoney: { timeout: 12000, rateLimit: { requestsPerSecond: 3, maxBurst: 3 } },
|
|
160
200
|
},
|
|
161
201
|
});
|
|
162
202
|
|
|
163
203
|
try {
|
|
164
|
-
await sdk.
|
|
204
|
+
await sdk.quotes.cnSimple(['sh600519']);
|
|
165
205
|
} catch (error) {
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
console.log(getSdkErrorCode(error)); // HTTP_ERROR / NETWORK_ERROR / TIMEOUT ...
|
|
206
|
+
// v2 对外只抛 SdkError,带统一 code
|
|
207
|
+
if (error instanceof HttpError) console.log(error.status, error.statusText);
|
|
208
|
+
console.log(getSdkErrorCode(error)); // HTTP_ERROR / NETWORK_ERROR / TIMEOUT / ABORTED / PARSE_ERROR ...
|
|
171
209
|
}
|
|
172
210
|
```
|
|
173
211
|
|
|
174
|
-
|
|
212
|
+
---
|
|
175
213
|
|
|
176
|
-
##
|
|
214
|
+
## 子路径导出(subpath)
|
|
177
215
|
|
|
178
|
-
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
|
|
216
|
+
只用纯计算(指标 / 符号 / 信号 / 选股)时,从 subpath 导入,bundle 不会拖入 `RequestClient` 与所有 provider:
|
|
217
|
+
|
|
218
|
+
```ts
|
|
219
|
+
// 14 个指标、共 17 个纯函数(MA 族含 calcSMA/calcEMA/calcWMA 三个变体):
|
|
220
|
+
// calcSMA / calcEMA / calcWMA / calcMA / calcMACD / calcBOLL / calcKDJ /
|
|
221
|
+
// calcRSI / calcWR / calcBIAS / calcCCI / calcATR / calcOBV / calcROC /
|
|
222
|
+
// calcDMI / calcSAR / calcKC
|
|
223
|
+
import { calcMACD, calcKDJ } from 'stock-sdk/indicators';
|
|
224
|
+
import { normalizeSymbol, toTencentSymbol } from 'stock-sdk/symbols';
|
|
225
|
+
import { calcSignals } from 'stock-sdk/signals';
|
|
226
|
+
import { screen, backtest } from 'stock-sdk/screener';
|
|
227
|
+
import { MemoryCacheStore, cacheThrough } from 'stock-sdk/cache';
|
|
228
|
+
import { SdkError, isSdkError, getSdkErrorCode } from 'stock-sdk/errors';
|
|
185
229
|
```
|
|
186
230
|
|
|
187
|
-
|
|
231
|
+
---
|
|
188
232
|
|
|
189
|
-
|
|
233
|
+
## 市场支持矩阵
|
|
190
234
|
|
|
191
|
-
|
|
192
|
-
|---------|---------|
|
|
193
|
-
| Cursor | `~/.cursor/mcp.json` |
|
|
194
|
-
| Claude Desktop | `claude_desktop_config.json` |
|
|
195
|
-
| OpenClaw | `~/.clawdbot/config.yaml` |
|
|
196
|
-
| Codex CLI | `~/.codex/config.json` |
|
|
197
|
-
| Gemini CLI | `~/.gemini/settings.json` |
|
|
235
|
+
不同市场的能力覆盖度差异较大,下表帮你快速判断 SDK 是否覆盖你的场景。
|
|
198
236
|
|
|
199
|
-
|
|
237
|
+
- ✅ 已支持 | ⚠️ 部分支持(见备注)| ❌ 暂未实现 | — 概念不适用
|
|
200
238
|
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
239
|
+
| 能力 | A 股 | 港股 | 美股 | 公募基金 | 期货 | 期权 |
|
|
240
|
+
|------|:----:|:----:|:----:|:--------:|:----:|:----:|
|
|
241
|
+
| 实时行情 | ✅ | ✅ | ✅ | ✅ | ✅ 全球期货 | ✅ ETF / 中金所 / 商品 |
|
|
242
|
+
| 历史 K 线(日/周/月) | ✅ | ✅ | ✅ | ⚠️ 场内 ETF/LOF | ✅ 国内 + 全球 | ✅ |
|
|
243
|
+
| 分钟 K 线(5/15/30/60) | ✅ | ✅ `kline.hkMinute` | ✅ `kline.usMinute` | ⚠️ 场内 ETF/LOF | ❌ | ❌ |
|
|
244
|
+
| 当日分时(1 分钟) | ✅ `quotes.timeline` | ✅ `kline.hkMinute`(period='1') | ✅ `kline.usMinute`(period='1') | ⚠️ 场内 ETF/LOF | ❌ | ✅ ETF 期权 |
|
|
245
|
+
| 分红派送 | ✅ | ❌ | ❌ | ✅ 基金 + ETF | — | — |
|
|
246
|
+
| 资金流向 | ✅ 个股/大盘/排名/板块 | ❌ | ❌ | — | — | — |
|
|
247
|
+
| 板块(行业 / 概念) | ✅ | ❌ | ❌ | ❌ | — | — |
|
|
248
|
+
| 龙虎榜 | ✅ | — | — | — | — | ✅ 期权龙虎榜 |
|
|
249
|
+
| 沪深港通 / 北向资金 | ✅ 北向 | ✅ 南向 | — | — | — | — |
|
|
250
|
+
| 大宗交易 / 融资融券 | ✅ | ❌ | ❌ | — | — | — |
|
|
251
|
+
| 涨停板 / 盘口异动 | ✅ | — | — | — | — | — |
|
|
252
|
+
| 全市场代码列表 / 批量行情 | ✅ 5000+ | ✅ | ✅ | ✅ 代码 | ❌ | ❌ |
|
|
253
|
+
| 库存数据 | — | — | — | — | ✅ 国内 + COMEX | — |
|
|
254
|
+
| 交易日历 | ✅ `calendar.*` | ⚠️ 仅市场状态 | ⚠️ 仅市场状态 | — | — | — |
|
|
255
|
+
|
|
256
|
+
> **数据延迟**:实时行情来自腾讯财经 / 东方财富等公开接口,**非实时撮合**,通常有数十秒到数分钟延迟,不适合高频交易决策。
|
|
211
257
|
|
|
212
|
-
|
|
258
|
+
---
|
|
213
259
|
|
|
214
|
-
|
|
260
|
+
## API 概览(命名空间)
|
|
261
|
+
|
|
262
|
+
💡 完整 API 见 [官方文档](https://stock-sdk-v2.linkdiary.cn/api/)。v2 全部方法挂在命名空间下:
|
|
263
|
+
|
|
264
|
+
| 命名空间 | 代表方法 |
|
|
265
|
+
|---|---|
|
|
266
|
+
| `sdk.quotes` | `.cn` / `.cnSimple` / `.hk` / `.us` / `.fund` / `.fundFlow` / `.largeOrder` / `.timeline` |
|
|
267
|
+
| `sdk.codes` | `.cn` / `.us` / `.hk` / `.fund` |
|
|
268
|
+
| `sdk.batch` | `.cn` / `.hk` / `.us` / `.byCodes` / `.raw` |
|
|
269
|
+
| `sdk.kline` | `.cn` / `.cnMinute` / `.hk` / `.hkMinute` / `.us` / `.usMinute` / `.withIndicators` |
|
|
270
|
+
| `sdk.board` | `.industry.*` / `.concept.*`(`list` / `spot` / `constituents` / `kline` / `minuteKline`) |
|
|
271
|
+
| `sdk.options` | `.index.*` / `.etf.*` / `.commodity.*` / `.cffex.*` / `.lhb` |
|
|
272
|
+
| `sdk.futures` | `.kline` / `.globalSpot` / `.globalKline` / `.inventory` / `.comexInventory` … |
|
|
273
|
+
| `sdk.fundFlow` | `.individual` / `.market` / `.rank` / `.sectorRank` / `.sectorHistory` |
|
|
274
|
+
| `sdk.northbound` | `.minute` / `.summary` / `.holdingRank` / `.history` / `.individual` |
|
|
275
|
+
| `sdk.marketEvent` | `.ztPool` / `.stockChanges` / `.boardChanges` |
|
|
276
|
+
| `sdk.dragonTiger` | `.detail` / `.stockStats` / `.institution` / `.branchRank` / `.seatDetail` |
|
|
277
|
+
| `sdk.blockTrade` / `sdk.margin` | 大宗交易 / 融资融券 |
|
|
278
|
+
| `sdk.fund` | `.dividendList` / `.navHistory` / `.estimate` / `.rankHistory` |
|
|
279
|
+
| `sdk.calendar` | `.isTradingDay` / `.nextTradingDay` / `.prevTradingDay` / `.marketStatus` |
|
|
280
|
+
| `sdk.reference` | `.dividendDetail` / `.tradingCalendar` |
|
|
281
|
+
| 顶层 | `sdk.search(keyword)` |
|
|
282
|
+
|
|
283
|
+
> 指标计算从主包改为 subpath:`import { calcMACD } from 'stock-sdk/indicators'`。
|
|
284
|
+
> 从 v1 扁平 API 迁移?见 [v1 → v2 迁移指南](https://stock-sdk-v2.linkdiary.cn/guide/migration-v1-to-v2)(含完整 `sdk.getXxx()` → `sdk.<ns>.<method>()` 映射表)。
|
|
215
285
|
|
|
216
286
|
---
|
|
217
287
|
|
|
218
|
-
##
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
| `getSimpleQuotes` | A 股/指数简要行情 |
|
|
228
|
-
| `getHKQuotes` | 港股行情 |
|
|
229
|
-
| `getUSQuotes` | 美股行情 |
|
|
230
|
-
| `getFundQuotes` | 公募基金行情 |
|
|
231
|
-
|
|
232
|
-
### K 线数据
|
|
233
|
-
|
|
234
|
-
| 方法 | 说明 |
|
|
235
|
-
|------|------|
|
|
236
|
-
| `getHistoryKline` | A 股历史 K 线(日/周/月) |
|
|
237
|
-
| `getHKHistoryKline` | 港股历史 K 线(日/周/月) |
|
|
238
|
-
| `getUSHistoryKline` | 美股历史 K 线(日/周/月) |
|
|
239
|
-
| `getMinuteKline` | A 股分钟 K 线(1/5/15/30/60 分钟) |
|
|
240
|
-
| `getHKMinuteKline` | 港股分钟 K 线(5/15/30/60 分钟)或当日分时(period='1'),v1.10.0+ |
|
|
241
|
-
| `getUSMinuteKline` | 美股分钟 K 线(5/15/30/60 分钟)或当日分时(period='1'),v1.10.0+ |
|
|
242
|
-
| `getTodayTimeline` | A 股当日分时走势 |
|
|
243
|
-
|
|
244
|
-
### 技术指标
|
|
245
|
-
|
|
246
|
-
| 方法 | 说明 |
|
|
247
|
-
|------|------|
|
|
248
|
-
| `getKlineWithIndicators` | 获取带技术指标的 K 线数据 |
|
|
249
|
-
| `calcMA` | 计算均线(SMA/EMA/WMA) |
|
|
250
|
-
| `calcMACD` | 计算 MACD |
|
|
251
|
-
| `calcBOLL` | 计算布林带 |
|
|
252
|
-
| `calcKDJ` | 计算 KDJ |
|
|
253
|
-
| `calcRSI` | 计算 RSI |
|
|
254
|
-
| `calcWR` | 计算威廉指标 |
|
|
255
|
-
| `calcBIAS` | 计算乖离率 |
|
|
256
|
-
| `calcCCI` | 计算商品通道指数 |
|
|
257
|
-
| `calcATR` | 计算平均真实波幅 |
|
|
258
|
-
| `calcOBV` | 计算能量潮 |
|
|
259
|
-
| `calcROC` | 计算变动率指标 |
|
|
260
|
-
| `calcDMI` | 计算趋向指标 |
|
|
261
|
-
| `calcSAR` | 计算抛物线转向 |
|
|
262
|
-
| `calcKC` | 计算肯特纳通道 |
|
|
263
|
-
|
|
264
|
-
### 行业板块
|
|
265
|
-
|
|
266
|
-
| 方法 | 说明 |
|
|
267
|
-
|------|------|
|
|
268
|
-
| `getIndustryList` | 行业板块名称列表 |
|
|
269
|
-
| `getIndustrySpot` | 行业板块实时行情 |
|
|
270
|
-
| `getIndustryConstituents` | 行业板块成分股 |
|
|
271
|
-
| `getIndustryKline` | 行业板块历史 K 线(日/周/月) |
|
|
272
|
-
| `getIndustryMinuteKline` | 行业板块分时行情(1/5/15/30/60 分钟) |
|
|
273
|
-
|
|
274
|
-
### 概念板块
|
|
275
|
-
|
|
276
|
-
| 方法 | 说明 |
|
|
277
|
-
|------|------|
|
|
278
|
-
| `getConceptList` | 概念板块名称列表 |
|
|
279
|
-
| `getConceptSpot` | 概念板块实时行情 |
|
|
280
|
-
| `getConceptConstituents` | 概念板块成分股 |
|
|
281
|
-
| `getConceptKline` | 概念板块历史 K 线(日/周/月) |
|
|
282
|
-
| `getConceptMinuteKline` | 概念板块分时行情(1/5/15/30/60 分钟) |
|
|
283
|
-
|
|
284
|
-
### 期货行情
|
|
285
|
-
|
|
286
|
-
| 方法 | 说明 |
|
|
287
|
-
|------|------|
|
|
288
|
-
| `getFuturesKline` | 国内期货历史 K 线(日/周/月) |
|
|
289
|
-
| `getGlobalFuturesSpot` | 全球期货实时行情 |
|
|
290
|
-
| `getGlobalFuturesKline` | 全球期货历史 K 线(日/周/月) |
|
|
291
|
-
| `getFuturesInventorySymbols` | 期货库存品种列表 |
|
|
292
|
-
| `getFuturesInventory` | 期货库存数据 |
|
|
293
|
-
| `getComexInventory` | COMEX 黄金/白银库存 |
|
|
294
|
-
|
|
295
|
-
### 期权数据
|
|
296
|
-
|
|
297
|
-
| 方法 | 说明 |
|
|
298
|
-
|------|------|
|
|
299
|
-
| `getIndexOptionSpot` | 中金所股指期权 T 型报价(看涨 + 看跌) |
|
|
300
|
-
| `getIndexOptionKline` | 股指期权合约日 K 线 |
|
|
301
|
-
| `getCFFEXOptionQuotes` | 中金所全部期权实时行情列表 |
|
|
302
|
-
| `getETFOptionMonths` | 上交所 ETF 期权到期月份列表 |
|
|
303
|
-
| `getETFOptionExpireDay` | ETF 期权到期日与剩余天数 |
|
|
304
|
-
| `getETFOptionMinute` | ETF 期权当日分钟行情 |
|
|
305
|
-
| `getETFOptionDailyKline` | ETF 期权历史日 K 线 |
|
|
306
|
-
| `getETFOption5DayMinute` | ETF 期权 5 日分钟行情 |
|
|
307
|
-
| `getCommodityOptionSpot` | 商品期权 T 型报价 |
|
|
308
|
-
| `getCommodityOptionKline` | 商品期权合约日 K 线 |
|
|
309
|
-
| `getOptionLHB` | 期权龙虎榜 |
|
|
310
|
-
|
|
311
|
-
### 扩展数据
|
|
312
|
-
|
|
313
|
-
| 方法 | 说明 |
|
|
314
|
-
|------|------|
|
|
315
|
-
| `getFundFlow` | 资金流向(按代码批量查询) |
|
|
316
|
-
| `getPanelLargeOrder` | 盘口大单占比 |
|
|
317
|
-
| `getTradingCalendar` | A 股交易日历 |
|
|
318
|
-
| `getDividendDetail` | 股票分红派送详情 |
|
|
319
|
-
|
|
320
|
-
### 基金扩展(v1.10.0+)
|
|
321
|
-
|
|
322
|
-
| 方法 | 说明 |
|
|
323
|
-
|------|------|
|
|
324
|
-
| `getFundDividendList` | 基金 / ETF 分红明细(全市场,按年份分页,可按代码过滤) |
|
|
325
|
-
| `getFundNavHistory` | 基金历史净值(单位 + 累计,全历史一次返回) |
|
|
326
|
-
| `getFundEstimate` | 基金当日实时估值(含 T-1 单位净值 + 盘中估算) |
|
|
327
|
-
| `getFundRankHistory` | 基金同类排名走势(每日近三月排名 + 百分位) |
|
|
328
|
-
|
|
329
|
-
### 资金流向(深度)
|
|
330
|
-
|
|
331
|
-
| 方法 | 说明 |
|
|
332
|
-
|------|------|
|
|
333
|
-
| `getIndividualFundFlow` | 个股资金流历史(日/周/月) |
|
|
334
|
-
| `getMarketFundFlow` | 大盘(上证 + 深证)资金流历史 |
|
|
335
|
-
| `getFundFlowRank` | 个股资金流排名(今日 / 3 日 / 5 日 / 10 日) |
|
|
336
|
-
| `getSectorFundFlowRank` | 板块资金流排名(行业 / 概念 / 地域) |
|
|
337
|
-
| `getSectorFundFlowHistory` | 单个板块的历史资金流 |
|
|
338
|
-
|
|
339
|
-
### 沪深港通 / 北向资金
|
|
340
|
-
|
|
341
|
-
| 方法 | 说明 |
|
|
342
|
-
|------|------|
|
|
343
|
-
| `getNorthboundMinute` | 北向 / 南向资金分时数据 |
|
|
344
|
-
| `getNorthboundFlowSummary` | 沪深港通市场资金流向汇总 |
|
|
345
|
-
| `getNorthboundHoldingRank` | 北向 / 沪股通 / 深股通持股个股排行 |
|
|
346
|
-
| `getNorthboundHistory` | 北向 / 南向资金历史 |
|
|
347
|
-
| `getNorthboundIndividual` | 个股北向持仓历史 |
|
|
348
|
-
|
|
349
|
-
### 涨停板 / 盘口异动
|
|
350
|
-
|
|
351
|
-
| 方法 | 说明 |
|
|
352
|
-
|------|------|
|
|
353
|
-
| `getZTPool` | 涨停 / 昨日涨停 / 强势 / 次新 / 炸板 / 跌停 6 大股池 |
|
|
354
|
-
| `getStockChanges` | 22 种盘口异动(火箭发射 / 大笔买入 / 封涨停 等) |
|
|
355
|
-
| `getBoardChanges` | 当日板块异动详情 |
|
|
356
|
-
|
|
357
|
-
### 龙虎榜
|
|
358
|
-
|
|
359
|
-
| 方法 | 说明 |
|
|
360
|
-
|------|------|
|
|
361
|
-
| `getDragonTigerDetail` | 龙虎榜详情(按日期范围) |
|
|
362
|
-
| `getDragonTigerStockStats` | 个股上榜统计(近 1/3/6 月、1 年) |
|
|
363
|
-
| `getDragonTigerInstitution` | 机构买卖统计 |
|
|
364
|
-
| `getDragonTigerBranchRank` | 营业部排行 |
|
|
365
|
-
| `getDragonTigerStockSeatDetail` | 个股某日上榜席位明细(买入榜 + 卖出榜) |
|
|
366
|
-
|
|
367
|
-
### 大宗交易 / 融资融券
|
|
368
|
-
|
|
369
|
-
| 方法 | 说明 |
|
|
370
|
-
|------|------|
|
|
371
|
-
| `getBlockTradeMarketStat` | 大宗交易市场每日总览 |
|
|
372
|
-
| `getBlockTradeDetail` | 大宗交易明细 |
|
|
373
|
-
| `getBlockTradeDailyStat` | 大宗交易每日统计(按股票汇总) |
|
|
374
|
-
| `getMarginAccountInfo` | 融资融券账户统计 |
|
|
375
|
-
| `getMarginTargetList` | 融资融券标的明细 |
|
|
376
|
-
|
|
377
|
-
### 批量查询
|
|
378
|
-
|
|
379
|
-
| 方法 | 说明 |
|
|
380
|
-
|------|------|
|
|
381
|
-
| `getAShareCodeList` | 获取全部 A 股代码 |
|
|
382
|
-
| `getUSCodeList` | 获取全部美股代码 |
|
|
383
|
-
| `getHKCodeList` | 获取全部港股代码 |
|
|
384
|
-
| `getAllAShareQuotes` | 获取全市场 A 股行情 |
|
|
385
|
-
| `getAllHKShareQuotes` | 获取全市场港股行情 |
|
|
386
|
-
| `getAllUSShareQuotes` | 获取全市场美股行情 |
|
|
387
|
-
| `getAllQuotesByCodes` | 批量获取指定股票行情 |
|
|
388
|
-
|
|
389
|
-
### 搜索
|
|
390
|
-
|
|
391
|
-
| 方法 | 说明 |
|
|
392
|
-
|------|------|
|
|
393
|
-
| `search` | 搜索股票代码/名称/拼音 |
|
|
394
|
-
|
|
395
|
-
搜索结果可配合 `generateSearchExternalLinks(result)` 生成东方财富、雪球外链。
|
|
288
|
+
## 开发校验
|
|
289
|
+
|
|
290
|
+
```bash
|
|
291
|
+
yarn typecheck
|
|
292
|
+
yarn build
|
|
293
|
+
yarn test
|
|
294
|
+
yarn test:integration:smoke # 冒烟集成(真实网络)
|
|
295
|
+
yarn test:integration:full # 全量集成回归
|
|
296
|
+
```
|
|
396
297
|
|
|
397
298
|
---
|
|
398
299
|
|
|
@@ -402,7 +303,7 @@ Stock SDK 配套 MCP Server([stock-sdk-mcp](https://www.npmjs.com/package/stoc
|
|
|
402
303
|
|
|
403
304
|
---
|
|
404
305
|
|
|
405
|
-
🌐 [官网](https://stock-sdk.linkdiary.cn) | 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://stock-sdk.linkdiary.cn/playground) | 🧭 [Stock Dashboard](https://chengzuopeng.github.io/stock-dashboard/) | 🐛 [Issues](https://github.com/chengzuopeng/stock-sdk/issues)
|
|
306
|
+
🌐 [官网](https://stock-sdk-v2.linkdiary.cn) | 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://stock-sdk-v2.linkdiary.cn/playground) | 🧭 [Stock Dashboard](https://chengzuopeng.github.io/stock-dashboard/) | 🐛 [Issues](https://github.com/chengzuopeng/stock-sdk/issues)
|
|
406
307
|
|
|
407
308
|
---
|
|
408
309
|
|