当前位置:首页 > JavaScript

js 实现股票k线图

2026-03-01 16:03:01JavaScript

使用 Canvas 或 SVG 绘制 K 线图

在 JavaScript 中,可以通过 Canvas 或 SVG 绘制股票 K 线图。Canvas 适合大数据量渲染,SVG 更适合交互式操作。以下是两种实现方式的对比和示例代码。

Canvas 实现 K 线图

Canvas 通过 JavaScript 动态绘制图形,适合高性能渲染:

const canvas = document.getElementById('kLineChart');
const ctx = canvas.getContext('2d');

// 示例数据:开盘价、收盘价、最高价、最低价
const data = [
  { open: 100, close: 105, high: 110, low: 95 },
  { open: 105, close: 102, high: 108, low: 100 },
  { open: 102, close: 110, high: 115, low: 100 }
];

// 绘制 K 线
function drawKLine(data, width, padding) {
  const candleWidth = width / data.length - padding;
  data.forEach((item, i) => {
    const x = i * (candleWidth + padding);
    const isUp = item.close >= item.open;
    const bodyTop = Math.min(item.open, item.close);
    const bodyHeight = Math.abs(item.close - item.open);

    // 绘制影线(最高价-最低价)
    ctx.beginPath();
    ctx.moveTo(x + candleWidth / 2, item.high);
    ctx.lineTo(x + candleWidth / 2, item.low);
    ctx.strokeStyle = isUp ? 'green' : 'red';
    ctx.stroke();

    // 绘制实体(开盘价-收盘价)
    ctx.fillStyle = isUp ? 'green' : 'red';
    ctx.fillRect(x, bodyTop, candleWidth, bodyHeight);
  });
}

drawKLine(data, canvas.width, 5);

SVG 实现 K 线图

SVG 通过 DOM 操作生成图形,适合交互和动态更新:

js 实现股票k线图

const svg = document.getElementById('kLineChart');

function createKLineSVG(data, width, height) {
  const candleWidth = width / data.length - 5;
  data.forEach((item, i) => {
    const x = i * (candleWidth + 5);
    const isUp = item.close >= item.open;
    const bodyTop = Math.min(item.open, item.close);
    const bodyHeight = Math.abs(item.close - item.open);

    // 创建影线(最高价-最低价)
    const line = document.createElementNS('http://www.w3.org/2000/svg', 'line');
    line.setAttribute('x1', x + candleWidth / 2);
    line.setAttribute('y1', item.high);
    line.setAttribute('x2', x + candleWidth / 2);
    line.setAttribute('y2', item.low);
    line.setAttribute('stroke', isUp ? 'green' : 'red');
    svg.appendChild(line);

    // 创建实体(开盘价-收盘价)
    const rect = document.createElementNS('http://www.w3.org/2000/svg', 'rect');
    rect.setAttribute('x', x);
    rect.setAttribute('y', bodyTop);
    rect.setAttribute('width', candleWidth);
    rect.setAttribute('height', bodyHeight);
    rect.setAttribute('fill', isUp ? 'green' : 'red');
    svg.appendChild(rect);
  });
}

createKLineSVG(data, 500, 300);

使用第三方库(推荐)

对于更复杂的 K 线图需求,推荐使用以下库:

  1. Lightweight Charts (TradingView)
    高性能、支持大量数据:

    js 实现股票k线图

    import { createChart } from 'lightweight-charts';
    
    const chart = createChart(document.getElementById('kLineChart'), { width: 800, height: 400 });
    const candlestickSeries = chart.addCandlestickSeries();
    candlestickSeries.setData([
      { time: '2023-01-01', open: 100, high: 110, low: 95, close: 105 },
      { time: '2023-01-02', open: 105, high: 108, low: 100, close: 102 }
    ]);
  2. ECharts
    功能丰富,支持交互:

    import * as echarts from 'echarts';
    
    const chart = echarts.init(document.getElementById('kLineChart'));
    chart.setOption({
      series: [{
        type: 'candlestick',
        data: [
          [100, 105, 95, 110],
          [105, 102, 100, 108]
        ]
      }]
    });
  3. Chart.js
    简单易用,适合基础需求:

    import Chart from 'chart.js/auto';
    
    new Chart(document.getElementById('kLineChart'), {
      type: 'candlestick',
      data: {
        datasets: [{
          data: [
            { o: 100, h: 110, l: 95, c: 105 },
            { o: 105, h: 108, l: 100, c: 102 }
          ]
        }]
      }
    });

数据处理与动态更新

从 API 获取实时数据并更新图表:

async function fetchStockData() {
  const response = await fetch('https://api.example.com/stock');
  const data = await response.json();
  candlestickSeries.setData(data); // Lightweight Charts 示例
}

注意事项

  1. 性能优化:大数据量时使用 Canvas 或 WebGL 渲染(如 Lightweight Charts)。
  2. 时间轴:K 线图通常需要时间刻度,需将数据转换为时间序列。
  3. 交互功能:添加缩放、拖拽、提示框等增强用户体验。

标签: 线图股票
分享给朋友:

相关文章

js实现股票

js实现股票

以下是几种常见的JavaScript实现股票相关功能的方法,涵盖数据获取、图表展示和简单交易逻辑: 获取股票实时数据 使用第三方API(如Alpha Vantage、Yahoo Finance等)…

js实现k线图

js实现k线图

实现K线图的基本步骤 使用JavaScript实现K线图通常需要借助图表库。以下是基于ECharts的实现方法,它是一个功能强大的开源可视化库。 安装ECharts库: npm install…

js迁徙飞线图实现原理

js迁徙飞线图实现原理

实现原理 迁徙飞线图(也称为弧线图或路径图)的核心原理是通过绘制两点之间的曲线(通常是贝塞尔曲线)来展示数据流动或对象移动的路径。在JavaScript中,通常结合SVG或Canvas技术实现动态效果…

vue实现k线图

vue实现k线图

使用 Vue 实现 K 线图 安装依赖 需要安装支持 K 线图的图表库,例如 echarts 或 lightweight-charts。以 echarts 为例,安装命令如下: npm instal…

vue怎样实现直线图

vue怎样实现直线图

实现直线图的方法 在Vue中实现直线图通常使用第三方图表库,如Chart.js、ECharts或D3.js。以下是使用Chart.js和ECharts的实现方法。 使用Chart.js绘制直线图 C…

k线图实现js

k线图实现js

K线图实现(JavaScript) K线图(Candlestick Chart)常用于展示金融数据,如股票价格变动。以下是使用JavaScript实现K线图的几种方法: 使用Chart.js库 Ch…