裤拉拉 發表於 2025-12-29 18:16:00

写给前端的股票行情 SDK: stock-sdk,终于不用再求后端帮忙了

<blockquote>
<p>用 JavaScript 获取股票数据,真的有这么难吗?</p>
</blockquote>
<h2 id="起因">起因</h2>
<p>说实话,这个项目的诞生完全是被逼出来的。</p>
<p>去年我想做一个股票行情看板,就是那种简单的页面,能实时显示几只自选股的涨跌。听起来很简单对吧?但当我真正开始动手的时候,才发现事情没那么简单。</p>
<p>网上搜一圈,股票数据接口相关的工具几乎全是 Python 的。AkShare、Tushare、掘金量化……确实牛,功能也确实全,但问题是——<strong>我是个前端啊</strong>。</p>
<p>为了一个小看板,难道要我专门搭一个 Python 后端?再写个接口转发给前端?这也太折腾了。</p>
<p>于是我开始找有没有 JavaScript 能用的方案。结果你猜怎么着?翻遍了 npm,几乎找不到一个好用的。有的年久失修,有的只支持 Node.js 不支持浏览器,有的类型支持一塌糊涂,还有的接口莫名其妙就挂了。</p>
<p>摸索了一圈之后,我决定:<strong>算了,自己写一个得了。</strong></p>
<h2 id="stock-sdk-是什么">stock-sdk 是什么?</h2>
<p>简单说,<strong>stock-sdk</strong> 就是一个专门给前端和 Node.js 用的股票行情 SDK。</p>
<p>核心目标就一个:让你用最熟悉的 JavaScript / TypeScript,10 行代码搞定股票数据获取。</p>
<pre><code class="language-ts">import { StockSDK } from 'stock-sdk';

const sdk = new StockSDK();

const quotes = await sdk.getSimpleQuotes(['sh000001', 'sz000858', 'sh600519']);

quotes.forEach(q =&gt; {
console.log(`${q.name}: ${q.price} (${q.changePercent}%)`);
});
</code></pre>
<p>就这么简单。不用搭后端,不用装 Python,浏览器里直接跑。</p>
<h2 id="它能干什么">它能干什么?</h2>
<p>写到现在,功能已经比较齐全了:</p>
<p><strong>行情数据</strong></p>
<ul>
<li>A 股、港股、美股、公募基金的实时行情</li>
<li>历史 K 线(日线、周线、月线)</li>
<li>分钟 K 线(1 分钟到 60 分钟都支持)</li>
<li>当日分时走势</li>
</ul>
<p><strong>板块数据</strong></p>
<ul>
<li>行业板块、概念板块的列表和实时行情</li>
<li>板块成分股</li>
<li>板块 K 线数据</li>
</ul>
<p><strong>技术指标</strong></p>
<ul>
<li>内置 MA、MACD、BOLL、KDJ、RSI 等常用指标</li>
<li>一个接口搞定 K 线 + 指标计算</li>
</ul>
<p><strong>扩展数据</strong></p>
<ul>
<li>资金流向</li>
<li>盘口大单</li>
<li>A 股交易日历</li>
</ul>
<p><strong>批量能力</strong></p>
<ul>
<li>一次性获取全市场 5000+ 只 A 股行情</li>
<li>内置并发控制,不会把接口打挂</li>
<li>进度回调,知道当前拉取到哪里了</li>
</ul>
<h2 id="为什么要用它">为什么要用它?</h2>
<p>说实话,这个问题我自己也想过很久。毕竟市面上不是没有其他方案。</p>
<p>但仔细想想,stock-sdk 确实解决了一些痛点:</p>
<p><strong>1. 零依赖,真的很小</strong></p>
<p>压缩后不到 20KB。没有乱七八糟的依赖,不会给你的项目增加额外负担。</p>
<p><strong>2. 浏览器和 Node.js 都能跑</strong></p>
<p>这个是我一开始就确定的设计目标。不管你是做 Web 页面还是 Node.js 脚本,都能直接用。同时提供 ESM 和 CommonJS 两种格式,现代项目和老项目都兼容。</p>
<p><strong>3. TypeScript 类型完整</strong></p>
<p>说真的,类型提示这个东西,用过就回不去了。每个接口返回什么字段、每个参数是什么类型,IDE 里一目了然。写代码的时候不用反复查文档。</p>
<p><strong>4. 接口稳定</strong></p>
<p>数据源用的是腾讯财经和东方财富的公开接口,稳定性还是有保障的。而且我做了比较完善的错误处理,不会因为某个请求失败就整个崩掉。</p>
<h2 id="适合什么场景">适合什么场景?</h2>
<p>这个 SDK 不是万能的,我也不打算把它做成大而全的东西。它比较适合这些场景:</p>
<ul>
<li><strong>股票看板</strong>:做一个自选股页面,看看涨跌</li>
<li><strong>数据可视化</strong>:用 ECharts 或者 TradingView 画 K 线图</li>
<li><strong>学习 Demo</strong>:金融课程、量化入门的演示项目</li>
<li><strong>量化验证</strong>:快速验证一个交易策略的想法</li>
<li><strong>定时脚本</strong>:Node.js 定时抓取行情数据</li>
</ul>
<p>如果你需要更专业的量化回测、高频交易之类的,这个 SDK 可能就不太够用了。那种场景还是 Python 生态更成熟。</p>
<h2 id="一些实际的例子">一些实际的例子</h2>
<p><strong>获取全市场 A 股行情</strong></p>
<pre><code class="language-ts">const allQuotes = await sdk.getAllAShareQuotes({
batchSize: 300,
concurrency: 5,
onProgress: (completed, total) =&gt; {
    console.log(`进度: ${completed}/${total}`);
},
});

console.log(`共获取 ${allQuotes.length} 只股票`);
</code></pre>
<p>5000 多只股票,几秒钟就拉完了。并发控制是内置的,不用自己操心。</p>
<p><strong>获取带技术指标的 K 线</strong></p>
<pre><code class="language-ts">const data = await sdk.getKlineWithIndicators('sh600519', {
period: 'daily',
count: 100,
indicators: {
    ma: { periods: },
    macd: true,
    boll: true,
},
});

// data.kline 是原始 K 线
// data.indicators.ma 是均线数据
// data.indicators.macd 是 MACD 数据
// data.indicators.boll 是布林带数据
</code></pre>
<p>一个接口把 K 线和指标都算好了,直接拿去画图就行。</p>
<h2 id="写在最后">写在最后</h2>
<p>这个项目从去年开始写,断断续续维护到现在,功能也越来越完善了。</p>
<p>其实我一直觉得,工具这个东西,好不好用自己最清楚。stock-sdk 就是我自己在用的东西,遇到问题就修,需要新功能就加。</p>
<p>如果你也是前端,也需要获取股票数据,不妨试试。有问题欢迎提 Issue,我会尽量响应。</p>
<hr>
<p><strong>相关链接</strong></p>
<ul>
<li>📦 NPM</li>
<li>📖 GitHub</li>
<li>🌐 官方文档</li>
<li>🎮 在线演示</li>
</ul>
<p>安装就一行命令:</p>
<pre><code class="language-bash">npm install stock-sdk
</code></pre>
<p>如果觉得还不错,给个 Star ⭐ 呗~</p><br><br>
来源:https://www.cnblogs.com/chengzp/p/19417561/stock-sdk
頁: [1]
查看完整版本: 写给前端的股票行情 SDK: stock-sdk,终于不用再求后端帮忙了