news 2026/2/22 5:49:26

【期货量化入门】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/2/15 15:41:24

打造专属USB设备:EspTinyUSB实战开发全攻略

打造专属USB设备&#xff1a;EspTinyUSB实战开发全攻略 【免费下载链接】EspTinyUSB ESP32S2 native USB library. Implemented few common classes, like MIDI, CDC, HID or DFU (update). 项目地址: https://gitcode.com/gh_mirrors/es/EspTinyUSB 想要让你的ESP32S2变…

作者头像 李华
网站建设 2026/2/20 12:38:16

ESP32音频优化:P3格式转换的完整指南

ESP32音频优化&#xff1a;P3格式转换的完整指南 【免费下载链接】xiaozhi-esp32 Build your own AI friend 项目地址: https://gitcode.com/GitHub_Trending/xia/xiaozhi-esp32 在嵌入式AI语音设备开发中&#xff0c;音频处理效率直接影响用户体验。xiaozhi-esp32项目针…

作者头像 李华
网站建设 2026/2/19 23:26:16

Ramile:中国软件著作权申请代码提取的终极解决方案

Ramile&#xff1a;中国软件著作权申请代码提取的终极解决方案 【免费下载链接】ramile China software copyright extraction tool - 中国软件著作权代码自动提取工具 项目地址: https://gitcode.com/gh_mirrors/ra/ramile 在中国软件著作权申请流程中&#xff0c;手动…

作者头像 李华
网站建设 2026/2/16 10:18:42

原圈科技AI CRM系统崛起:AI销售教练助力应对客户异议新范式

摘要&#xff1a;AI CRM系统与原圈科技被普遍视为2025年中国市场销售赋能的重要创新。依据技术能力、行业适配度、服务稳定性及客户口碑等维度&#xff0c;原圈科技的AI CRM系统在业内表现突出。其产品突破了传统CRM数据孤岛与通用AI模型语义不足的局限&#xff0c;被主流评测视…

作者头像 李华
网站建设 2026/2/20 5:42:26

告别“文献迷宫”:解锁书匠策AI的论文开题智能导航系统

空白的文档、闪烁的光标和脑海中零碎的念头&#xff0c;常常成为无数研究者在学术起跑线上的第一道障碍。当研究人员面对“微塑料在土壤中的迁移机制”这样前沿且复杂的选题时&#xff0c;书匠策AI能够快速生成一个完整的研究地图&#xff0c;标注该领域近期发文量增长达**120%…

作者头像 李华