news 2026/4/18 10:54:30

【期货量化入门】Python计算MACD指标详解(附完整代码)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【期货量化入门】Python计算MACD指标详解(附完整代码)

一、前言

MACD(Moving Average Convergence Divergence,指数平滑异同移动平均线)是最受欢迎的技术指标之一,被称为"指标之王"。它由Gerald Appel在1970年代提出,至今仍被广泛使用。

本文将介绍:

二、为什么选择天勤量化(TqSdk)

计算技术指标需要可靠的K线数据源。**天勤量化(TqSdk)**不仅提供高质量的行情数据,还内置了常用技术指标计算函数:

优势说明
数据质量高实时行情数据稳定可靠,K线数据完整准确
内置指标库tqsdk.tafunc模块提供MA、EMA、MACD、BOLL等常用指标
pandas友好K线数据直接返回DataFrame,方便使用pandas处理
实时更新数据自动推送更新,无需手动刷新

安装方法

pipinstalltqsdk

快期账户:使用TqSdk需要注册快期账户(免费),访问 https://www.shinnytech.com 注册。

三、MACD基础知识

3.1 MACD的组成

MACD指标由三部分组成:

组成部分名称含义
DIF快线/差离值短期EMA与长期EMA的差值,反映短期动能
DEA慢线/信号线DIF的移动平均,用于产生交易信号
MACD柱柱状图DIF与DEA的差值,直观显示多空力量

3.2 MACD计算公式

指标计算方法默认参数
DIFEMA(收盘价, 12) - EMA(收盘价, 26)快线12,慢线26
DEAEMA(DIF, 9)信号线周期9
MACD柱(DIF - DEA) × 2-

参数说明

3.3 MACD的市场含义

状态含义
DIF > 0短期均线在长期均线上方,市场偏多
DIF < 0短期均线在长期均线下方,市场偏空
MACD柱 > 0(红柱)多头动能,DIF在DEA上方
MACD柱 < 0(绿柱)空头动能,DIF在DEA下方

四、计算MACD

4.1 使用pandas手动计算

#!/usr/bin/env python# -*- coding: utf-8 -*-""" 功能:计算MACD指标 说明:本代码仅供学习参考 """fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("快期账户","快期密码"))# 获取K线数据klines=api.get_kline_serial("SHFE.rb2501",60,200)api.wait_update()# 计算MACD# 1. 计算短期和长期EMAklines["ema12"]=klines["close"].ewm(span=12,adjust=False).mean()klines["ema26"]=klines["close"].ewm(span=26,adjust=False).mean()# 2. 计算DIF(快线)klines["dif"]=klines["ema12"]-klines["ema26"]# 3. 计算DEA(慢线/信号线)klines["dea"]=klines["dif"].ewm(span=9,adjust=False).mean()# 4. 计算MACD柱状图klines["macd"]=(klines["dif"]-klines["dea"])*2# 打印结果print("MACD指标计算结果:")print(klines[["datetime","close","dif","dea","macd"]].tail(10))api.close()

运行结果示例

MACD指标计算结果: datetime close dif dea macd 190 2024-12-17 14:50:00 3205.0 8.52 6.31 4.42 191 2024-12-17 14:51:00 3206.0 9.15 6.88 4.54 ...

4.2 使用TqSdk内置函数

TqSdk提供了内置的macd函数,使用更加简洁:

fromtqsdkimportTqApi,TqAuthfromtqsdk.tafuncimportmacd api=TqApi(auth=TqAuth("快期账户","快期密码"))klines=api.get_kline_serial("SHFE.rb2501",60,200)api.wait_update()# 使用内置macd函数dif,dea,m=macd(klines["close"],12,26,9)klines["dif"]=dif klines["dea"]=dea klines["macd"]=mprint(klines[["datetime","close","dif","dea","macd"]].tail(10))api.close()

五、MACD交易信号

5.1 金叉与死叉

MACD最常用的交易信号是DIF与DEA的交叉:

信号条件操作建议
金叉DIF从下向上穿越DEA考虑做多
死叉DIF从上向下穿越DEA考虑做空
零轴上方金叉在零轴上方发生金叉更强的买入信号
零轴下方死叉在零轴下方发生死叉更强的卖出信号

5.2 金叉死叉判断代码

fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("快期账户","快期密码"))klines=api.get_kline_serial("SHFE.rb2501",60,200)api.wait_update()# 计算MACDklines["ema12"]=klines["close"].ewm(span=12,adjust=False).mean()klines["ema26"]=klines["close"].ewm(span=26,adjust=False).mean()klines["dif"]=klines["ema12"]-klines["ema26"]klines["dea"]=klines["dif"].ewm(span=9,adjust=False).mean()# 判断金叉(DIF上穿DEA)klines["golden_cross"]=(klines["dif"]>klines["dea"])&\(klines["dif"].shift(1)<=klines["dea"].shift(1))# 判断死叉(DIF下穿DEA)klines["death_cross"]=(klines["dif"]<klines["dea"])&\(klines["dif"].shift(1)>=klines["dea"].shift(1))# 输出信号signals=klines[klines["golden_cross"]|klines["death_cross"]]print("MACD金叉死叉信号:")print("-"*60)foridx,rowinsignals.tail(5).iterrows():signal_type="金叉 (买入信号)"ifrow["golden_cross"]else"死叉 (卖出信号)"zone="零轴上方"ifrow["dif"]>0else"零轴下方"print(f"{row['datetime']}|{signal_type}|{zone}| 价格:{row['close']:.0f}")api.close()

5.3 零轴信号

零轴(即DIF=0和DEA=0的位置)也有重要参考意义:

# 获取最新MACD数据latest=klines.iloc[-1]dif=latest["dif"]dea=latest["dea"]print("MACD零轴分析:")print("-"*40)ifdif>0anddea>0:print("当前状态: MACD在零轴上方")print("市场解读: 多头市场,趋势偏强")elifdif<0anddea<0:print("当前状态: MACD在零轴下方")print("市场解读: 空头市场,趋势偏弱")else:print("当前状态: MACD在零轴附近")print("市场解读: 多空转换区,需要观察")

六、MACD柱状图分析

6.1 柱状图的含义

MACD柱状图直观反映了多空力量的变化:

柱状图状态含义
红柱(>0)多头动能,DIF > DEA
绿柱(<0)空头动能,DIF < DEA
柱子变长趋势动能增强
柱子变短趋势动能减弱

6.2 柱状图趋势分析代码

fromtqsdkimportTqApi,TqAuth api=TqApi(auth=TqAuth("快期账户","快期密码"))klines=api.get_kline_serial("SHFE.rb2501",60,100)api.wait_update()# 计算MACDklines["ema12"]=klines["close"].ewm(span=12,adjust=False).mean()klines["ema26"]=klines["close"].ewm(span=26,adjust=False).mean()klines["dif"]=klines["ema12"]-klines["ema26"]klines["dea"]=klines["dif"].ewm(span=9,adjust=False).mean()klines["macd"]=(klines["dif"]-klines["dea"])*2# 分析最近5根MACD柱状图latest_bars=klines["macd"].tail(5).tolist()print("最近5根MACD柱状图:")print("-"*40)fori,barinenumerate(latest_bars):direction="红柱 +"ifbar>0else"绿柱 -"bar_visual="*"*int(abs(bar)/2)print(f" 第{i+1}根:{bar:>7.2f}{direction}{bar_visual}")# 判断柱状图趋势print("-"*40)ifall(latest_bars[i]>latest_bars[i-1]foriinrange(1,len(latest_bars))):print("趋势: MACD柱状图持续放大(动能增强)")elifall(latest_bars[i]<latest_bars[i-1]foriinrange(1,len(latest_bars))):print("趋势: MACD柱状图持续缩小(动能减弱)")else:print("趋势: MACD柱状图无明显规律")api.close()

七、MACD背离

7.1 什么是MACD背离

MACD背离是一种重要的反转信号:

背离类型定义信号含义
顶背离价格创新高,但DIF没有创新高上涨动能减弱,可能见顶
底背离价格创新低,但DIF没有创新低下跌动能减弱,可能见底

7.2 背离的使用注意事项

  1. 背离不等于立即反转- 背离只是警示信号,不是买卖信号
  2. 需要确认- 配合其他指标或形态确认
  3. 趋势中谨慎使用- 强势趋势中可能出现多次背离后才反转

八、实时MACD监控

fromtqsdkimportTqApi,TqAuthimportdatetime api=TqApi(auth=TqAuth("快期账户","快期密码"))klines=api.get_kline_serial("SHFE.rb2501",60,100)print("实时MACD监控,按Ctrl+C停止...")print("="*70)prev_dif=Noneprev_dea=NonewhileTrue:api.wait_update()ifapi.is_changing(klines.iloc[-1],"close"):# 重新计算MACDclose=klines["close"]ema12=close.ewm(span=12,adjust=False).mean()ema26=close.ewm(span=26,adjust=False).mean()dif=(ema12-ema26).iloc[-1]dea=(ema12-ema26).ewm(span=9,adjust=False).mean().iloc[-1]macd_bar=(dif-dea)*2# 判断信号signal=""ifprev_difisnotNoneandprev_deaisnotNone:ifdif>deaandprev_dif<=prev_dea:signal=">>> 金叉!"elifdif<deaandprev_dif>=prev_dea:signal=">>> 死叉!"now=datetime.datetime.now().strftime("%H:%M:%S")bar_str="+"*int(abs(macd_bar)/2)ifmacd_bar>0else"-"*int(abs(macd_bar)/2)print(f"[{now}] DIF:{dif:>7.1f}DEA:{dea:>7.1f}MACD:{macd_bar:>7.1f}{bar_str}{signal}")prev_dif=dif prev_dea=dea

九、总结

9.1 MACD组成

组成部分含义计算方法
DIF快线,反映短期动能EMA12 - EMA26
DEA慢线,DIF的平滑EMA(DIF, 9)
MACD柱DIF和DEA的差值(DIF - DEA) × 2

9.2 MACD交易信号

信号类型条件操作建议
金叉DIF上穿DEA考虑做多
死叉DIF下穿DEA考虑做空
零轴上方金叉更强的买入信号重点关注
零轴下方死叉更强的卖出信号重点关注

9.3 使用注意事项

  1. MACD是趋势跟踪指标,在趋势行情中表现较好
  2. 震荡行情中可能产生较多假信号
  3. 建议配合其他指标使用,提高准确率
  4. 不要单独依赖任何一个指标进行交易决策

下一步学习


免责声明:本文仅供学习交流使用,不构成任何投资建议。期货交易有风险,入市需谨慎。

更多资源

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:08:40

4大关键领域,YashanDB如何促进业务创新

随着数据量的激增和业务需求的多样化&#xff0c;数据库系统面临的挑战主要集中在性能瓶颈、数据一致性保障、系统高可用性以及架构的灵活扩展等方面。在这种背景下&#xff0c;企业亟需一款能够兼顾高性能和强一致性的数据库产品&#xff0c;以支持复杂业务的创新发展。Yashan…

作者头像 李华
网站建设 2026/4/18 7:03:19

科研“智囊团”上线:书匠策AI期刊论文功能,解锁学术研究新姿势

在科研这条充满未知与挑战的道路上&#xff0c;每一位研究者都像是手持罗盘的探险家&#xff0c;渴望在浩瀚的知识海洋中找到那座隐藏的学术宝藏。然而&#xff0c;面对堆积如山的期刊论文&#xff0c;如何高效筛选、深度挖掘并灵活运用这些资源&#xff0c;成了横亘在众多研究…

作者头像 李华
网站建设 2026/4/17 22:11:55

本科论文“救星”降临:书匠策AI科研工具,开启智慧撰写新纪元

在本科学习的旅程中&#xff0c;论文撰写就像是一座必须跨越的大山&#xff0c;横亘在每一位学子面前。从选题时的迷茫&#xff0c;到资料收集的繁琐&#xff0c;再到写作过程中的逻辑梳理与语言雕琢&#xff0c;每一步都充满了挑战。不过&#xff0c;别担心&#xff01;书匠策…

作者头像 李华
网站建设 2026/4/18 3:35:31

LightGlue深度学习特征匹配终极指南:从零基础到快速精通

在计算机视觉领域&#xff0c;特征匹配一直是实现图像理解、三维重建和增强现实的核心技术。传统方法在处理复杂场景时往往面临精度不足和计算效率低下的双重挑战。LightGlue作为一款革命性的深度学习特征匹配工具&#xff0c;通过智能自适应剪枝机制&#xff0c;在保持高精度的…

作者头像 李华