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

news2025/5/11 15:44:42

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) * 2
    return 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 pd


def 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) * 2
    return 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 = 9

close_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.coloradmin.cn/o/1447042.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

寒假作业-day9

创建新项目 选择芯片 开启调试 配置时钟 时钟树的配置 工程管理 打开项目 编写代码

字节跳动官方出品AI,白嫖使用GPT4!

关注我,紧跟本系列专栏文章,咱们下篇再续! 作者简介:魔都技术专家兼架构,多家大厂后端一线研发经验,各大技术社区头部专家博主,编程严选网创始人。具有丰富的引领团队经验,深厚业务架…

搜索专项---多源BFS模型

文章目录 矩阵距离 一、矩阵距离 本题思路: #include <bits/stdc.h>#define x first #define y secondtypedef std::pair<int,int> PII; constexpr int N1010;int n,m; char g[N][N]; int dist[N][N]; std::queue<PII> q;int dx[4] {-1, 0, 1, 0}, dy[4] …

8868体育助力西甲最新积分榜 皇马4球大胜稳坐榜一

西甲联赛第24轮的四场比赛于2月10日全面收官。其中&#xff0c;皇马在主场迎战吉罗纳队&#xff0c;以4-0的大比分击败对手&#xff0c;将领先优势扩大到5分&#xff0c;稳坐西甲榜首&#xff0c;掌握了争冠的主动权。 威尼修斯的世界波为皇马打开胜利之门&#xff0c;第6分钟就…

机器学习系列——(十四)正则化回归

引言 在机器学习领域&#xff0c;正则化回归是一种常用的技术&#xff0c;旨在解决过拟合问题&#xff0c;提高模型的泛化能力。本文将简单探讨正则化回归的概念、类型和应用&#xff0c;帮助读者更好地理解和运用这一重要技术。 一、概念 正则化回归是一种通过引入额外信息&…

【从零到Offer】MySQL最左匹配

前言 ​ 相信大家在日常开发时&#xff0c;也经常能听到“最左匹配”这个词&#xff0c;那么什么是最左匹配呢&#xff1f;本篇文章就带你一起探索“最左匹配”的神奇秘密。 什么是最左匹配 ​ 最左匹配&#xff0c;通常指的是最左前缀匹配原则&#xff0c;即MySQL在检索数据…

本地搭建three.js官方文档

因为three.js官网文档是国外的网站&#xff0c;所以你没有魔法的情况下打开会很慢&#xff0c;这时我们需要在本地搭建一个官方文档便于我们学习查看。 第一步&#xff1a;首先我们先访问GitHub地址 GitHub - mrdoob/three.js: JavaScript 3D Library. 下载不下来的小伙伴们私…

Offer必备算法06_位运算_十道力扣OJ题详解_由易到难

目录 位运算算法原理 ①力扣191. 位1的个数 解析代码 ②力扣338. 比特位计数 解析代码 ③力扣461. 汉明距离 解析代码 ④力扣136. 只出现一次的数字 解析代码 ⑤力扣260. 只出现一次的数字 III 解析代码 ⑥力扣面试题 01.01. 判定字符是否唯一 解析代码 ⑦力扣26…

day 20(补2.5)

fread 函数&#xff1a; 今日练习 C语言面试题5道~ 1. static 有什么用途&#xff1f;&#xff08;请至少说明两种&#xff09; 1) 限制变量的作用域 2) 设置变量的存储域 2. 引用与指针有什么区别&#xff1f; 1) 引用必须被初始化&#xff0c;指针不必。 2) 引用初始…

MYSQL学习笔记:MYSQL存储引擎

MYSQL学习笔记&#xff1a;MYSQL存储引擎 MYSQL是插件式的存储引擎 存储引擎影响数据的存储方式 存储引擎是用来干什么的&#xff0c;innodb和myisam的主要区别–数据存储方式----索引 mysql> show engines; ----------------------------------------------------------…

目标识别,跟踪模块

Tofu5m 是高性价比目标识别跟踪模块&#xff0c;支持可见光视频或红外网络视频的输入&#xff0c;支持视频下的多类型物体检测、识别、跟踪等功能。 产品支持视频编码、设备管理、目标检测、深度学习识别、跟踪等功能&#xff0c;提供多机版与触控版管理软件&#xff0c;为二次…

VLAN间通信

VLAN间通信的三种方法 vlanif接口 最常用&#xff0c;又叫虚拟接口&#xff0c;这种方式一般使用三层交换机实现&#xff0c;它包含路由模块和交换模块&#xff0c;交换模块可以实现剥离和添加VLAN标签,路由模块实现路由功能 VLANif接口 为各自vlan的网关 # interface Vlani…

常见范数介绍

一、在线性代数中&#xff0c;符号 ( ||x|| ) 表示向量 ( x ) 的范数&#xff08;Norm&#xff09;。范数是一个将向量映射到非负值的函数&#xff0c;它衡量了向量的大小或长度。范数可以是多种类型&#xff0c;其中最常见的有&#xff1a; 欧几里得范数&#xff08;L2范数&am…

8868体育助力西甲皇家马德里足球俱乐部 皇马占据争冠优势

西甲的皇家马德里足球俱乐部是8868体育合作的俱乐部之一&#xff0c;这支拥有悠久历史和辉煌成就的豪门球队&#xff0c;本赛季再次展现了它的强大实力。18胜4平1负&#xff0c;暂居榜首&#xff0c;这样的成绩足以让任何对手望而却步。然而&#xff0c;足球场上的对决永远充满…

《Linux 简易速速上手小册》第7章: 网络配置与管理(2024 最新版)

文章目录 7.1 Linux 网络基础7.1.1 重点基础知识7.1.2 重点案例&#xff1a;配置静态 IP 地址7.1.3 拓展案例 1&#xff1a;使用 nmcli 配置网络&#xff08;适用于 Fedora/CentOS&#xff09;7.1.4 拓展案例 2&#xff1a;配置无线网络连接 7.2 静态与动态 IP 配置7.2.1 重点基…

使用Docker快速部署MySQL

部署MySQL 使用Docker安装&#xff0c;仅仅需要一步即可&#xff0c;在命令行输入下面的命令 docker run -d \--name mysql \-p 3306:3306 \-e TZAsia/Shanghai \-e MYSQL_ROOT_PASSWORD123456 \mysql MySQL安装完毕&#xff01;通过任意客户端工具即可连接到MySQL. 当我们执…

【JVM篇】什么是双亲委派机制

文章目录 &#x1f354;什么是双亲委派机制⭐案例 &#x1f339;双亲委派机制有什么用 &#x1f354;什么是双亲委派机制 指的是&#xff1a;当一个类加载器接收到加载类的任务的时候&#xff0c;会向上查找是否加载过&#xff0c;再从上到下进行加载 &#xff08;因为要上下查…

Java实现软件学院思政案例库系统 JAVA+Vue+SpringBoot+MySQL

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 系统管理员2.2 普通教师 三、系统展示四、核心代码4.1 查询思政案例4.2 审核思政案例4.3 查询思政课程4.4 思政案例点赞4.5 新增思政案例评语 五、免责说明 一、摘要 1.1 项目介绍 基于JAVAVueSpringBootMySQL的软件学…

Excel一键导入导出-EasyPOI

EasyPOI是一款优秀的开源Java库&#xff0c;专为简化和优化Excel文件的导入导出操作而设计。下面&#xff0c;我会介绍EasyPOI在项目中使用EasyPOI&#xff0c;实现Excel文件的高效操作。帮助读者全面了解和掌握这一工具。 EasyPOI简介 官网&#xff1a; http://www.wupaas.co…

python 基础知识点(蓝桥杯python科目个人复习计划39)

今日复习内容&#xff1a;排序 昨天晚上快睡的时候&#xff0c;脑子里就突然想到了排序&#xff0c;所以就打算再复习一遍相关知识点。 我先说一下冒泡排序&#xff0c;冒泡排序其实很好理解&#xff0c;比如有n个人排队&#xff08;从矮到高&#xff09;&#xff0c;先从这n…