Python实现MACD指标计算:股票技术分析的利器系列(1)

Python实现MACD指标计算:股票技术分析的利器系列(1)

    • 介绍
    • 核心代码:EMA
    • 核心代码:MACD
    • 200 次交易日的收盘价格
    • 完整代码
    • 最终运行代码的效果展示
      • DIF
      • DEA
      • MACD


介绍

先看看官方介绍:

MACD (平滑异同平均线)
指标说明
DIF线:收盘价短期、长期指数平滑移动平均线间的差;
DEA线:DIF线的M日指数平滑移动平均线;
MACD线:DIF线与DEA线的差,彩色柱状线;
参数:SHORT(短期)、LONG(长期)、M 天数,一般为12、26、9。
用法
1.DIF、DEA均为正,DIF向上突破DEA,买入信号;
2.DIF、DEA均为负,DIF向下跌破DEA,卖出信号;
3.DEA线与K线发生背离,行情反转信号;
4.分析MACD柱状线,由红变绿(正变负),卖出信号;由绿变红,买入信号。

算法解释:


DIF:EMA(CLOSE,SHORT)-EMA(CLOSE,LONG);
DEA:EMA(DIF,MID);
MACD:(DIF-DEA)*2,COLORSTICK;
缩写全称描述
EMA指数移动平均线(Exponential Moving Average)一种常见的移动平均线计算方法,用于平滑股票价格数据以观察价格的长期趋势。它计算最新价格的权重比较高,而旧价格的权重逐渐减小。
DIF差离值(Difference)也称为快线。通过计算两条指数移动平均线(一般是短期EMA和长期EMA)的差异得到。DIF用于观察价格的短期趋势。
DEA差离平均值(Difference Exponential Average)也称为慢线。是DIF的移动平均值,通常采用较长的周期。DEA用于观察价格的中期趋势。
MACD移动平均线收敛与发散(Moving Average Convergence Divergence)由DIF和DEA之间的差异计算得出,可以帮助确定价格的长期趋势。其计算公式为(DIF-DEA)*2。

这些数据都依赖于收盘价格。我们找一个股票进行参考:

在这里插入图片描述

当观察股票技术分析中的MACD指标时,关注DIF、DEA和MACD数值是至关重要的。截至2024年2月8日的数据显示,DIF指标为-2.558,DEA指标为-2.317,而MACD指标为-0.482。这些数值的变化反映了股票价格的趋势及其潜在的发展方向。在分析这些指标时,我们可以将它们与股票价格的走势相互比较,以辅助我们做出更加明智的投资决策。

DIF指标为-2.558
DEA指标为-2.317
MACD指标为-0.482

根据算法,要先计算EMA,那么将使用 ewm ,Pandas中的ewm函数是指数加权移动平均的缩写(Exponential Weighted Moving Average)。它是Pandas中用于计算指数加权移动平均的功能强大且灵活的方法之一。指数加权移动平均是一种常用的时间序列数据平滑技术,用于消除数据中的噪声并突出数据的趋势。

ewm函数可以应用于Pandas的Series和DataFrame对象,它返回一个指数加权移动平均值的对象。该函数接受几个参数,其中包括alpha参数,用于指定指数加权的衰减率,以及min_periods参数,用于指定计算指数加权移动平均所需的最小观察值数量。

核心代码:EMA

计算指数移动平均值(Exponential Moving Average)

参数:

  • data: pandas Series or DataFrame,输入的时间序列数据
  • window: int,移动窗口的大小,即计算指数移动平均值的观察窗口大小

返回值:

  • pandas Series or DataFrame,指数移动平均值

注意:

  • 该函数将输入的数据作为参数,使用指数加权移动平均(EWMA)方法计算指定窗口大小下的指数移动平均值。
def EMA(data, window):return data.ewm(span=window, min_periods=window, adjust=False).mean()

核心代码:MACD

计算MACD指标(Moving Average Convergence Divergence)

参数:

  • close: pandas Series,收盘价的时间序列数据
  • short: int,短期EMA的窗口大小,默认为12
  • long: int,长期EMA的窗口大小,默认为26
  • mid: int,DEA的窗口大小,默认为9

返回值:

  • dif: pandas Series,MACD指标中的DIF值
  • dea: pandas Series,MACD指标中的DEA值
  • macd: pandas Series,MACD指标的数值

注意:

  • 该函数使用指数移动平均(EMA)方法计算短期EMA和长期EMA,然后基于这两者计算DIF和DEA,最终得出MACD指标的数值。

def MACD(close, short=12, long=26, mid=9):dif = EMA(close, short) - EMA(close, long)dea = EMA(dif, mid)macd = (dif - dea) * 2return dif, dea, macd

200 次交易日的收盘价格


# 200 次交易日的收盘价格
close_prices = [14.06, 14.18, 12.76, 14.04, 15.44, 16.98, 17.0, 17.66, 19.43, 20.79, 22.87, 20.58, 20.79, 18.71, 19.62,20.96, 19.58, 20.38, 20.97, 22.02, 22.0, 19.98, 21.44, 23.58, 25.94, 28.53, 31.38, 34.52, 34.07, 32.6,35.86, 35.97, 39.57, 39.94, 38.0, 39.51, 37.63, 35.07, 35.09, 35.23, 34.44, 35.37, 37.05, 34.98, 37.96,36.59, 35.18, 35.08, 36.4, 36.35, 34.51, 36.89, 35.55, 35.3, 34.94, 31.45, 30.54, 29.65, 28.64, 27.96,29.12, 27.31, 27.89, 30.68, 33.75, 33.39, 31.56, 30.3, 33.33, 33.1, 36.41, 37.6, 38.6, 38.03, 37.53,35.31, 34.5, 33.95, 37.35, 41.09, 38.0, 37.92, 37.43, 41.17, 45.29, 42.3, 42.07, 37.86, 36.83, 39.04,39.96, 39.16, 38.35, 38.48, 39.93, 38.69, 36.55, 37.06, 36.89, 37.09, 34.61, 33.4, 36.74, 36.69, 36.99,36.72, 36.82, 38.17, 37.65, 38.75, 38.02, 36.73, 36.98, 36.97, 38.45, 37.54, 37.52, 38.02, 37.04, 33.39,35.5, 35.1, 33.46, 34.33, 34.19, 31.54, 31.03, 33.15, 33.3, 34.36, 33.9, 32.9, 34.01, 37.41, 37.53,38.1, 35.9, 36.12, 36.52, 36.08, 35.4, 35.74, 35.81, 35.37, 33.14, 33.22, 32.6, 32.45, 31.68, 33.76,33.41, 33.63, 33.29, 34.2, 32.35, 32.03, 32.19, 32.36, 33.3, 32.37, 31.92, 32.18, 31.8, 29.75, 27.98,28.23, 26.78, 27.06, 26.52, 27.52, 27.82, 27.8, 26.87, 25.84, 25.36, 24.69, 23.79, 24.36, 23.91, 24.72,23.62, 23.63, 22.9, 21.86, 23.15, 22.7, 21.68, 22.24, 21.81, 23.99, 22.62, 20.84, 20.16, 18.89, 19.07,18.26, 16.44, 16.76, 16.33, 17.06]

完整代码

import pandas as pddef EMA(data, window):return data.ewm(span=window, min_periods=window, adjust=False).mean()def MACD(close, short=12, long=26, mid=9):dif = EMA(close, short) - EMA(close, long)dea = EMA(dif, mid)macd = (dif - dea) * 2return dif, dea, macd# 200 次交易日的收盘价格
close_prices = [14.06, 14.18, 12.76, 14.04, 15.44, 16.98, 17.0, 17.66, 19.43, 20.79, 22.87, 20.58, 20.79, 18.71, 19.62,20.96, 19.58, 20.38, 20.97, 22.02, 22.0, 19.98, 21.44, 23.58, 25.94, 28.53, 31.38, 34.52, 34.07, 32.6,35.86, 35.97, 39.57, 39.94, 38.0, 39.51, 37.63, 35.07, 35.09, 35.23, 34.44, 35.37, 37.05, 34.98, 37.96,36.59, 35.18, 35.08, 36.4, 36.35, 34.51, 36.89, 35.55, 35.3, 34.94, 31.45, 30.54, 29.65, 28.64, 27.96,29.12, 27.31, 27.89, 30.68, 33.75, 33.39, 31.56, 30.3, 33.33, 33.1, 36.41, 37.6, 38.6, 38.03, 37.53,35.31, 34.5, 33.95, 37.35, 41.09, 38.0, 37.92, 37.43, 41.17, 45.29, 42.3, 42.07, 37.86, 36.83, 39.04,39.96, 39.16, 38.35, 38.48, 39.93, 38.69, 36.55, 37.06, 36.89, 37.09, 34.61, 33.4, 36.74, 36.69, 36.99,36.72, 36.82, 38.17, 37.65, 38.75, 38.02, 36.73, 36.98, 36.97, 38.45, 37.54, 37.52, 38.02, 37.04, 33.39,35.5, 35.1, 33.46, 34.33, 34.19, 31.54, 31.03, 33.15, 33.3, 34.36, 33.9, 32.9, 34.01, 37.41, 37.53,38.1, 35.9, 36.12, 36.52, 36.08, 35.4, 35.74, 35.81, 35.37, 33.14, 33.22, 32.6, 32.45, 31.68, 33.76,33.41, 33.63, 33.29, 34.2, 32.35, 32.03, 32.19, 32.36, 33.3, 32.37, 31.92, 32.18, 31.8, 29.75, 27.98,28.23, 26.78, 27.06, 26.52, 27.52, 27.82, 27.8, 26.87, 25.84, 25.36, 24.69, 23.79, 24.36, 23.91, 24.72,23.62, 23.63, 22.9, 21.86, 23.15, 22.7, 21.68, 22.24, 21.81, 23.99, 22.62, 20.84, 20.16, 18.89, 19.07,18.26, 16.44, 16.76, 16.33, 17.06]short_window = 12
long_window = 26
mid_window = 9close_series = pd.Series(close_prices)dif, dea, macd = MACD(close_series, short_window, long_window, mid_window)print("DIF:", dif)
print("DEA:", dea)
print("MACD:", macd)
print("len:", len(close_prices), "次")

最终运行代码的效果展示

DIF

在这里插入图片描述

DEA

在这里插入图片描述

MACD

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/470493.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

AlmaLinux更换鼠标样式为Windows样式

文章目录 前言先看看条件与依赖第一步:测试最终效果第二步:使用CursorXP修改鼠标样式CurosrXP安装CursorXP使用 第三步:Linux端环境搭建与命令执行UbuntuFedora其他系统均失败 第四步:应用主题 前言 只不过是突发奇想&#xff0c…

扶贫|精准扶贫管理系统|基于Springboot的精准扶贫管理系统设计与实现(源码+数据库+文档)

精准扶贫管理系统目录 目录 基于Springboot的精准扶贫管理系统设计与实现 一、前言 二、系统功能设计 三、系统实现 1、管理员模块的实现 (1)用户信息管理 (2)贫困户信息管理 (3)新闻类型管理 &a…

Virt a Mate(VAM)游戏折腾记录

如有更新见原文:https://blog.iyatt.com/?p13283 1 前言 如果在网上看到有些视频名字带有 VAM 的,可能就是玩这个游戏录屏的。这个游戏可以建模、操作模型动作、构建场景等等。之前大致知道有这么个东西,只是电脑配置太差了,新…

AGV|RGV基本概念及导航分类与差异

AGV是自动导引运输车,装备采用电磁或光学等自动导引装置,能够沿规定的导引路径行驶,具有安全保护以及各种移载功能的运输车。其导航方式主要分磁条|磁钉导航、激光导航、激光反光板、激光自然导航、二维码导航、惯性导航等方式,广…

洛谷C++简单题小练习day12—寻找最小值小程序

day12--寻找最小值--2.16 习题概述 题目描述 给出 n 和 n 个整数 ai​,求这 n 个整数中最小值是什么。 输入格式 第一行输入一个正整数 n,表示数字个数。 第二行输入 n 个非负整数,表示 1,2…a1​,a2​…an​,以空格隔开。 …

【数位dp】【动态规划】【状态压缩】【推荐】1012. 至少有 1 位重复的数字

作者推荐 视频算法专题 本文涉及知识点 动态规划汇总 LeetCode:1012. 至少有 1 位重复的数字 给定正整数 n,返回在 [1, n] 范围内具有 至少 1 位 重复数字的正整数的个数。 示例 1: 输入:n 20 输出:1 解释:具有至…

appears to be hung in Auto SQL Tuning task

appears to be hung in Auto SQL Tuning task Oracle 自动定时优化任务执行失败分析 错误现象: Sat Feb 10 03:10:57 2024 Process 0x0x00007FFB81BE44A8 appears to be hung in Auto SQL Tuning task Current time 1707505857, process death time 1707505803 …

SAP PP学习笔记- 豆知识01 - 怎么查询既存品目

SAP系统当中已经有哪些品目要怎么查询呢? 1,MM60 品目一览 这里可以输入Plant,然后可以查询该工厂的所有品目。 2,SE16 > MARA MARA 品目一般データ,存放的是品目基本信息。 要查询该品目属于哪个Plant&#xff…

第十九篇【传奇开心果系列】Python的OpenCV库技术点案例示例:文字识别与OCR

传奇开心果短博文系列 系列短博文目录Python的OpenCV库技术点案例示例系列 短博文目录前言一、OpenCV 文字识别介绍二、图像预处理示例代码三、文字区域检测示例代码四、文字识别示例代码五、文字后处理示例代码六、OpenCV结合Tesseract OCR库实现文字识别示例代码七、OpenCV结…

游戏开发的编程算不算是IT行业中难度最大的?

游戏开发的编程算不算是IT行业中难度最大的? 游戏作为当今数字娱乐领域中最引人入胜的产品之一,其背后所依托的程序开发能力也备受关注。作为游戏开发过程中的“幕后英雄”,编程工作的难易程度直接影响到游戏的质量体验和开发效率。 关于游…

【开源】基于JAVA+Vue+SpringBoot的就医保险管理系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 科室档案模块2.2 医生档案模块2.3 预约挂号模块2.4 我的挂号模块 三、系统展示四、核心代码4.1 用户查询全部医生4.2 新增医生4.3 查询科室4.4 新增号源4.5 预约号源 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVue…

Windows系统VMware创建多个CentOS7虚拟机 NAT网络配置 ssh连接

主要目标: 1.创建3个虚拟机, centos7系统 2.虚拟机之间互相访问 3.物理机访问各虚拟机, 通过xshell建立ssh连接 4.物理机网络变化时,仍能访问 用途: NoSQL课程使用, 课前环境搭建,个人备忘 基本信息: 物理机: windows 11 操作系统 虚拟机软件&#xff…