用js实现macd
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);
注意事项
- 初始数据量应足够大(建议至少26+9个数据点)
- 对于实时计算,可以缓存之前的EMA值以提高效率
- 不同交易平台可能对EMA的初始值计算有微小差异
可视化建议
将结果用图表库(如Chart.js)绘制:

- DIF和DEA可以显示为折线
- MACD柱状图用红绿柱表示正负值






