做过金融相关的前端(哪怕只是行情看板 Demo),大概率都会遇到一些工程层面的麻烦:

  • 股票行情工具大多集中在 Python 生态,前端难以直接使用
  • 为了拉数据,不得不自建一层后端中转
  • 接口格式混乱、字段不友好,还要处理 GBK 编码
  • 全市场批量拉取时,并发、限频、容错一堆细节要自己兜

stock-sdk 做的事很朴素:把这些公开数据源的“工程脏活”封装起来,提供一个 零依赖、TypeScript 友好、浏览器与 Node.js 都能用 的行情 SDK,让前端可以像调用普通 API 一样获取行情、K 线和分时数据。

前阵子有个朋友问我:抓股票行情数据是不是必须学 Python?

我说不一定啊,JavaScript 也能搞。

他不信,说你随便找个能用的 JS 股票数据库试试?

我还真试了。然后发现……他说得对,真没几个能用的。

被迫营业

事情是这样的。

我本来只是想给自己做个小工具,每天早上打开浏览器就能看到自选股涨跌的那种。功能很简单,就是个看板页面,技术上也没什么难度。

难的是数据从哪来。

找了一圈才发现,股票数据这块,Python 生态是真的强。AkShare、Tushare 这些库功能齐全、文档完善、社区活跃,用 Python 的话几行代码就搞定了。

但问题是,我一个写前端的,为了个小看板专门去写 Python 后端?这也太杀鸡用牛刀了。

npm 上倒是有一些股票相关的包,但要么好几年没更新了,要么只支持 Node.js 不支持浏览器,要么类型定义稀烂。能打的真没几个。

既然找不到合适的,那就自己造一个呗。

stock-sdk 诞生了

花了点时间,我把自己用的代码整理成了一个 npm 包,取名 stock-sdk

设计思路很简单:让前端能用最熟悉的方式获取股票数据,不要额外依赖,不用搭后端,浏览器里就能跑。

先看个最简单的例子:

1
2
3
4
5
6
7
8
9
10
import { StockSDK } from 'stock-sdk';

const sdk = new StockSDK();

// 获取上证指数、五粮液、茅台的行情
const quotes = await sdk.getSimpleQuotes(['sh000001', 'sz000858', 'sh600519']);

quotes.forEach(q => {
console.log(`${q.name}: ${q.price} (${q.changePercent}%)`);
});

没有 API Key,不用注册账号,直接 npm install 就能用。

功能盘点

用了一段时间,功能也慢慢加上来了。目前支持的东西还挺多:

行情获取

市场 说明
A 股 沪深两市 + 北交所,5000+ 只股票
港股 港交所股票行情
美股 纳斯达克、纽交所股票
基金 公募基金净值和估值

除了实时行情,还支持历史 K 线(日/周/月)、分钟 K 线(1/5/15/30/60 分钟)、当日分时走势。

板块数据

行业板块和概念板块都支持:

  • 板块列表和实时涨跌
  • 板块成分股查询
  • 板块 K 线数据

这个在分析热点轮动的时候挺有用的。

技术指标

不想自己算指标?SDK 里内置了常用的:

  • 均线:MA(支持 SMA、EMA、WMA)
  • 趋势:MACD、BOLL
  • 超买超卖:KDJ、RSI、WR
  • 其他:BIAS、CCI、ATR

一个接口就能拿到 K 线 + 指标数据,直接扔给 ECharts 画图。

批量能力

这个是我比较满意的一点。很多接口一次只能查几只股票,想拉全市场数据就得自己处理并发、限流、重试……

stock-sdk 把这些都封装好了:

1
2
3
4
5
const allQuotes = await sdk.getAllAShareQuotes({
batchSize: 300,
concurrency: 5,
onProgress: (done, total) => console.log(`${done}/${total}`),
});

一行代码拉 5000+ 只股票,内置并发控制,还有进度回调。

技术细节

说几个我觉得做得还行的点:

1. 真·零依赖

没有用 axios,没有 lodash,什么都没有。用的是原生 fetch,所以浏览器和 Node.js 18+ 都能跑。打包出来不到 20KB。

2. 双模块格式

同时输出 ESM 和 CommonJS,现代项目用 import,老项目用 require,都没问题。

3. TypeScript First

从第一行代码就是用 TypeScript 写的,类型定义是跟着代码一起维护的,不是后补的 .d.ts。写代码的时候 IDE 提示很准,返回字段有哪些、参数怎么传,鼠标悬停就能看到。

4. 测试覆盖

核心逻辑都有单元测试,覆盖率 95% 以上。毕竟是处理金融数据的,精度和稳定性还是要保证的。

我拿它来干嘛

分享几个我自己的用法:

早盘快报

写了个 Node.js 脚本,每天早上 9:30 自动拉一遍自选股行情,推送到微信。

热门板块监控

用行业板块接口 + 概念板块接口,每隔 5 分钟刷新一次,看看今天资金在往哪里跑。

策略回测

拉历史 K 线 + 技术指标,验证一些简单的交易逻辑。虽然比不上专业的回测框架,但用来快速验证想法够用了。

给朋友用

做了个简单的 Web 页面,朋友想查什么股票直接输入代码就行。不用装 App,浏览器打开就能用。

它不适合什么

说完优点也说说局限性:

  • 不适合高频交易:数据源是公开接口,延迟在秒级,毫秒级的场景不行
  • 不适合专业量化:真正做量化还是 Python 生态更成熟,stock-sdk 更适合快速验证和原型开发
  • 不保证数据准确性:数据来自腾讯和东财的公开接口,仅供学习参考,投资决策还是要以券商数据为准

最后

这个项目从自用到开源,也维护了有一段时间了。

功能在慢慢完善,文档也在慢慢补齐。最近还上线了官网和在线 Playground,不用本地安装就能直接试用。

如果你也是前端,也想折腾点股票数据相关的东西,可以试试这个库。

有问题随时提 Issue,我尽量响应。


🔗 链接汇总

安装命令:

1
2
3
4
5
npm install stock-sdk
# 或者
yarn add stock-sdk
# 或者
pnpm add stock-sdk

觉得有用的话,顺手点个 Star ⭐ 支持一下~

Happy Coding!