stock-sdk 1.3.0-beta.2 → 1.3.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.
Files changed (2) hide show
  1. package/README.md +39 -897
  2. package/package.json +12 -6
package/README.md CHANGED
@@ -11,9 +11,13 @@
11
11
 
12
12
  无需 Python、无需后端服务,直接在 **浏览器或 Node.js** 中获取 **A 股 / 港股 / 美股 / 公募基金** 的实时行情与 K 线数据。
13
13
 
14
- **✨ 零依赖 | 🌐 Browser + Node.js | 📦 <10KB | 🧠 完整 TypeScript 类型**
14
+ **✨ 零依赖 | 🌐 Browser + Node.js | 📦 <20KB | 🧠 完整 TypeScript 类型**
15
15
 
16
- 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://chengzuopeng.github.io/stock-sdk/)
16
+ ## Documentation
17
+
18
+ 👉🏻 [官方文档](https://chengzuopeng.github.io/stock-sdk/)
19
+
20
+ 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://chengzuopeng.github.io/stock-sdk/playground/)
17
21
 
18
22
  ## Why stock-sdk?
19
23
 
@@ -96,935 +100,73 @@ const allQuotes = await sdk.getAllAShareQuotes({
96
100
  console.log(`共获取 ${allQuotes.length} 只股票`);
97
101
  ```
98
102
 
99
- ## API 文档
103
+ ## API 列表
104
+
105
+ 💡 API 详细文档请查阅 [https://chengzuopeng.github.io/stock-sdk/](https://chengzuopeng.github.io/stock-sdk/)
100
106
 
101
107
  ### 实时行情
102
108
 
103
109
  | 方法 | 说明 |
104
110
  |------|------|
105
- | [`getFullQuotes`](#getfullquotescodes-promisefullquote) | A 股/指数全量行情 |
106
- | [`getSimpleQuotes`](#getsimplequotescodes-promisesimplequote) | A 股/指数简要行情 |
107
- | [`getHKQuotes`](#gethkquotescodes-promisehkquote) | 港股行情 |
108
- | [`getUSQuotes`](#getusquotescodes-promiseusquote) | 美股行情 |
109
- | [`getFundQuotes`](#getfundquotescodes-promisefundquote) | 公募基金行情 |
111
+ | `getFullQuotes` | A 股/指数全量行情 |
112
+ | `getSimpleQuotes` | A 股/指数简要行情 |
113
+ | `getHKQuotes` | 港股行情 |
114
+ | `getUSQuotes` | 美股行情 |
115
+ | `getFundQuotes` | 公募基金行情 |
110
116
 
111
117
  ### K 线数据
112
118
 
113
119
  | 方法 | 说明 |
114
120
  |------|------|
115
- | [`getHistoryKline`](#gethistoryklinesymbol-options-promisehistorykline) | A 股历史 K 线(日/周/月) |
116
- | [`getHKHistoryKline`](#gethkhistoryklinesymbol-options-promisehkushistorykline) | 港股历史 K 线(日/周/月) |
117
- | [`getUSHistoryKline`](#getushistoryklinesymbol-options-promisehkushistorykline) | 美股历史 K 线(日/周/月) |
118
- | [`getMinuteKline`](#getminuteklinesymbol-options-promiseminutetimeline--minutekline) | A 股分钟 K 线(1/5/15/30/60 分钟) |
119
- | [`getTodayTimeline`](#gettodaytimelinecode-promisetodaytimelineresponse) | A 股当日分时走势 |
121
+ | `getHistoryKline` | A 股历史 K 线(日/周/月) |
122
+ | `getHKHistoryKline` | 港股历史 K 线(日/周/月) |
123
+ | `getUSHistoryKline` | 美股历史 K 线(日/周/月) |
124
+ | `getMinuteKline` | A 股分钟 K 线(1/5/15/30/60 分钟) |
125
+ | `getTodayTimeline` | A 股当日分时走势 |
120
126
 
121
127
  ### 技术指标
122
128
 
123
129
  | 方法 | 说明 |
124
130
  |------|------|
125
- | [`getKlineWithIndicators`](#getklinewithindicatorssymbol-options-promiseklinewithindicators) | 获取带技术指标的 K 线数据 |
126
- | [`calcMA`](#calcmadata-options-maresult) | 计算均线(SMA/EMA/WMA) |
127
- | [`calcMACD`](#calcmacddata-options-macdresult) | 计算 MACD |
128
- | [`calcBOLL`](#calcbolldata-options-bollresult) | 计算布林带 |
129
- | [`calcKDJ`](#calckdjdata-options-kdjresult) | 计算 KDJ |
130
- | [`calcRSI`](#calcrsidata-options-rsiresult) | 计算 RSI |
131
- | [`calcWR`](#calcwrdata-options-wrresult) | 计算威廉指标 |
132
- | [`calcBIAS`](#calcbiasdata-options-biasresult) | 计算乖离率 |
133
- | [`calcCCI`](#calcccidata-options-cciresult) | 计算商品通道指数 |
134
- | [`calcATR`](#calcatrdata-options-atrresult) | 计算平均真实波幅 |
131
+ | `getKlineWithIndicators` | 获取带技术指标的 K 线数据 |
132
+ | `calcMA` | 计算均线(SMA/EMA/WMA) |
133
+ | `calcMACD` | 计算 MACD |
134
+ | `calcBOLL` | 计算布林带 |
135
+ | `calcKDJ` | 计算 KDJ |
136
+ | `calcRSI` | 计算 RSI |
137
+ | `calcWR` | 计算威廉指标 |
138
+ | `calcBIAS` | 计算乖离率 |
139
+ | `calcCCI` | 计算商品通道指数 |
140
+ | `calcATR` | 计算平均真实波幅 |
135
141
 
136
142
  ### 扩展数据
137
143
 
138
144
  | 方法 | 说明 |
139
145
  |------|------|
140
- | [`getFundFlow`](#getfundflowcodes-promisefundflow) | 资金流向 |
141
- | [`getPanelLargeOrder`](#getpanellargeordercodes-promisepanellargeorder) | 盘口大单占比 |
146
+ | `getFundFlow` | 资金流向 |
147
+ | `getPanelLargeOrder` | 盘口大单占比 |
142
148
 
143
149
  ### 批量查询
144
150
 
145
151
  | 方法 | 说明 |
146
152
  |------|------|
147
- | [`getAShareCodeList`](#getasharecodellistincludeexchange-promisestring) | 获取全部 A 股代码 |
148
- | [`getUSCodeList`](#getuscodelistincludemarket-promisestring) | 获取全部美股代码 |
149
- | [`getHKCodeList`](#gethkcodelist-promisestring) | 获取全部港股代码 |
150
- | [`getAllAShareQuotes`](#getallasharequotesoptions-promisefullquote) | 获取全市场 A 股行情 |
151
- | [`getAllHKShareQuotes`](#getallhksharequotesoptions-promisehkquote) | 获取全市场港股行情 |
152
- | [`getAllUSShareQuotes`](#getallusssharequotesoptions-promiseusquote) | 获取全市场美股行情 |
153
- | [`getAllQuotesByCodes`](#getallquotesbycodescodes-options-promisefullquote) | 批量获取指定股票行情 |
154
-
155
- ---
156
-
157
- ### `getFullQuotes(codes): Promise<FullQuote[]>`
158
-
159
- 获取 A 股/指数全量行情数据。
160
-
161
- **参数**
162
-
163
- | 参数 | 类型 | 说明 |
164
- |------|------|------|
165
- | `codes` | `string[]` | 股票代码数组,如 `['sz000858', 'sh600519']` |
166
-
167
- **返回类型**
168
-
169
- ```typescript
170
- interface FullQuote {
171
- marketId: string; // 市场标识
172
- name: string; // 名称
173
- code: string; // 股票代码
174
- price: number; // 最新价
175
- prevClose: number; // 昨收
176
- open: number; // 今开
177
- high: number; // 最高
178
- low: number; // 最低
179
- volume: number; // 成交量(手)
180
- outerVolume: number; // 外盘
181
- innerVolume: number; // 内盘
182
- bid: { price: number; volume: number }[]; // 买一~买五
183
- ask: { price: number; volume: number }[]; // 卖一~卖五
184
- time: string; // 时间戳 yyyyMMddHHmmss
185
- change: number; // 涨跌额
186
- changePercent: number; // 涨跌幅 %
187
- volume2: number; // 成交量(手,字段36)
188
- amount: number; // 成交额(万)
189
- turnoverRate: number | null; // 换手率 %
190
- pe: number | null; // 市盈率(TTM)
191
- amplitude: number | null; // 振幅 %
192
- circulatingMarketCap: number | null; // 流通市值(亿)
193
- totalMarketCap: number | null; // 总市值(亿)
194
- pb: number | null; // 市净率
195
- limitUp: number | null; // 涨停价
196
- limitDown: number | null; // 跌停价
197
- volumeRatio: number | null; // 量比
198
- avgPrice: number | null; // 均价
199
- peStatic: number | null; // 市盈率(静)
200
- peDynamic: number | null; // 市盈率(动)
201
- high52w: number | null; // 52周最高价
202
- low52w: number | null; // 52周最低价
203
- circulatingShares: number | null; // 流通股本(股)
204
- totalShares: number | null; // 总股本(股)
205
- raw: string[]; // 原始字段数组(供扩展使用)
206
- }
207
- ```
208
-
209
- **示例**
210
-
211
- ```typescript
212
- const quotes = await sdk.getFullQuotes(['sz000858']);
213
- console.log(quotes[0].name); // 五 粮 液
214
- console.log(quotes[0].price); // 111.70
215
- console.log(quotes[0].changePercent); // 2.35
216
- ```
217
-
218
- ---
219
-
220
- ### `getSimpleQuotes(codes): Promise<SimpleQuote[]>`
221
-
222
- 获取简要行情(股票/指数)。
223
-
224
- **参数**
225
-
226
- | 参数 | 类型 | 说明 |
227
- |------|------|------|
228
- | `codes` | `string[]` | 代码数组,如 `['sz000858', 'sh000001']` |
229
-
230
- **返回类型**
231
-
232
- ```typescript
233
- interface SimpleQuote {
234
- marketId: string;
235
- name: string;
236
- code: string;
237
- price: number;
238
- change: number;
239
- changePercent: number;
240
- volume: number;
241
- amount: number;
242
- marketCap: number | null;
243
- marketType: string;
244
- }
245
- ```
246
-
247
- **示例**
248
-
249
- ```typescript
250
- const quotes = await sdk.getSimpleQuotes(['sh000001']);
251
- console.log(quotes[0].name); // 上证指数
252
- ```
253
-
254
- ---
255
-
256
- ### `getHistoryKline(symbol, options?): Promise<HistoryKline[]>`
257
-
258
- 获取 A 股历史 K 线(日/周/月),数据来源:东方财富。
259
-
260
- **参数**
261
-
262
- | 参数 | 类型 | 说明 |
263
- |------|------|------|
264
- | `symbol` | `string` | 股票代码,如 `'000001'` 或 `'sz000001'` |
265
- | `options.period` | `'daily' \| 'weekly' \| 'monthly'` | K 线周期,默认 `'daily'` |
266
- | `options.adjust` | `'' \| 'qfq' \| 'hfq'` | 复权类型,默认 `'hfq'`(后复权) |
267
- | `options.startDate` | `string` | 开始日期 `YYYYMMDD` |
268
- | `options.endDate` | `string` | 结束日期 `YYYYMMDD` |
269
-
270
- **返回类型**
271
-
272
- ```typescript
273
- interface HistoryKline {
274
- date: string; // 日期 YYYY-MM-DD
275
- code: string; // 股票代码
276
- open: number | null; // 开盘价
277
- close: number | null; // 收盘价
278
- high: number | null; // 最高价
279
- low: number | null; // 最低价
280
- volume: number | null; // 成交量
281
- amount: number | null; // 成交额
282
- changePercent: number | null; // 涨跌幅 %
283
- change: number | null; // 涨跌额
284
- amplitude: number | null; // 振幅 %
285
- turnoverRate: number | null; // 换手率 %
286
- }
287
- ```
288
-
289
- **示例**
290
-
291
- ```typescript
292
- // 获取日线(默认后复权)
293
- const dailyKlines = await sdk.getHistoryKline('000001');
294
-
295
- // 获取周线,前复权,指定日期范围
296
- const weeklyKlines = await sdk.getHistoryKline('sz000858', {
297
- period: 'weekly',
298
- adjust: 'qfq',
299
- startDate: '20240101',
300
- endDate: '20241231',
301
- });
302
- ```
303
-
304
- ---
305
-
306
- ### `getHKHistoryKline(symbol, options?): Promise<HKUSHistoryKline[]>`
307
-
308
- 获取港股历史 K 线(日/周/月),数据来源:东方财富。
309
-
310
- **参数**
311
-
312
- | 参数 | 类型 | 说明 |
313
- |------|------|------|
314
- | `symbol` | `string` | 港股代码,5 位数字(如 `'00700'`、`'09988'`) |
315
- | `options.period` | `'daily' \| 'weekly' \| 'monthly'` | K 线周期,默认 `'daily'` |
316
- | `options.adjust` | `'' \| 'qfq' \| 'hfq'` | 复权类型,默认 `'hfq'`(后复权) |
317
- | `options.startDate` | `string` | 开始日期 `YYYYMMDD` |
318
- | `options.endDate` | `string` | 结束日期 `YYYYMMDD` |
319
-
320
- **返回类型**
321
-
322
- ```typescript
323
- interface HKUSHistoryKline {
324
- date: string; // 日期 YYYY-MM-DD
325
- code: string; // 股票代码
326
- name: string; // 股票名称
327
- open: number | null; // 开盘价
328
- close: number | null; // 收盘价
329
- high: number | null; // 最高价
330
- low: number | null; // 最低价
331
- volume: number | null; // 成交量
332
- amount: number | null; // 成交额
333
- changePercent: number | null; // 涨跌幅 %
334
- change: number | null; // 涨跌额
335
- amplitude: number | null; // 振幅 %
336
- turnoverRate: number | null; // 换手率 %
337
- }
338
- ```
339
-
340
- **示例**
341
-
342
- ```typescript
343
- // 获取腾讯控股日 K 线
344
- const klines = await sdk.getHKHistoryKline('00700');
345
-
346
- // 获取阿里巴巴周 K 线,前复权
347
- const weeklyKlines = await sdk.getHKHistoryKline('09988', {
348
- period: 'weekly',
349
- adjust: 'qfq',
350
- startDate: '20240101',
351
- endDate: '20241231',
352
- });
353
- console.log(klines[0].name); // 腾讯控股
354
- console.log(klines[0].close); // 收盘价
355
- ```
356
-
357
- ---
358
-
359
- ### `getUSHistoryKline(symbol, options?): Promise<HKUSHistoryKline[]>`
360
-
361
- 获取美股历史 K 线(日/周/月),数据来源:东方财富。
362
-
363
- **参数**
364
-
365
- | 参数 | 类型 | 说明 |
366
- |------|------|------|
367
- | `symbol` | `string` | 美股代码,格式:`{market}.{ticker}`(如 `'105.MSFT'`、`'106.BABA'`) |
368
- | `options.period` | `'daily' \| 'weekly' \| 'monthly'` | K 线周期,默认 `'daily'` |
369
- | `options.adjust` | `'' \| 'qfq' \| 'hfq'` | 复权类型,默认 `'hfq'`(后复权) |
370
- | `options.startDate` | `string` | 开始日期 `YYYYMMDD` |
371
- | `options.endDate` | `string` | 结束日期 `YYYYMMDD` |
372
-
373
- **市场代码说明**
374
-
375
- | 代码 | 说明 | 示例 |
376
- |------|------|------|
377
- | `105` | 纳斯达克 | `105.AAPL`(苹果)、`105.MSFT`(微软)、`105.TSLA`(特斯拉) |
378
- | `106` | 纽交所 | `106.BABA`(阿里巴巴) |
379
- | `107` | 美国其他 | `107.XXX` |
380
-
381
- **示例**
382
-
383
- ```typescript
384
- // 获取微软日 K 线
385
- const klines = await sdk.getUSHistoryKline('105.MSFT');
386
-
387
- // 获取苹果周 K 线,前复权
388
- const weeklyKlines = await sdk.getUSHistoryKline('105.AAPL', {
389
- period: 'weekly',
390
- adjust: 'qfq',
391
- startDate: '20240101',
392
- endDate: '20241231',
393
- });
394
- console.log(klines[0].name); // 微软
395
- console.log(klines[0].close); // 收盘价
396
-
397
- // 获取阿里巴巴月 K 线
398
- const monthlyKlines = await sdk.getUSHistoryKline('106.BABA', {
399
- period: 'monthly',
400
- });
401
- ```
153
+ | `getAShareCodeList` | 获取全部 A 股代码 |
154
+ | `getUSCodeList` | 获取全部美股代码 |
155
+ | `getHKCodeList` | 获取全部港股代码 |
156
+ | `getAllAShareQuotes` | 获取全市场 A 股行情 |
157
+ | `getAllHKShareQuotes` | 获取全市场港股行情 |
158
+ | `getAllUSShareQuotes` | 获取全市场美股行情 |
159
+ | `getAllQuotesByCodes` | 批量获取指定股票行情 |
402
160
 
403
161
  ---
404
162
 
405
- ### `getMinuteKline(symbol, options?): Promise<MinuteTimeline[] | MinuteKline[]>`
406
-
407
- 获取 A 股分钟 K 线或分时数据,数据来源:东方财富。
408
-
409
- > **注意**:`period='1'` 分时数据仅返回近 5 个交易日数据。
410
-
411
- **参数**
412
-
413
- | 参数 | 类型 | 说明 |
414
- |------|------|------|
415
- | `symbol` | `string` | 股票代码,如 `'000001'` 或 `'sz000001'` |
416
- | `options.period` | `'1' \| '5' \| '15' \| '30' \| '60'` | K 线周期,默认 `'1'`(分时) |
417
- | `options.adjust` | `'' \| 'qfq' \| 'hfq'` | 复权类型(仅 5/15/30/60 有效),默认 `'hfq'` |
418
- | `options.startDate` | `string` | 开始时间 `YYYY-MM-DD HH:mm:ss` |
419
- | `options.endDate` | `string` | 结束时间 `YYYY-MM-DD HH:mm:ss` |
420
-
421
- **示例**
422
-
423
- ```typescript
424
- // 获取分时数据
425
- const timeline = await sdk.getMinuteKline('000001');
426
-
427
- // 获取 5 分钟 K 线
428
- const kline5m = await sdk.getMinuteKline('sz000858', { period: '5' });
429
- ```
430
-
431
- ---
432
-
433
- ### `getTodayTimeline(code): Promise<TodayTimelineResponse>`
434
-
435
- 获取当日分时走势数据,数据来源:腾讯财经。
436
-
437
- > **注意**:仅返回当日交易时段数据,成交量和成交额为累计值。
438
-
439
- **参数**
440
-
441
- | 参数 | 类型 | 说明 |
442
- |------|------|------|
443
- | `code` | `string` | 股票代码,如 `'sz000001'` |
444
-
445
- **返回类型**
446
-
447
- ```typescript
448
- interface TodayTimelineResponse {
449
- code: string; // 股票代码
450
- date: string; // 交易日期 YYYYMMDD
451
- data: TodayTimeline[]; // 分时数据列表
452
- }
453
-
454
- interface TodayTimeline {
455
- time: string; // 时间 HH:mm
456
- price: number; // 成交价
457
- volume: number; // 累计成交量(股)
458
- amount: number; // 累计成交额(元)
459
- avgPrice: number; // 当日均价
460
- }
461
- ```
462
-
463
- **示例**
464
-
465
- ```typescript
466
- const timeline = await sdk.getTodayTimeline('sz000001');
467
- console.log(timeline.date); // '20241218'
468
- console.log(timeline.data[0].avgPrice); // 当日均价
469
- ```
470
-
471
- ---
472
-
473
- ### `getAShareCodeList(includeExchange?): Promise<string[]>`
474
-
475
- 获取全部 A 股代码列表(沪市、深市、北交所 5000+ 只股票)。
476
-
477
- **参数**
478
-
479
- | 参数 | 类型 | 说明 |
480
- |------|------|------|
481
- | `includeExchange` | `boolean` | 是否包含交易所前缀,默认 `true` |
482
-
483
- **示例**
484
-
485
- ```typescript
486
- // 包含交易所前缀
487
- const codes = await sdk.getAShareCodeList();
488
- // ['sh600000', 'sz000001', 'bj430047', ...]
489
-
490
- // 不包含交易所前缀
491
- const pureCodes = await sdk.getAShareCodeList(false);
492
- // ['600000', '000001', '430047', ...]
493
- ```
494
-
495
- ---
496
-
497
- ### `getUSCodeList(includeMarket?): Promise<string[]>`
498
-
499
- 获取全部美股代码列表。
500
-
501
- **参数**
502
-
503
- | 参数 | 类型 | 说明 |
504
- |------|------|------|
505
- | `includeMarket` | `boolean` | 是否包含市场前缀(如 `105.`),默认 `true` |
506
-
507
- **示例**
508
-
509
- ```typescript
510
- // 包含市场前缀
511
- const codes = await sdk.getUSCodeList();
512
- // ['105.MSFT', '105.AAPL', '106.BABA', ...]
513
-
514
- // 不包含市场前缀
515
- const pureCodes = await sdk.getUSCodeList(false);
516
- // ['MSFT', 'AAPL', 'BABA', ...]
517
- ```
518
-
519
- > 市场代码说明:`105` = 纳斯达克,`106` = 纽交所,`107` = 其他
520
-
521
- ---
522
-
523
- ### `getHKCodeList(): Promise<string[]>`
524
-
525
- 获取全部港股代码列表。
526
-
527
- **示例**
528
-
529
- ```typescript
530
- const codes = await sdk.getHKCodeList();
531
- // ['00700', '09988', '03690', ...]
532
- ```
533
-
534
- ---
535
-
536
- ### `getAllAShareQuotes(options?): Promise<FullQuote[]>`
537
-
538
- 获取全市场 A 股实时行情(5000+ 只股票),返回格式同 `getFullQuotes`。
539
-
540
- > ⚠️ 如遇超时或报错,可尝试减小 `batchSize`(如设为 `100`)。
541
-
542
- **参数**
543
-
544
- | 参数 | 类型 | 说明 |
545
- |------|------|------|
546
- | `options.batchSize` | `number` | 单次请求股票数量,默认 `500`,最大 `500` |
547
- | `options.concurrency` | `number` | 最大并发数,默认 `7` |
548
- | `options.onProgress` | `(completed, total) => void` | 进度回调 |
549
-
550
- **示例**
551
-
552
- ```typescript
553
- const allQuotes = await sdk.getAllAShareQuotes({
554
- batchSize: 300,
555
- concurrency: 3,
556
- onProgress: (completed, total) => {
557
- console.log(`进度: ${completed}/${total}`);
558
- },
559
- });
560
- console.log(`共获取 ${allQuotes.length} 只股票`);
561
- ```
562
-
563
- ---
564
-
565
- ### `getAllHKShareQuotes(options?): Promise<HKQuote[]>`
566
-
567
- 获取全市场港股实时行情,返回格式同 `getHKQuotes`。
568
-
569
- **参数**
570
-
571
- | 参数 | 类型 | 说明 |
572
- |------|------|------|
573
- | `options.batchSize` | `number` | 单次请求股票数量,默认 `500`,最大 `500` |
574
- | `options.concurrency` | `number` | 最大并发数,默认 `7` |
575
- | `options.onProgress` | `(completed, total) => void` | 进度回调 |
576
-
577
- **示例**
578
-
579
- ```typescript
580
- const allHKQuotes = await sdk.getAllHKShareQuotes({
581
- batchSize: 300,
582
- concurrency: 3,
583
- });
584
- console.log(`共获取 ${allHKQuotes.length} 只港股`);
585
- ```
586
-
587
- ---
588
-
589
- ### `getAllUSShareQuotes(options?): Promise<USQuote[]>`
590
-
591
- 获取全市场美股实时行情,返回格式同 `getUSQuotes`。
592
-
593
- **参数**
594
-
595
- | 参数 | 类型 | 说明 |
596
- |------|------|------|
597
- | `options.batchSize` | `number` | 单次请求股票数量,默认 `500`,最大 `500` |
598
- | `options.concurrency` | `number` | 最大并发数,默认 `7` |
599
- | `options.onProgress` | `(completed, total) => void` | 进度回调 |
600
-
601
- **示例**
602
-
603
- ```typescript
604
- const allUSQuotes = await sdk.getAllUSShareQuotes({
605
- batchSize: 300,
606
- concurrency: 3,
607
- });
608
- console.log(`共获取 ${allUSQuotes.length} 只美股`);
609
- ```
610
-
611
- ---
612
-
613
- ### `getAllQuotesByCodes(codes, options?): Promise<FullQuote[]>`
614
-
615
- 批量获取指定股票的全量行情,参数同 `getAllAShareQuotes`。
616
-
617
- ```typescript
618
- const quotes = await sdk.getAllQuotesByCodes(
619
- ['sz000858', 'sh600519', 'sh600000'],
620
- { batchSize: 100, concurrency: 2 }
621
- );
622
- ```
623
-
624
- ---
625
-
626
- ### `getFundFlow(codes): Promise<FundFlow[]>`
627
-
628
- 获取资金流向数据。
629
-
630
- **参数**
631
-
632
- | 参数 | 类型 | 说明 |
633
- |------|------|------|
634
- | `codes` | `string[]` | 股票代码数组,如 `['sz000858']` |
635
-
636
- **返回类型**
637
-
638
- ```typescript
639
- interface FundFlow {
640
- code: string;
641
- name: string;
642
- mainInflow: number; // 主力流入
643
- mainOutflow: number; // 主力流出
644
- mainNet: number; // 主力净流入
645
- mainNetRatio: number; // 主力净流入占比
646
- retailInflow: number; // 散户流入
647
- retailOutflow: number; // 散户流出
648
- retailNet: number; // 散户净流入
649
- retailNetRatio: number; // 散户净流入占比
650
- totalFlow: number; // 总资金流
651
- date: string;
652
- }
653
- ```
654
-
655
- ---
656
-
657
- ### `getPanelLargeOrder(codes): Promise<PanelLargeOrder[]>`
658
-
659
- 获取盘口大单占比。
660
-
661
- **参数**
662
-
663
- | 参数 | 类型 | 说明 |
664
- |------|------|------|
665
- | `codes` | `string[]` | 股票代码数组,如 `['sz000858']` |
666
-
667
- **返回类型**
668
-
669
- ```typescript
670
- interface PanelLargeOrder {
671
- buyLargeRatio: number; // 买盘大单占比
672
- buySmallRatio: number; // 买盘小单占比
673
- sellLargeRatio: number; // 卖盘大单占比
674
- sellSmallRatio: number; // 卖盘小单占比
675
- }
676
- ```
677
-
678
- ---
679
-
680
- ### `getHKQuotes(codes): Promise<HKQuote[]>`
681
-
682
- 获取港股行情。
683
-
684
- **参数**
685
-
686
- | 参数 | 类型 | 说明 |
687
- |------|------|------|
688
- | `codes` | `string[]` | 港股代码数组,如 `['09988', '00700']` |
689
-
690
- **示例**
691
-
692
- ```typescript
693
- const quotes = await sdk.getHKQuotes(['09988']);
694
- console.log(quotes[0].name); // 阿里巴巴-W
695
- ```
696
-
697
- ---
698
-
699
- ### `getUSQuotes(codes): Promise<USQuote[]>`
700
-
701
- 获取美股行情。
702
-
703
- **参数**
704
-
705
- | 参数 | 类型 | 说明 |
706
- |------|------|------|
707
- | `codes` | `string[]` | 美股代码数组,如 `['BABA', 'AAPL']` |
708
-
709
- **返回类型**
710
-
711
- ```typescript
712
- interface USQuote {
713
- marketId: string; // 市场标识
714
- name: string; // 名称
715
- code: string; // 股票代码
716
- price: number; // 最新价
717
- prevClose: number; // 昨收
718
- open: number; // 今开
719
- volume: number; // 成交量
720
- time: string; // 时间
721
- change: number; // 涨跌额
722
- changePercent: number; // 涨跌幅%
723
- high: number; // 最高
724
- low: number; // 最低
725
- amount: number; // 成交额
726
- turnoverRate: number | null; // 换手率%
727
- pe: number | null; // 市盈率
728
- amplitude: number | null; // 振幅%
729
- totalMarketCap: number | null; // 总市值(亿)
730
- pb: number | null; // 市净率
731
- high52w: number | null; // 52周最高价
732
- low52w: number | null; // 52周最低价
733
- raw: string[]; // 原始字段数组
734
- }
735
- ```
736
-
737
- **示例**
738
-
739
- ```typescript
740
- const quotes = await sdk.getUSQuotes(['AAPL', 'MSFT']);
741
- console.log(quotes[0].code); // AAPL.OQ
742
- console.log(quotes[0].price); // 270.97
743
- console.log(quotes[0].high52w); // 288.62
744
- console.log(quotes[0].low52w); // 168.64
745
- ```
746
-
747
- ---
748
-
749
- ### `getFundQuotes(codes): Promise<FundQuote[]>`
750
-
751
- 获取公募基金行情。
752
-
753
- **参数**
754
-
755
- | 参数 | 类型 | 说明 |
756
- |------|------|------|
757
- | `codes` | `string[]` | 基金代码数组,如 `['000001', '110011']` |
758
-
759
- **返回类型**
760
-
761
- ```typescript
762
- interface FundQuote {
763
- code: string;
764
- name: string;
765
- nav: number; // 最新单位净值
766
- accNav: number; // 累计净值
767
- change: number; // 当日涨跌额
768
- navDate: string; // 净值日期
769
- }
770
- ```
771
-
772
- ---
773
-
774
- ### `batchRaw(params): Promise<{ key: string; fields: string[] }[]>`
775
-
776
- 批量混合查询,返回原始解析结果。
777
-
778
- **参数**
779
-
780
- | 参数 | 类型 | 说明 |
781
- |------|------|------|
782
- | `params` | `string` | 逗号分隔的查询参数,如 `'sz000858,s_sh000001'` |
783
-
784
- **示例**
785
-
786
- ```typescript
787
- const raw = await sdk.batchRaw('sz000858,s_sh000001');
788
- console.log(raw[0].key); // sz000858
789
- console.log(raw[0].fields); // ['51', '五 粮 液', '000858', ...]
790
- ```
791
-
792
- ---
793
-
794
- ## 技术指标
795
-
796
- ### `getKlineWithIndicators(symbol, options): Promise<KlineWithIndicators[]>`
797
-
798
- 获取带技术指标的 K 线数据。支持 A 股、港股、美股,自动识别市场。
799
-
800
- **参数**
801
-
802
- | 参数 | 类型 | 说明 |
803
- |------|------|------|
804
- | `symbol` | `string` | 股票代码 |
805
- | `options.market` | `'A' \| 'HK' \| 'US'` | 可选,市场类型(不传则自动识别) |
806
- | `options.period` | `'daily' \| 'weekly' \| 'monthly'` | 可选,K 线周期,默认 `'daily'` |
807
- | `options.adjust` | `'' \| 'qfq' \| 'hfq'` | 可选,复权类型,默认 `'hfq'` |
808
- | `options.startDate` | `string` | 可选,开始日期 `YYYYMMDD` |
809
- | `options.endDate` | `string` | 可选,结束日期 `YYYYMMDD` |
810
- | `options.indicators` | `IndicatorOptions` | 技术指标配置 |
811
-
812
- **indicators 配置**
813
-
814
- ```typescript
815
- interface IndicatorOptions {
816
- ma?: MAOptions | boolean; // 均线
817
- macd?: MACDOptions | boolean; // MACD
818
- boll?: BOLLOptions | boolean; // 布林带
819
- kdj?: KDJOptions | boolean; // KDJ
820
- rsi?: RSIOptions | boolean; // RSI
821
- wr?: WROptions | boolean; // WR
822
- }
823
-
824
- // 各指标可选参数
825
- interface MAOptions {
826
- periods?: number[]; // 周期数组,默认 [5, 10, 20, 30, 60, 120, 250]
827
- type?: 'sma' | 'ema' | 'wma'; // 均线类型,默认 'sma'
828
- }
829
-
830
- interface MACDOptions {
831
- short?: number; // 短期 EMA 周期,默认 12
832
- long?: number; // 长期 EMA 周期,默认 26
833
- signal?: number; // 信号线周期,默认 9
834
- }
835
-
836
- interface BOLLOptions {
837
- period?: number; // 均线周期,默认 20
838
- stdDev?: number; // 标准差倍数,默认 2
839
- }
840
-
841
- interface KDJOptions {
842
- period?: number; // RSV 周期,默认 9
843
- kPeriod?: number; // K 平滑周期,默认 3
844
- dPeriod?: number; // D 平滑周期,默认 3
845
- }
846
-
847
- interface RSIOptions {
848
- periods?: number[]; // 周期数组,默认 [6, 12, 24]
849
- }
850
-
851
- interface WROptions {
852
- periods?: number[]; // 周期数组,默认 [6, 10]
853
- }
854
-
855
- interface BIASOptions {
856
- periods?: number[]; // 周期数组,默认 [6, 12, 24]
857
- }
858
-
859
- interface CCIOptions {
860
- period?: number; // 周期,默认 14
861
- }
862
-
863
- interface ATROptions {
864
- period?: number; // 周期,默认 14
865
- }
866
- ```
867
-
868
- **示例**
869
-
870
- ```typescript
871
- // 获取平安银行带技术指标的日 K 线
872
- const data = await sdk.getKlineWithIndicators('sz000001', {
873
- startDate: '20240101',
874
- endDate: '20241231',
875
- indicators: {
876
- ma: { periods: [5, 10, 20, 60] },
877
- macd: true,
878
- boll: true,
879
- kdj: true,
880
- rsi: { periods: [6, 12] },
881
- wr: true,
882
- bias: { periods: [6, 12, 24] },
883
- cci: { period: 14 },
884
- atr: { period: 14 },
885
- }
886
- });
887
-
888
- // 使用数据
889
- data.forEach(k => {
890
- console.log(`${k.date}: ${k.close}`);
891
- console.log(` MA5=${k.ma?.ma5}, MA10=${k.ma?.ma10}`);
892
- console.log(` MACD: DIF=${k.macd?.dif}, DEA=${k.macd?.dea}`);
893
- console.log(` BOLL: 上=${k.boll?.upper}, 中=${k.boll?.mid}, 下=${k.boll?.lower}`);
894
- console.log(` KDJ: K=${k.kdj?.k}, D=${k.kdj?.d}, J=${k.kdj?.j}`);
895
- console.log(` RSI6=${k.rsi?.rsi6}, WR6=${k.wr?.wr6}`);
896
- console.log(` BIAS6=${k.bias?.bias6}, CCI=${k.cci?.cci}, ATR=${k.atr?.atr}`);
897
- });
898
-
899
- // 港股(自动识别)
900
- const hkData = await sdk.getKlineWithIndicators('00700', {
901
- indicators: { ma: true, macd: true }
902
- });
903
-
904
- // 美股(自动识别)
905
- const usData = await sdk.getKlineWithIndicators('105.MSFT', {
906
- indicators: { boll: true, rsi: true }
907
- });
908
- ```
909
-
910
- ---
911
-
912
- ### 独立指标计算函数
913
-
914
- SDK 还导出了独立的指标计算函数,可自行传入数据计算:
915
-
916
- ```typescript
917
- import {
918
- calcMA,
919
- calcSMA,
920
- calcEMA,
921
- calcMACD,
922
- calcBOLL,
923
- calcKDJ,
924
- calcRSI,
925
- calcWR,
926
- calcBIAS,
927
- calcCCI,
928
- calcATR,
929
- addIndicators,
930
- } from 'stock-sdk';
931
-
932
- // 获取 K 线数据
933
- const klines = await sdk.getHistoryKline('sz000001');
934
- const closes = klines.map(k => k.close);
935
-
936
- // 计算均线
937
- const ma = calcMA(closes, { periods: [5, 10, 20], type: 'sma' });
938
- console.log(ma[10].ma5); // 第 10 天的 5 日均线
939
-
940
- // 计算 MACD
941
- const macd = calcMACD(closes);
942
- console.log(macd[50].dif, macd[50].dea, macd[50].macd);
943
-
944
- // 计算布林带
945
- const boll = calcBOLL(closes, { period: 20, stdDev: 2 });
946
- console.log(boll[30].upper, boll[30].mid, boll[30].lower);
947
-
948
- // 计算 KDJ(需要 OHLC 数据)
949
- const ohlcv = klines.map(k => ({
950
- open: k.open, high: k.high, low: k.low, close: k.close
951
- }));
952
- const kdj = calcKDJ(ohlcv, { period: 9 });
953
- console.log(kdj[20].k, kdj[20].d, kdj[20].j);
954
-
955
- // 计算乖离率
956
- const bias = calcBIAS(closes, { periods: [6, 12, 24] });
957
- console.log(bias[30].bias6, bias[30].bias12, bias[30].bias24);
958
-
959
- // 计算 CCI(需要 HLC 数据)
960
- const hlc = klines.map(k => ({ high: k.high, low: k.low, close: k.close }));
961
- const cci = calcCCI(hlc, { period: 14 });
962
- console.log(cci[30].cci);
963
-
964
- // 计算 ATR(需要 HLC 数据)
965
- const atr = calcATR(hlc, { period: 14 });
966
- console.log(atr[30].atr, atr[30].tr);
967
-
968
- // 使用 addIndicators 一次性添加多个指标
969
- const withIndicators = addIndicators(klines, {
970
- ma: { periods: [5, 10] },
971
- macd: true,
972
- boll: true,
973
- bias: true,
974
- cci: true,
975
- atr: true,
976
- });
977
- console.log(withIndicators[50].ma?.ma5);
978
- console.log(withIndicators[50].macd?.dif);
979
- console.log(withIndicators[50].bias?.bias6);
980
- console.log(withIndicators[50].cci?.cci);
981
- console.log(withIndicators[50].atr?.atr);
982
- ```
983
-
984
- ---
985
-
986
- ## 浏览器直接使用
987
-
988
- SDK 使用原生 `TextDecoder` 解码 GBK 编码数据,无需额外 polyfill。
989
-
990
- ```html
991
- <script type="module">
992
- import { StockSDK } from 'https://unpkg.com/stock-sdk/dist/index.js';
993
-
994
- const sdk = new StockSDK();
995
- const quotes = await sdk.getFullQuotes(['sz000858']);
996
- console.log(quotes[0].name, quotes[0].price);
997
- </script>
998
- ```
999
-
1000
- ---
1001
-
1002
- ## 开发
1003
-
1004
- ```bash
1005
- # 安装依赖
1006
- yarn install
1007
-
1008
- # 运行测试
1009
- yarn test
1010
-
1011
- # 查看覆盖率
1012
- yarn test --coverage
1013
-
1014
- # 构建
1015
- yarn build
1016
-
1017
- # 启动调试页面
1018
- yarn dev
1019
- ```
1020
-
1021
163
  ## 许可证
1022
164
 
1023
165
  [ISC](./LICENSE)
1024
166
 
1025
167
  ---
1026
168
 
1027
- 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://chengzuopeng.github.io/stock-sdk/) | 🐛 [Issues](https://github.com/chengzuopeng/stock-sdk/issues)
169
+ 🌐 [官网](https://chengzuopeng.github.io/stock-sdk) | 📦 [NPM](https://www.npmjs.com/package/stock-sdk) | 📖 [GitHub](https://github.com/chengzuopeng/stock-sdk) | 🎮 [在线演示](https://chengzuopeng.github.io/stock-sdk/playground) | 🐛 [Issues](https://github.com/chengzuopeng/stock-sdk/issues)
1028
170
 
1029
171
  ---
1030
172
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "stock-sdk",
3
- "version": "1.3.0-beta.2",
3
+ "version": "1.3.1",
4
4
  "type": "module",
5
5
  "main": "./dist/index.cjs",
6
6
  "module": "./dist/index.js",
@@ -24,15 +24,18 @@
24
24
  "scripts": {
25
25
  "build": "tsup",
26
26
  "test": "vitest run",
27
- "dev": "yarn build && (sleep 1 && open http://localhost:4000/playground/ &) && npx serve -l 4000 ."
27
+ "dev": "yarn build && (sleep 1 && open http://localhost:4000/playground/ &) && npx serve -l 4000 .",
28
+ "dev:docs": "vitepress dev website",
29
+ "build:docs": "vitepress build website",
30
+ "build:docs:root": "DOCS_BASE=/ vitepress build website",
31
+ "preview:docs": "vitepress preview website"
28
32
  },
29
33
  "keywords": [
30
34
  "stock",
31
- "tencent",
32
- "qt.gtimg.cn",
33
35
  "sdk",
34
36
  "browser",
35
37
  "node",
38
+ "akshare",
36
39
  "A股",
37
40
  "港股",
38
41
  "美股",
@@ -53,14 +56,17 @@
53
56
  "node": ">=18.0.0"
54
57
  },
55
58
  "devDependencies": {
59
+ "@iconify/vue": "^5.0.0",
56
60
  "@types/node": "^24.10.2",
57
61
  "@vitest/coverage-v8": "^4.0.16",
58
62
  "tsup": "^8.3.5",
59
63
  "typescript": "^5.9.3",
60
- "vitest": "^4.0.15"
64
+ "vitepress": "^1.6.4",
65
+ "vitest": "^4.0.15",
66
+ "vue": "^3.5.26"
61
67
  },
62
68
  "publishConfig": {
63
69
  "registry": "https://registry.npmjs.org/"
64
70
  },
65
- "packageManager": "yarn@4.6.0+sha512.5383cc12567a95f1d668fbe762dfe0075c595b4bfff433be478dbbe24e05251a8e8c3eb992a986667c1d53b6c3a9c85b8398c35a960587fbd9fa3a0915406728"
71
+ "packageManager": "yarn@1.22.22"
66
72
  }