当前位置:首页 > 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 计算函数

整合所有计算步骤:

用js实现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 指标一致。

标签: jsmacd
分享给朋友:

相关文章

js 实现vue

js 实现vue

Vue.js 的基本实现 在 JavaScript 中实现 Vue.js 的核心功能,可以通过数据绑定、响应式系统和虚拟 DOM 来实现。以下是实现 Vue.js 核心功能的简化版本。 数据响应式系…

js 实现分页

js 实现分页

实现分页的基本逻辑 分页功能通常需要后端返回数据总量或总页数,前端根据当前页码和每页条数截取对应数据。以下是一个基于JavaScript的简单分页实现方案: 前端分页实现 假设已有从后端获取的完整数…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js节流实现

js节流实现

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

js实现图片

js实现图片

图片加载与显示 在JavaScript中,可以通过Image对象动态加载图片。创建实例后设置src属性触发加载,通过onload回调处理加载完成后的操作: const img = new Ima…