当前位置:首页 > JavaScript

用js实现macd

2026-04-07 11:01:11JavaScript

MACD 指标实现

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

计算 EMA(指数移动平均)

EMA 是 MACD 计算的基础,需要先实现 EMA 的计算函数:

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

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

计算 MACD 线

MACD 线是 12 日 EMA 减去 26 日 EMA 的结果:

function calculateMACDLine(prices) {
    const ema12 = calculateEMA(prices, 12);
    const ema26 = calculateEMA(prices, 26);
    const macdLine = [];

    for (let i = 0; i < prices.length; i++) {
        macdLine[i] = ema12[i] - ema26[i];
    }
    return macdLine;
}

计算信号线

信号线是 MACD 线的 9 日 EMA:

function calculateSignalLine(macdLine) {
    return calculateEMA(macdLine, 9);
}

计算柱状图(Histogram)

柱状图是 MACD 线减去信号线:

function calculateHistogram(macdLine, signalLine) {
    const histogram = [];

    for (let i = 0; i < macdLine.length; i++) {
        histogram[i] = macdLine[i] - signalLine[i];
    }
    return histogram;
}

完整实现

将以上函数整合,实现完整的 MACD 计算:

function calculateMACD(prices) {
    const macdLine = calculateMACDLine(prices);
    const signalLine = calculateSignalLine(macdLine);
    const histogram = calculateHistogram(macdLine, signalLine);

    return {
        macdLine,
        signalLine,
        histogram
    };
}

使用示例

假设有一组收盘价数据,计算其 MACD 指标:

用js实现macd

const closingPrices = [45.34, 46.31, 46.90, 46.67, 47.80, 48.25, 48.60, 49.10, 48.75, 48.30];
const macdData = calculateMACD(closingPrices);

console.log('MACD Line:', macdData.macdLine);
console.log('Signal Line:', macdData.signalLine);
console.log('Histogram:', macdData.histogram);

注意事项

  • 数据长度应足够长,至少包含 26 个数据点,否则 EMA 计算可能不准确。
  • 初始 EMA 值会影响计算结果,通常以第一个数据点作为初始值。
  • 实际应用中可能需要处理边界情况,如数据不足或空值。

此实现提供了 MACD 的核心计算逻辑,可根据实际需求进行优化或扩展。

标签: jsmacd
分享给朋友:

相关文章

vue.js实现轮播

vue.js实现轮播

Vue.js 实现轮播功能 使用第三方库(推荐) Vue.js 生态中有许多成熟的轮播组件库,例如 vue-awesome-swiper 或 swiper,它们功能丰富且易于集成。 安装 swipe…

js实现日历

js实现日历

实现日历的基本思路 使用JavaScript实现日历的核心是动态生成日期表格,并处理月份切换逻辑。需要计算当前月的天数、起始星期几,并动态渲染到页面上。 获取当前日期信息 通过Date对象获取当前年…

js 实现分页

js 实现分页

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

js实现点击显示和隐藏

js实现点击显示和隐藏

实现点击显示和隐藏的JavaScript方法 使用classList.toggle切换类名 通过添加/移除CSS类控制元素的显示与隐藏,需提前在CSS中定义隐藏样式(如display: none)。…

js实现二叉树

js实现二叉树

二叉树的基本概念 二叉树是一种树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的常见操作包括插入、删除、遍历等。 二叉树的节点定义 在JavaScript中,二叉树的节点可…

vue实现js休眠

vue实现js休眠

实现 JavaScript 休眠的方法 在 Vue 中实现 JavaScript 休眠(延迟执行)可以通过以下方式实现。由于 JavaScript 本身没有内置的 sleep 函数,通常使用 Prom…