【Python量化实战宝典 #18】MACD 金叉死叉手册:DIF、DEA、柱体全拆解(Python 可跑)

【Python量化实战宝典 #18】MACD 金叉死叉手册:DIF、DEA、柱体全拆解(Python 可跑)

手册定位:模块三第 2 篇。MACD 是均线的升级------DIF/DEA 双线 + 柱体,金叉死叉更细腻,还能看动能背离。本篇讲怎么算、怎么出信号。

数据来源复用 #02 历史K线(也可用 /hs/history/macd 端点直出,本文演示自算以讲透)。

1. 你将得到什么

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

2. 取数约定(复用)

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

真实取数优先用 /hs/history/macd 端点(已算好 DIF/DEA/柱);本文自算用于讲清原理。

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

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

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

python 复制代码
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):
    """金叉=持仓1,死叉=空仓0。"""
    pos = ((dif > dea) & (dif.shift(1) <= dea.shift(1))).astype(int)
    state = (dif > dea).astype(int)
    return state, pos  # state: 持续持仓;pos: 仅在金叉当根=1


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. 跑通示例

python 复制代码
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,但换周期(60 分)要重设,别直接套。
  2. 柱体噪声:柱体在零轴附近频繁伸缩,单独用易误判,要结合 DIF 方向。
  3. 零轴上下:零轴上金叉是强势确认,零轴下金叉是弱反弹,信号强度不同。
  4. 与均线共振:MACD 金叉 + 均线多头排列共振,胜率高于单独用 MACD。

7. 小结与下一篇预告

MACD 择时比均线更细腻。下一篇讲KDJ/BOLL 通道------超买超卖(KDJ)与布林带(BOLL)两种通道类指标。

下一篇预告:《【Python量化实战宝典 #19】KDJ、BOLL 通道手册:超买超卖与布林带(Python 可跑)》

8. 免责声明

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

相关推荐
北漂人Java11 小时前
基于 Spring AI Alibaba WorkFlow 构建 Java 生产级 AI Agent
java·人工智能·spring
Cooper2511 小时前
DDC 命令成功但屏幕不动:用 gamma 表重做亮度映射
python·mac
师夷长技以自愈12 小时前
手搓 AI Agent 第 7 篇:菜做砸了别硬炒——错误分类 + 双账本熔断
人工智能·python
用户1129361121912 小时前
编译全绿,上线就崩:MyBatis 五层方法名大小写埋下的坑
java
用户9562562542912 小时前
15 分钟社媒简报 Agent:我只用了搜索和模型两步
python·api
Dumbness12 小时前
关键词回复里写了 {订单号},群机器人整条消息都炸了
python·微信
调接口的阿光12 小时前
调用对话接口时输出被截断怎么办:先看 finish_reason,再决定是续写一次、缩小范围,还是换成更短的格式(Python)
人工智能·python
Cooper2512 小时前
单文件 Flask 跑通微信服务器校验:先跑通再谈工程化
python·flask
Cooper2512 小时前
三源热榜去重加 AI 摘要:URL 唯一键踩出的三个坑
前端·python
用户40199255686112 小时前
多源异构 B2B 公开需求信号去重与企业实体证据链存储设计(64-bit SimHash 分桶 + Jaccard)
python