跳到主要内容
极客日志极客日志面向AI+效率的开发者社区
首页博客GitHub 精选镜像AI 生图工具UI配色美学隐私政策关于联系
搜索内容 / 工具 / 仓库 / 镜像...⌘K搜索
注册
博客列表
JavaScriptNode.js大前端算法

开箱即用的 React K 线图组件与股票数据 SDK

一个基于 React 的开源 K 线图组件 kline-charts-react 及配套的股票数据 SDK stock-sdk。该组件支持多种 K 线周期、15 种技术指标计算、丰富的交互操作及主题切换。数据层采用纯 TypeScript 实现的 SDK,支持浏览器和 Node.js 环境,内置常用指标算法。渲染层基于 ECharts,支持自定义数据源替换。组件提供简单的 Props 配置和 Ref 方法控制,适用于前端股票行情展示场景。

疯疯癫癫发布于 2026/4/6更新于 2026/7/2754 浏览
开箱即用的 React K 线图组件与股票数据 SDK

一个 prop 画出专业 K 线图,数据获取和指标计算全自动。

项目背景

需求很简单 —— 在一个 React 项目里加一个股票 K 线图,要能切周期、看指标、支持缩放拖拽。尝试过 TradingView 的 Lightweight Charts,但免费版功能有限且非 React 组件;npm 上搜索现成方案要么年久失修,要么是 demo 级别。因此决定自行开发通用组件。

项目概览

项目名叫 kline-charts-react,MIT 开源。

GitHub | npm | 在线演示

K 线图效果预览

上手非常简单:

import { KLineChart } from 'kline-charts-react';
import 'kline-charts-react/style.css';

function App() {
  return <KLineChart symbol="sh600519" height={600} />;
}

传一个股票代码,组件会自动拉取数据、计算技术指标、渲染出完整的 K 线图。

功能特性

对标主流金融交互,主要功能包括:

  • 周期全覆盖:分时、五日分时、日 K、周 K、月 K,加上 1/5/15/30/60 分钟线。
  • 15 种技术指标:MA、BOLL、MACD、KDJ、RSI、WR、BIAS、CCI、ATR、OBV、ROC、DMI、SAR、KC,全部前端实时计算。
  • 丰富的交互:鼠标滚轮缩放、拖拽平移、十字准线、数据 Tooltip、缩放历史撤销/重做、全屏模式、导出图片。
  • 主题切换:内置明暗两套主题,也接受自定义颜色对象。
  • 复权处理:前复权、后复权、不复权,默认前复权。

数据层:stock-sdk

前端领域获取股票行情一直是个空白地带。为此开发了专门面向前端的股票数据 SDK:stock-sdk。

定位:让 JavaScript/TypeScript 开发者用最简单的方式获取股票行情和 K 线数据。

关键信息:

  • 纯 TS 实现,零外部依赖,压缩后体积不到 20KB
  • 浏览器和 Node.js 通吃,ESM/CJS 双格式
  • 支持 A 股、港股、美股和公募基金,实时行情、历史 K 线都有
  • 内置常用技术指标,MA、MACD、BOLL、KDJ、RSI 等开箱可用
  • TypeScript 类型齐全,IDE 里有完整的智能提示

示例代码:

import { StockSDK } from 'stock-sdk';
const sdk = new StockSDK();

// 批量获取实时行情
const quotes = await sdk.getSimpleQuotes(['sh600519', 'sz000858']);
quotes.forEach(q => {
  console.log(`${q.name}: ${q.price} (${q.changePercent}%)`);
});

// 获取前复权日 K 线
const kline = await sdk.getKline('sh600519', { period: 'daily', adjust: 'qfq' });

完整文档:stock-sdk.linkdiary.cn

如果你有自己的行情接口,组件也留了口子,支持自定义数据源替换。

渲染引擎:ECharts

图表渲染用的 ECharts。原因:成熟、稳定、社区大、文档全。K 线图(Candlestick)、折线图、柱状图、散点图这几种类型 ECharts 都有原生支持。

体积方面:组件内部做了按需注册,只引入了实际用到的 chart 和 component。echarts 作为 peerDependency 处理,不会打进组件包里。组件自身构建产物 77KB(gzip 约 19KB)。

核心设计

1. 简单场景简单用

默认配置下只需要传 symbol,开箱即用:

<KLineChart symbol="sh600519" />

需要精细控制的时候,全部通过 props 配:

<KLineChart 
  symbol="sh600519" 
  period="weekly" 
  adjust="qfq" 
  theme="dark" 
  indicators={['ma', 'volume', 'kdj', 'rsi']} 
  indicatorOptions={{ ma: { periods: [5, 10, 20, 60] }, }} 
  maxSubPanes={3} 
  height={700} 
/>
2. 数据源替换

内置数据源不满足需求时,传一个 dataProvider 就能把数据获取逻辑换成你自己的:

const myProvider = {
  getKline: async (params, signal) => {
    const res = await fetch(`/api/kline?symbol=${params.symbol}&period=${params.period}`, { signal });
    return res.json();
  },
  getTimeline: async (params, signal) => {
    const res = await fetch(`/api/timeline?symbol=${params.symbol}`, { signal });
    return res.json();
  },
};

<KLineChart symbol="sh600519" dataProvider={myProvider} />

K 线数据格式就是标准的 OHLCV(date, open, close, high, low, volume, amount),分时数据是 time, price, volume, amount, avgPrice。

3. Ref 方法

组件对外暴露了 ref,方便在组件外部做程序化控制:

const chartRef = useRef<KLineChartRef>(null);
chartRef.current?.refresh(); // 刷新
chartRef.current?.exportImage('png'); // 导出图片
chartRef.current?.setPeriod('weekly'); // 切换周期
chartRef.current?.getEchartsInstance(); // 获取 ECharts 实例
4. 分时自动轮询

看分时的时候一般需要持续刷新数据。组件内置了定时轮询,还能设定仅在开盘时间段内刷新:

<KLineChart 
  symbol="sh600519" 
  period="timeline" 
  autoRefresh={{ intervalMs: 5000, onlyTradingTime: true }} 
/>

安装方式

yarn add kline-charts-react
# 还需要安装 peer dependencies
yarn add react react-dom echarts

echarts 是 peerDependency 而不是 dependency,所以如果项目中已经装了 echarts,不会出现两份 echarts 的情况。

已知局限

提前说明几个还没解决的问题:

  • 移动端触控:桌面端的交互打磨得比较细了,但移动端的捏合缩放、双指操作还没有专门处理
  • 导出图片不完整:左上角的指标数值是 React DOM 渲染的,不在 ECharts Canvas 里,所以导出图片不会包含这部分
  • 没有 WebSocket:实时数据目前只能通过轮询,后续考虑接入 WebSocket 推送

总结

一个为 React 项目设计的 K 线图组件,传入股票代码即可渲染,内置 stock-sdk 数据源、15 种技术指标、完善的交互操作,支持自定义数据源和主题。

目录

  1. 项目背景
  2. 项目概览
  3. 功能特性
  4. 数据层:stock-sdk
  5. 渲染引擎:ECharts
  6. 核心设计
  7. 1. 简单场景简单用
  8. 2. 数据源替换
  9. 3. Ref 方法
  10. 4. 分时自动轮询
  11. 安装方式
  12. 还需要安装 peer dependencies
  13. 已知局限
  14. 总结
  • 免费图片AI生成工具免费生成了解详情
  • Magick API 一键接入全球大模型注册送1000万token查看
  • 免费图片视频在线生成30秒,将你的创意变成现实开始设计
  • X/Twitter免费视频下载器免登陆无限额度免费视频解析下载了解详情
  • 100+免费在线小游戏爽一把
极客日志微信公众号二维码

微信扫一扫,关注极客日志

微信公众号「极客日志V2」,在微信中扫描左侧二维码关注。展示文案:极客日志V2 zeeklog

更多推荐文章

查看全部
  • 《利用 Python 进行数据分析》阅读心得与技术实践指南
  • AI 数据标注平台的选型与实践:效率提升背后的技术逻辑
  • MimiClaw 基于 ESP32 扩展飞书与 GLM 集成方案详解
  • 4 个 Python 实战项目助你快速掌握核心语法
  • Linux ar 命令备份压缩实操指南
  • 英伟达与 GitHub 免费大模型 API Key 获取指南
  • IntelliJ IDEA AI 工具与插件全解析
  • 盲道分割叠加到 AR 视野的导航效果
  • C++ 位运算详解:寻找数组中只出现一次的元素
  • Docker Desktop 中文界面设置指南
  • PyTorch 生成式人工智能:循环神经网络详解与实现
  • GitHub Copilot 接入第三方 OpenAI 兼容模型方案
  • 2026 毕业季 AIGC 检测标准与论文降重应对指南
  • Qwen3.5-9B 技术解析:混合架构与小模型超越大参数的实践
  • OpenClaw 在 Windows 与 Linux 系统的部署实战
  • etcdctl v3 版本命令使用指南
  • TM Forum 自智网络 L4 级标准体系详解
  • Linux 网络编程实战:基于 C++ 实现 JSON 与 HTTP Web 服务器
  • 2026 年 10 款 AI 文献综述工具盘点
  • Windows 系统安装配置 RabbitMQ 实战指南

相关免费在线工具

  • 加密/解密文本

    使用加密算法(如AES、TripleDES、Rabbit或RC4)加密和解密文本明文。 在线工具,加密/解密文本在线工具,online

  • Gemini 图片去水印

    基于开源反向 Alpha 混合算法去除 Gemini/Nano Banana 图片水印,支持批量处理与下载。 在线工具,Gemini 图片去水印在线工具,online

  • Keycode 信息

    查找任何按下的键的javascript键代码、代码、位置和修饰符。 在线工具,Keycode 信息在线工具,online

  • Escape 与 Native 编解码

    JavaScript 字符串转义/反转义;Java 风格 \uXXXX(Native2Ascii)编码与解码。 在线工具,Escape 与 Native 编解码在线工具,online

  • JavaScript / HTML 格式化

    使用 Prettier 在浏览器内格式化 JavaScript 或 HTML 片段。 在线工具,JavaScript / HTML 格式化在线工具,online

  • JavaScript 压缩与混淆

    Terser 压缩、变量名混淆,或 javascript-obfuscator 高强度混淆(体积会增大)。 在线工具,JavaScript 压缩与混淆在线工具,online