当前位置:首页 > JavaScript

用js实现macd

2026-02-02 17:19:50JavaScript

MACD 指标实现

MACD(Moving Average Convergence Divergence)是一种常用的技术分析指标,由三部分组成:DIF(差离值)、DEA(信号线)和 MACD 柱状图。以下是 JavaScript 实现方法:

计算 EMA(指数移动平均)

EMA 是 MACD 计算的基础,需要递归计算:

function calculateEMA(data, period) {
  const k = 2 / (period + 1);
  const ema = [];
  ema[0] = data[0]; // 首日EMA等于当日收盘价

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

  return ema;
}

计算 DIF 值

DIF 是 12 日 EMA 减去 26 日 EMA:

function calculateDIF(closingPrices) {
  const ema12 = calculateEMA(closingPrices, 12);
  const ema26 = calculateEMA(closingPrices, 26);
  const dif = [];

  for (let i = 0; i < closingPrices.length; i++) {
    dif[i] = ema12[i] - ema26[i];
  }

  return dif;
}

计算 DEA 值

DEA 是 DIF 的 9 日 EMA:

function calculateDEA(dif) {
  return calculateEMA(dif, 9);
}

计算 MACD 柱状图

MACD 柱是 DIF 与 DEA 的差值:

function calculateMACDHistogram(dif, dea) {
  const histogram = [];

  for (let i = 0; i < dif.length; i++) {
    histogram[i] = (dif[i] - dea[i]) * 2; // 通常乘以2放大显示
  }

  return histogram;
}

完整 MACD 计算函数

整合所有计算步骤:

function calculateMACD(closingPrices) {
  const dif = calculateDIF(closingPrices);
  const dea = calculateDEA(dif);
  const histogram = calculateMACDHistogram(dif, dea);

  return {
    dif,
    dea,
    histogram
  };
}

使用示例

const closingPrices = [/* 填入连续交易日的收盘价数组 */];
const macd = calculateMACD(closingPrices);

console.log('DIF:', macd.dif);
console.log('DEA:', macd.dea);
console.log('MACD Histogram:', macd.histogram);

注意事项

  1. 初始数据量要求:至少需要 26 个交易日数据才能开始计算
  2. 数据顺序:收盘价数组应按时间升序排列(最旧数据在前)
  3. 精度处理:金融计算建议使用定点数或 decimal.js 等库处理浮点数精度问题
  4. 边界处理:前 25 个数据点的 MACD 值可能不准确,通常显示为 null 或 0

此实现可以直接用于金融图表显示或交易策略开发,计算结果与主流交易软件(如 TradingView)的 MACD 指标一致。

用js实现macd

标签: jsmacd
分享给朋友:

相关文章

js实现验证码

js实现验证码

实现验证码的JavaScript方法 生成随机验证码 使用Math.random()生成随机字符串,结合数字和字母: function generateCaptcha() { const ch…

js实现跳转

js实现跳转

使用 window.location 跳转 通过修改 window.location.href 实现页面跳转,这是最常用的方法。 window.location.href = 'https:/…

js实现轮播

js实现轮播

实现轮播图的基本思路 轮播图的核心逻辑是通过定时切换展示的图片或内容,通常结合左右滑动按钮和指示器(小圆点)增强交互性。以下是基于原生JavaScript的实现方法。 HTML结构 构建轮播图的H…

js实现复制

js实现复制

使用document.execCommand方法 在较旧的浏览器中,可以使用document.execCommand('copy')实现复制功能。创建一个临时的textarea或input元素,将需要…

js实现打印

js实现打印

使用window.print()方法实现打印 在JavaScript中,可以通过调用window.print()方法直接触发浏览器的打印功能。这会打开系统的打印对话框,用户可以选择打印机和设置打印选项…

js实现全屏

js实现全屏

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