分享一个开箱即用的 React K 线图组件,前端炒股看盘必备

分享一个开箱即用的 React K 线图组件,前端炒股看盘必备
一个 prop 画出专业 K 线图,数据获取和指标计算全自动。

为什么又造了个轮子

先说结论:不是我想造,是被逼的。

需求很简单 —— 在一个 React 项目里加一个股票 K 线图,要能切周期、看指标、支持缩放拖拽。听起来是不是很基础?

然后我开始找现成方案。TradingView 的 Lightweight Charts 不错,但免费版功能有限,而且它不是 React 组件,得自己封装一层。npm 上搜 “react kline” 或者 “react candlestick”,出来的结果要么年久失修,要么只是个 demo 级别的东西,拿来用还不如自己写。

既然找不到趁手的,那就自己搞一个。顺便把它做得通用一点,发出来给大家省点时间。

长什么样

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

GitHub | npm | 在线演示

在这里插入图片描述

上手非常简单:

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 里就展示哪些指标的值,主图副图都有。写这些指标算法的过程就不回忆了,总之 DMI 那四条线和 SAR 的抛物线让我对金融数学有了全新的认识(敬畏)。

丰富的交互 —— 鼠标滚轮缩放、拖拽平移、十字准线、数据 Tooltip、缩放历史撤销/重做、全屏模式、导出图片。

主题切换 —— 内置明暗两套主题,也接受自定义颜色对象,想配成什么风格都行。

复权处理 —— 前复权、后复权、不复权,默认前复权。看长期走势的时候前复权是标配。

数据怎么来的 —— stock-sdk

K 线图组件最关键的问题其实不是怎么画图,而是数据从哪来。

前端领域获取股票行情一直是个空白地带。Python 那边有 akshare、tushare 这些成熟方案,但前端工程师想拿个行情数据,通常得起一套 Python 服务当中间层,链路长不说,维护起来也麻烦。

为了填这个空缺,我做了一个专门面向前端的股票数据 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 =newStockSDK();// 批量获取实时行情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'});

kline-charts-react 的数据层就是 stock-sdk 驱动的。你传入股票代码,stock-sdk 自动去拉行情数据,组件拿到数据后计算指标、构建图表配置、渲染到页面上。全程浏览器端完成,不需要你自己搭后端。

stock-sdk 也完全可以独立使用 —— 做行情看板、写抓取脚本、搭量化原型验证,都很方便。

完整文档在这里:stock-sdk.linkdiary.cn

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

渲染层为什么选 ECharts

图表渲染用的 ECharts。选它的原因比较朴素:成熟、稳定、社区大、文档全。K 线图(Candlestick)、折线图、柱状图、散点图这几种类型 ECharts 都有原生支持,加上它的 dataZoom、tooltip、axisPointer 这些交互组件,省了我大量的工作。

体积方面不用太担心 —— 组件内部做了按需注册,只引入了实际用到的 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 }} /> 

怎么装

yarnadd kline-charts-react # 还需要安装 peer dependenciesyarnadd react react-dom echarts 

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

已知局限

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

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

后面会逐步完善这些。

总结

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

有需要的同学可以试试,有任何反馈欢迎到 GitHub 交流。

Star 随缘,但如果你点了,那我掉的那些头发就算没白掉。


  • 在线演示: https://chengzuopeng.github.io/kline-charts-react/
  • GitHub: https://github.com/chengzuopeng/kline-charts-react
  • npm: https://www.npmjs.com/package/kline-charts-react
  • stock-sdk 文档: https://stock-sdk.linkdiary.cn/
  • License: MIT

Read more

【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(下篇) , 万字解析, 建议收藏 ! ! !

【Spring 全家桶】Spring MVC 快速入门,开始web 更好上手(下篇) , 万字解析, 建议收藏 ! ! !

本篇会加入个人的所谓鱼式疯言 ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 小编会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能接受我们这个概念 !!! 引言 Spring MVC 犹如一座桥梁,连接着前端的精彩与后端的强大,它赋予开发者以灵动之笔,在数字化的画布上描绘出绚丽多彩的 Web 世界。在 Spring MVC 的引领下,我们能够驾驭复杂的业务逻辑,实现流畅的用户体验,让技术与创意完美融合,开启无限可能的 Web 开发之旅。 目录 1. 返回响应内容 2. lombok 3. 加法器 一. 返回响应内容 在上篇中,我们学习了如何使用控制层的处理请求相关, 现在我们学习如何处理返回响应内容。 1. 设置状态码 importjakarta.servlet.http.HttpServletResponse;importorg.springframework.stereotype.Controller;importorg.

By Ne0inhk

PyCharm激活码在线生成器风险高?建议学习GLM-4.6V-Flash-WEB

PyCharm激活码在线生成器风险高?建议学习GLM-4.6V-Flash-WEB 在当前AI技术快速渗透各行各业的背景下,开发者每天都在面对一个现实问题:是选择走捷径——比如使用PyCharm激活码生成器来“免费”获得开发工具,还是沉下心来掌握真正能推动产品落地的核心能力? 前者看似省事,实则暗藏巨大隐患。那些所谓的“激活码生成网站”不仅违反软件许可协议,更常被植入恶意脚本或远程后门,一旦运行,轻则泄露项目代码,重则导致整个开发环境沦陷。而与此同时,像 GLM-4.6V-Flash-WEB 这类开源、合法、高性能的多模态模型正悄然改变着AI应用的部署方式——无需破解、无需黑箱操作,只需几行命令就能在本地跑起一个具备图文理解能力的智能系统。 这不仅是技术路线的选择,更是工程价值观的分野:我们究竟要依赖漏洞生存,还是靠实力构建未来? 从“拼凑式AI”到“一体化推理”:为什么传统方案越来越难用? 过去几年,很多团队尝试将视觉能力引入业务系统时,普遍采用“CLIP + OCR + 大语言模型”的拼接架构。例如,先用OCR提取图片中的文字,再把结果喂给LLM进行分析;或者用CLIP

By Ne0inhk
Web-Check+cpolar:全方位检查网站还能随时随地访问,太方便了!

Web-Check+cpolar:全方位检查网站还能随时随地访问,太方便了!

文章目录 * 前言 * 1.关于Web-Check * 2.功能特点 * 3.安装Docker * 4.创建并启动Web-Check容器 * 5.本地访问测试 * 6.公网远程访问本地Web-Check * 7.内网穿透工具安装 * 8.创建远程连接公网地址 * 9.使用固定公网地址远程访问 前言 Web-Check 能分析网站的 IP 信息、SSL 证书、DNS 记录、性能和安全配置等,适合网站开发者、运维和安全人员使用,优点是信息全面,能一键获取网站多维度数据。 使用时发现它对新手很友好,操作简单,不过检测结果需要一定专业知识解读,建议结合实际需求重点关注关键指标,如开放端口和 SSL 配置。 但它默认只能在局域网内使用,要是想和异地团队共享检测结果,或者在外网随时查看网站状态,就很不方便,得依赖复杂的网络配置。 而搭配 cpolar 后,能生成公网访问地址,

By Ne0inhk
cpolar远程辅助Open-Lovable实现随时随地克隆网页超实用

cpolar远程辅助Open-Lovable实现随时随地克隆网页超实用

Open-Lovable 是一款面向前端开发者的开源工具,核心功能是将任意网页克隆为可编辑的 React 应用,还支持多类 AI 模型辅助生成代码,适配新手学习、中小企业原型开发等场景。它的优点很贴合实际需求:拆分代码组件清晰,保留完整 CSS 样式,能大幅减少手动搭建页面框架的时间,比如新手学习电商网站布局时,不用再逐行拆解复杂的源代码,直接克隆后就能看清 header、footer 等组件的逻辑,中小企业做产品原型时,克隆同类网页后稍作修改就能快速出效果。 使用这款工具时也有一些实用的小提醒💡:克隆的网页仅能还原静态布局和样式,像登录态、动态交互这类内容无法完整复刻,而且使用前需要准备好 E2B、Firecrawl 等平台的 API 密钥,密钥保管要注意隐私,避免外泄造成不必要的损失。 不过 Open-Lovable 默认只能在本地局域网内使用,这会带来不少不便:比如开发者在家调试的克隆项目,想让公司的设计师远程查看效果,只能通过传文件、远程协助的方式,不仅耗时,还可能出现版本不一致的问题;要是出差在外需要修改克隆的代码,没法直接访问本地的工具,只能等回到电脑前操作,耽误工作

By Ne0inhk