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) * 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

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Linux——进程间通信:管道

我们在开发过程中,可能会碰到两个或多个进程需要协同进行,这两个进 程之间有着一定的关系,这个进程可能会需要另一个进程的某些消息来达 到自己的目的,或者是一个进程控制着另一个进程,又或者是需要某种资 源的共享。但…

BFS与DFS初级练习(排列数字,n-皇后,走迷宫)

BFS与DFS初步了解 DFS(深度优先搜索)和BFS(广度优先搜索)是两种常用的图遍历算法。 DFS是一种递归的搜索算法,它从起始节点开始,沿着路径依次访问与当前节点相邻的未访问节点,直到无法继续访问…

【易学】周易入门 ③ ( 玄学五术 - 山医命相卜 | 天命无常 唯有德者居之 | 预测学模型 | 五行学说 | 五行相生 | 五行相克 )

文章目录 一、玄学五术 - 山医命相卜二、天命无常 唯有德者居之三、预测学模型四、五行学说1、五行相生2、五行相克 一、玄学五术 - 山医命相卜 玄学五术 : 山 : 修行 " 肉体 " 和 " 精神 " , 以寻求 身心超脱 ; 肉体修行 - 拳法 : 太极拳 , 五禽戏 , 易筋…

那些 C语言指针 你不知道的小秘密 (完结篇)

本篇会加入个人的所谓‘鱼式疯言’ ❤️❤️❤️鱼式疯言:❤️❤️❤️此疯言非彼疯言 而是理解过并总结出来通俗易懂的大白话, 我会尽可能的在每个概念后插入鱼式疯言,帮助大家理解的. 🤭🤭🤭可能说的不是那么严谨.但小编初心是能让更多人能…

BUUCTF LKWA

1.访问页面。 2.选择 Variables variable 关卡 3.获得flag http://357dab81-78b8-4d74-976a-4a69dd894542.node5.buuoj.cn:81/variables/variable.php?funcpassthru&inputcat%2Fflagflag{0020ced6-8166-4fa5-87a7-7d93ee687c3e}

键盘重映射禁用 CtrlAltDel 键的利弊

目录 前言 一、Scancode Map 的规范 二、禁用 CtrlAltDel 的方法及其缺陷 三、编程实现和测试 3.1 C 实现的简易修改工具 3.2 C# 实现的窗口工具 四、总结 本文属于原创文章,转载请注明出处: https://blog.csdn.net/qq_59075481/article/details…

PySQLRecon:一款功能强大的MSSQL安全测试工具

关于PySQLRecon PySQLRecon是一款功能强大的MSSQL安全测试工具,该工具基于SQLRecon实现其功能,可以帮助广大红队研究人员针对MSSQL执行攻击性安全测试。 环境配置 由于该工具基于Python 3开发,因此我们首先需要在本地设备上安装并配置好Pyt…

鸿蒙小案例-你画我猜

鸿蒙小案例-你画我猜 1.准备组件(组件布局) 2.实现跟随鼠标画笔画出图案功能 3.实现复制上面的画笔的图案功能 4.其他小功能1.组件的准备 画布的组件官方给的API是Canvas,需要传递一个参数CanvasRenderingContext2D 直接搜索API 使用官方案例 private settings: …

小技巧 | 如何将win11回退至win10

当你不小心点错将电脑的win10系统更新成win11系统了(但没有完全更新),你会怎么做呢? 1.在“开始”菜单界面点击“设置”选项 2.点击“更新和安全”选项 3.在“更新历史记录”中点击“恢复选项” 4.点击“返回”选项 会弹出以下界面…

three.js 细一万倍教程 从入门到精通(二)

目录 三、全面认识three.js物体 3.1、掌握几何体顶点_UV_法向属性 3.2、BufferGeometry设置顶点创建矩形 3.3、生成酷炫三角形科技物体 四、详解材质与纹理 4.1、初识材质与纹理 4.2、详解纹理偏移_旋转_重复 偏移 旋转 重复 4.3、设置纹理显示算法与mipmap mapFil…

【动态规划】:泰波那契模型_解码方法

朋友们、伙计们,我们又见面了,本专栏是关于各种算法的解析,如果看完之后对你有一定的启发,那么请留下你的三连,祝大家心想事成! C 语 言 专 栏:C语言:从入门到精通 数据结构专栏&…

【网工】华为设备命令学习(综合实验一)

实验要求和实验成果如图所示。 LSW2不需要其他配置&#xff0c;其下就一台设备&#xff0c;不需要区分。 LSW3配置如下&#xff1a; <Huawei>sy Enter system view, return user view with CtrlZ. [Huawei]un in en //关闭系统提示信息 Info: Information …

LeetCode、72. 编辑距离【中等,二维DP】

文章目录 前言LeetCode、72. 编辑距离【中等&#xff0c;二维DP】题目链接与分类二维DP 资料获取 前言 博主介绍&#xff1a;✌目前全网粉丝2W&#xff0c;csdn博客专家、Java领域优质创作者&#xff0c;博客之星、阿里云平台优质作者、专注于Java后端技术领域。 涵盖技术内容…

VTK Python PyQt 监听键盘 控制 Actor 移动 变色

KeyPressInteractorStyle 在vtk 中有时我们需要监听 键盘或鼠标做一些事&#xff1b; 1. 创建 Actor&#xff1b; Sphere vtk.vtkSphereSource() Sphere.SetRadius(10)mapper vtk.vtkPolyDataMapper() mapper.SetInputConnection(Sphere.GetOutputPort()) actor vtk.vtkAc…

Vue核心基础6:Vue内置指令、自定义指令、生命周期

1 Vue中的内置指令 <script>const vm new Vue({el: #root,data: {n: 1,m: 100,name: Vue,str: <h3>你好</h3>}})</script> 1.1 v-text <div v-text"name"></div>1.2 v-html <div v-html"str"></div> …

Spring Boot 笔记 012 创建接口_添加文章分类

1.1.1 实体类添加校验 package com.geji.pojo;import jakarta.validation.constraints.NotEmpty; import lombok.Data;import java.time.LocalDateTime;Data public class Category {private Integer id;//主键IDNotEmptyprivate String categoryName;//分类名称NotEmptypriva…

中小学信息学奥赛CSP-J认证 CCF非专业级别软件能力认证-入门组初赛模拟题第一套(完善程序题)

CCF认证CSP-J入门组模拟测试题第一套 三、完善程序题 第一题 九宫格 请完善下面的程序,将1~9个数字分别填人3x3的九宫格中,第一行的三个数字组成一个三位数。要使第二行的三位数是第一行的2倍,第三行的三位数是第一行的3倍且每个格子里的数字都不能重复,现在要求输出所有的填…

python输出字符 2022年12月青少年电子学会等级考试 中小学生python编程等级考试二级真题答案解析

目录 python输出字符 一、题目要求 1、编程实现 2、输入输出 二、算法分析 三、程序代码 四、程序说明 五、运行结果 六、考点分析 七、 推荐资料 1、蓝桥杯比赛 2、考级资料 3、其它资料 python输出字符 2022年12月 python编程等级考试级编程题 一、题目要求 …

《CSS 简易速速上手小册》第2章:CSS 布局与定位(2024 最新版)

文章目录 2.1 Flexbox&#xff1a;灵活的布局解决方案2.1.1 基础知识2.1.2 重点案例&#xff1a;创建一个响应式导航菜单2.1.3 拓展案例 1&#xff1a;卡片布局2.1.4 拓展案例 2&#xff1a;中心对齐的登录表单 2.2 Grid 布局&#xff1a;网格系统的魔力2.2.1 基础知识2.2.2 重…

渗透测试练习题解析 3(CTF web)

1、[网鼎杯 2020 朱雀组]phpweb 1 考点&#xff1a;反序列化漏洞利用 进入靶场&#xff0c;查看检查信息&#xff0c;发现存在两个参数 func 和 p 查看页面源代码 payload&#xff1a;funcfile_get_contents&pphp://filter/resourceindex.php 整理后&#xff0c;就是 PHP 代…