MACD是什么?
MACD,全称Moving Average Convergence Divergence,即指数平滑异同移动平均线,是一种在股票、期货等投资市场中广泛使用的动量指标。它能帮助投资者识别市场的趋势及其变化。
简单来说,MACD主要是通过比较短期和长期的指数移动平均线(EMA)之间的关系来工作的。这里的“短期”和“长期”指的是计算这些平均值时所依据的时间段长度。通常情况下,短期是12天,长期是26天。
MACD的计算分为以下几个步骤:
- 计算短期EMA:首先需要基于收盘价计算出一个12天的指数移动平均线(EMA12)。
- 计算长期EMA:接着,再计算出一个26天的指数移动平均线(EMA26)。
- 计算差值(DIFF):然后,用短期EMA减去长期EMA,得到的数值就是所谓的“DIFF线”,也就是快速线。
- 计算信号线(DEA/Signal Line):最后,基于DIFF线的9日EMA生成一条被称为“DEA线”或“信号线”的慢速线。
MACD的一个常见展示方式是直方图,它表示的是DIFF线与信号线之间的差异。当DIFF线上穿信号线时,这通常被视为买入信号;相反,当DIFF线下穿信号线时,则可能是一个卖出信号。
MACD解析
EMA即EXPMA
DIFF(快速线)
DIFF = 短期EMA - 长期EMA
通常使用的是:
- 短期EMA:12日指数移动平均
- 长期EMA:26日指数移动平均
所以 DIFF = EMA(12) - EMA(26)
DEA(慢速线)
DEA线,全称为DIFFerence of Exponential Average线,也被称为信号线(Signal Line),是MACD指标(Moving Average Convergence Divergence,指数平滑异同移动平均线)中的一个关键组成部分。DEA线通过对DIFF线(快速线)进行进一步的平滑处理来生成,通常使用9日的EMA(指数移动平均)来计算。
对比
- DIFF对价格变化反应更快
- 因为它是用短期EMA减去长期EMA,而短期EMA本身比长期EMA更贴近当前价格,对价格变动更敏感。
- 所以当价格发生变化时,DIFF线会比DEA线(信号线)更快地出现变化。
- DEA线(慢速线)
- DEA线是DIFF线的9日EMA,是对DIFF进一步平滑处理后的结果。
- 它波动更平缓,滞后性更强,就像大卡车一样,转向和加速都比较慢。
MACD实际交易中的意义:
MACD通过观察价格变动的速度而非价格本身来提供买卖信号,有助于捕捉市场趋势的变化。
在MACD图表中,你会看到两条线:
- 快速线(DIFF):颜色通常是白线
- 慢速线(DEA):颜色通常是黄线
当:
- DIFF上穿DEA → 出现金叉 → 可能是买入信号(股价拉升)
- DIFF下穿DEA → 出现死叉 → 可能是卖出信号(股价下跌)
这些交叉点之所以有意义,正是因为DIFF线反应快,能率先捕捉到趋势的变化。
名称 | 含义 | 为什么叫“快速” |
---|---|---|
快速线(DIFF) | 短期EMA - 长期EMA | 对价格变化更敏感,反应更快 |
慢速线(DEA) | DIFF的9日EMA(信号线) | 更平滑,滞后性强,反应较慢 |
程序化计算示例
import akshare as ak
import pandas as pd
import numpy as np
# 获取中兴通讯的股票历史数据
stock_code = '000063' # 中兴通讯在深圳证券交易所的代码
stock_data = ak.stock_zh_a_hist(symbol=stock_code, period="daily", adjust="qfq") # 调整参数以获取前复权数据
# 将数据转换为DataFrame,并设置日期为索引
df = pd.DataFrame(stock_data, columns=['日期', '开盘', '最高', '最低', '收盘', '成交量', '振幅', '涨跌幅', '涨跌额', '换手率'])
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
# 计算短期(12日)和长期(26日)EMA
short_window = 12
long_window = 26
signal_window = 9
df['EMA12'] = df['收盘'].ewm(span=short_window, adjust=False).mean()
df['EMA26'] = df['收盘'].ewm(span=long_window, adjust=False).mean()
# 计算DIF(快速线)
df['DIF'] = df['EMA12'] - df['EMA26']
# 计算DEA(信号线)
df['DEA'] = df['DIF'].ewm(span=signal_window, adjust=False).mean()
# 计算MACD柱状图值
df['MACD'] = (df['DIF'] - df['DEA']) * 2
# 打印结果查看
print(df[['DIF', 'DEA', 'MACD']].tail())
# 如果需要,可以将结果保存到CSV文件中
# df.to_csv('ZTE_MACD.csv')