当前位置:首页 > 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实现轮播

实现基础轮播效果 使用HTML结构创建轮播容器和图片元素: <div class="carousel"> <div class="carousel-inner">…

js实现复制到剪贴板

js实现复制到剪贴板

使用document.execCommand方法(传统方式,已废弃但部分浏览器仍支持) 该方法适用于旧版浏览器,但已被标记为废弃。执行前需确保文本已被选中: function copyToClipb…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

使用js实现

使用js实现

使用JavaScript实现 JavaScript可以通过Math.random()函数生成随机数,结合其他方法可以实现多种随机数生成需求。 // 生成0到1之间的随机小数 const random…

js实现轮播代码

js实现轮播代码

基础轮播实现 使用HTML、CSS和JavaScript创建一个简单的轮播效果。HTML部分定义轮播容器和图片元素。 <div class="carousel"> <div c…

js实现 拖动

js实现 拖动

实现拖动的步骤 HTML 结构 创建一个可拖动的元素和一个放置区域: <div id="draggable" draggable="true">拖动我</div> <d…