← 返回博客列表

【Python量化实战全攻略 #18】MACD 金叉死叉手册:DIF、DEA、柱体全拆解(附代码)

2026年10月19日 09:42 · 智兔数服 · Python量化实战全攻略

摘要:【Python量化实战全攻略 #18】MACD 金叉死叉手册:DIF、DEA、柱体全拆解(附代码) 手册定位:模块三第 2 篇。MACD 是均线的升级——DIF/DEA 双线 + 柱体,金叉死叉更细腻,还能看动能背离

手册定位:模块三第 2 篇。MACD 是均线的升级——DIF/DEA 双线 + 柱体,金叉死叉更细腻,还能看动能背离。本篇讲怎么算、怎么出信号。
数据来源复用 #02 历史K线(也可用 /hs/history/macd 端点直出,本文演示自算以讲透)。

1. 你将得到什么

  • MACD(DIF/DEA/柱体) 从 close 自己算的完整代码;
  • 金叉/死叉 与柱体由负转正两类买点的生成;
  • 背离判定的思路;
  • MACD 的 4 个坑(参数适配、柱体噪声、零轴上下、与均线共振)。

2. 取数约定(复用)

信号 来源 见
日线 close /hs/history/{代码}.{市场}/d/n #02
MACD 直出 /hs/history/macd/{代码}.{市场}/d/n #02

3. 数据来源(复用,不重复罗列)

详见 #02 历史K线接口手册(日线 + 技术指标 MACD 端点)。

4. 核心模板函数(自包含可跑)

import pandas as pd
import numpy as np

_MOCK = True


def calc_macd(close, fast=12, slow=26, signal=9):
    s = pd.Series(close)
    ema_f = s.ewm(span=fast, adjust=False).mean()
    ema_s = s.ewm(span=slow, adjust=False).mean()
    dif = ema_f - ema_s
    dea = dif.ewm(span=signal, adjust=False).mean()
    hist = (dif - dea) * 2
    return dif, dea, hist


def macd_signal(dif, dea):
    pos = ((dif > dea) & (dif.shift(1) <= dea.shift(1))).astype(int)
    state = (dif > dea).astype(int)
    return state, pos


def run_check():
    close = [10, 10.3, 10.8, 11.2, 11.0, 10.6, 10.2, 10.5, 11.0, 11.6, 12.1, 12.0]
    dif, dea, hist = calc_macd(close)
    state, pos = macd_signal(dif, dea)
    assert len(dif) == len(close) and not dif.isna().all()
    assert state.iloc[-1] in (0, 1)
    print("校验通过 | 末态持仓=%d 末根金叉=%d" % (state.iloc[-1], pos.iloc[-1]))
    return dif, dea, hist, state


if __name__ == "__main__":
    run_check()

5. 跑通示例

dif, dea, hist, state = run_check()
print("最近:", "多头" if state.iloc[-1] else "空头", " DIF=%.3f DEA=%.3f" % (dif.iloc[-1], dea.iloc[-1]))

6. 坑与注意事项

  1. 参数适配:A 股日线常用 12/26/9,换周期要重设。
  2. 柱体噪声:柱体在零轴附近频繁伸缩,要结合 DIF 方向。
  3. 零轴上下:零轴上金叉是强势确认,零轴下是弱反弹。
  4. 与均线共振:MACD 金叉 + 均线多头排列共振,胜率更高。

7. 小结与下一篇预告

MACD 择时比均线更细腻。下一篇讲KDJ/BOLL 通道——超买超卖与布林带。

下一篇预告:《【Python量化实战全攻略 #19】KDJ、BOLL 通道手册:超买超卖与布林带(附代码)》

8. 免责声明

本文为择时方法示例,演示数据为虚构,不构成投资建议。


关于数据来源:本文 MACD 所需的日线数据来自智兔数服(www.zhituapi.com)官方文档接口(详见本系列 #02),覆盖 200+ 已验证路径,注册可领免费 token 做研究测试。
更多实战手册见技术博客:zhituapi.com/blog.html。
本系列《Python量化实战全攻略》共 32 篇,下一篇讲 KDJ/BOLL。

想亲自试一下?免费获取证书