当前位置:首页 > JavaScript

用js实现macd

2026-02-02 17:19:50JavaScript

MACD 指标实现

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

计算 EMA(指数移动平均)

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

用js实现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:

用js实现macd

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 指标一致。

标签: jsmacd
分享给朋友:

相关文章

js实现倒计时

js实现倒计时

使用 setInterval 实现倒计时 通过 setInterval 定时器每秒更新剩余时间,适用于简单倒计时场景。 function countdown(seconds, callback) {…

js实现选题

js实现选题

实现选题功能的JavaScript方法 基础实现方案 使用数组存储选项,通过随机索引选取: const options = ['选项A', '选项B', '选项C', '选项D']; const r…

js实现vue路由

js实现vue路由

Vue 路由的基本实现 在 Vue.js 中实现路由功能通常使用 Vue Router 库。Vue Router 是 Vue.js 官方的路由管理器,用于构建单页面应用(SPA)。 安装 Vue R…

js实现文字滚动

js实现文字滚动

实现文字滚动的几种方法 使用CSS动画实现滚动 通过CSS的@keyframes和transform属性可以实现平滑的文字滚动效果。 <style> .scroll-text { w…

js实现下拉菜单

js实现下拉菜单

使用HTML和CSS创建基础结构 HTML部分需要包含一个触发下拉的按钮和隐藏的下拉菜单内容: <div class="dropdown"> <button class="dr…

js 实现拖拽

js 实现拖拽

实现拖拽的基本步骤 在JavaScript中实现拖拽功能需要监听几个关键事件:mousedown、mousemove和mouseup。以下是实现的基本逻辑。 监听目标元素的mousedown事件,记…