当前位置:首页 > JavaScript

用js实现macd

2026-03-15 17:36:19JavaScript

MACD 指标简介

MACD(Moving Average Convergence Divergence)是一种趋势跟踪动量指标,由三个部分组成:

  • DIF(差离值):12日EMA - 26日EMA
  • DEA(信号线):DIF的9日EMA
  • MACD柱:(DIF - DEA) × 2

数据准备

需要输入一个包含收盘价的时间序列数组,例如:

const closePrices = [45.12, 46.23, 45.56, ...]; // 示例数据

EMA 计算函数

指数移动平均(EMA)是MACD计算的基础:

function calculateEMA(data, period) {
  const k = 2 / (period + 1);
  const ema = [data[0]]; // 初始值为第一个数据点

  for (let i = 1; i < data.length; i++) {
    ema.push(data[i] * k + ema[i-1] * (1 - k));
  }
  return ema;
}

完整MACD实现

function calculateMACD(closePrices) {
  // 计算12日和26日EMA
  const ema12 = calculateEMA(closePrices, 12);
  const ema26 = calculateEMA(closePrices, 26);

  // 计算DIF(差离值)
  const dif = ema12.map((val, idx) => val - ema26[idx]);

  // 计算DEA(信号线)
  const dea = calculateEMA(dif, 9);

  // 计算MACD柱状图
  const macdHistogram = dif.map((val, idx) => 
    (val - dea[idx]) * 2
  );

  return {
    dif,
    dea,
    histogram: macdHistogram
  };
}

使用示例

const result = calculateMACD(closePrices);
console.log('DIF:', result.dif);
console.log('DEA:', result.dea);
console.log('MACD Histogram:', result.histogram);

注意事项

  1. 初始数据量应足够大(建议至少26+9个数据点)
  2. 对于实时计算,可以缓存之前的EMA值以提高效率
  3. 不同交易平台可能对EMA的初始值计算有微小差异

可视化建议

将结果用图表库(如Chart.js)绘制:

用js实现macd

  • DIF和DEA可以显示为折线
  • MACD柱状图用红绿柱表示正负值

标签: jsmacd
分享给朋友:

相关文章

js实现拖拽

js实现拖拽

实现拖拽的基本步骤 使用JavaScript实现拖拽功能需要监听鼠标事件,包括mousedown、mousemove和mouseup。以下是实现的基本逻辑: const draggableEleme…

js实现图片上传

js实现图片上传

图片上传的基本实现 使用HTML的<input type="file">元素配合JavaScript的File API可以实现图片上传功能。HTML部分需要创建一个文件选择输入框和一个用于…

js实现全屏

js实现全屏

实现全屏的基本方法 使用JavaScript实现全屏功能主要依赖Element.requestFullscreen()方法。现代浏览器均支持此API,但不同浏览器可能需要添加前缀。 // 触发全屏…

js实现类

js实现类

JavaScript 实现类的几种方式 JavaScript 是一种基于原型的语言,但在 ES6 之后引入了 class 语法糖,使得实现类更加直观。以下是几种常见的实现方式: 使用构造函数 传统的…

js实现延迟

js实现延迟

实现延迟的方法 在JavaScript中,实现延迟操作有多种方式,以下是几种常见的方法: 使用setTimeout函数 setTimeout是JavaScript中最常用的延迟执行方法。它接受一个回…

js节流实现

js节流实现

节流的概念 节流(Throttle)是一种限制函数执行频率的技术,确保函数在一定时间间隔内只执行一次。常用于滚动事件、窗口调整等高频触发的场景。 基础实现方法 使用时间戳判断是否执行函数: fun…