【Python量化实战全攻略 #18】MACD 金叉死叉手册:DIF、DEA、柱体全拆解(附代码)
摘要:【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. 坑与注意事项
- 参数适配:A 股日线常用 12/26/9,换周期要重设。
- 柱体噪声:柱体在零轴附近频繁伸缩,要结合 DIF 方向。
- 零轴上下:零轴上金叉是强势确认,零轴下是弱反弹。
- 与均线共振: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。
想亲自试一下?免费获取证书