【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. 免责声明

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

相关推荐
炘爚1 小时前
数据结构算法总结
数据结构·python·算法
Patrick在香港1 小时前
一个加 1 的动作,把最大值变成了最小值
python·numpy·数据类型·整数溢出·数据精度
Misnearch2 小时前
第7章 面向对象技术
java·开发语言·软考
weixin_BYSJ19872 小时前
电竞先锋网站---附源码02032
java·vue.js·spring boot·python·django·tomcat·php
会编程的吕洞宾2 小时前
LangChain4j 流式输出实战:让 AI 回复像打字机一样逐字显示
java·开发语言·人工智能·后端
不脱发的程序猿2 小时前
红利ETF量化策略
人工智能·python·ai·程序员·量化交易·etf·策略回测
Apok'2 小时前
零基础学Python量化(1):研究大纲与流程
python·机器学习·金融·数据挖掘·数据分析
只是学习学习2 小时前
Java将文件转二维码导出MP4
java
鬓戈2 小时前
llmproxy 系统开发目的和基本功能
人工智能·python