Python实现MACD工具判断信号:股票技术分析的工具系列(1)

news2024/11/19 1:37:10

Python实现MACD工具判断信号:股票技术分析的工具系列(1)

    • 介绍
    • 代码
      • rolling函数介绍
      • 核心代码
        • 计算指数移动平均值
        • 计算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;

优势:

优势描述
趋势跟踪能力强MACD能够帮助识别市场的趋势方向,尤其是短期和长期趋势的转折点。通过观察DIF和DEA线的交叉,可以提供买入和卖出的时机。
清晰的信号MACD的交叉点和柱状线的变化提供了清晰的交易信号,使得投资者能够更容易地进行决策。
背离信号当DEA线与价格走势产生背离时,往往暗示着市场趋势即将发生变化,这为投资者提供了及时的行动信号。
柱状线变化反映市场动能MACD柱状线的颜色变化反映了市场的动能变化,红色代表正能量增强,绿色代表负能量增强,这有助于投资者了解市场情绪和力量的变化。

劣势:

劣势描述
滞后性MACD是一种滞后指标,它基于移动平均线的计算,因此在市场趋势发生变化之后才会发出信号,有时可能会错过市场的最佳买入或卖出时机。
假信号由于MACD的计算方式,有时会出现假信号,即在市场波动较大或横盘震荡时,可能会产生交叉但并未发生实际的趋势转折。
单一性MACD虽然能够提供趋势判断和交易信号,但它并不能完全覆盖市场的全部信息,投资者在使用时仍需要结合其他指标和技术分析方法进行综合判断。

代码

rolling函数介绍

rolling 函数通常与其他函数(如 meansumstd 等)一起使用,以计算滚动统计量,例如滚动均值、滚动总和等。

以下是 rolling 函数的基本语法:

DataFrame.rolling(window, min_periods=None, center=False, win_type=None, on=None, axis=0, closed=None)
  • window: 用于计算统计量的窗口大小。
  • min_periods: 每个窗口最少需要的非空观测值数量。
  • center: 确定窗口是否居中,默认为 False
  • win_type: 窗口类型,例如 Noneboxcartriang 等,默认为 None
  • on: 在数据帧中执行滚动操作的列,默认为 None,表示对整个数据帧执行操作。
  • axis: 执行滚动操作的轴,默认为 0,表示按列执行操作。
  • closed: 确定窗口的哪一端是闭合的,默认为 None

核心代码

计算指数移动平均值

计算指数移动平均值是一种技术分析方法,用于平滑数据序列并识别趋势,通过赋予最新数据更高的权重,以更快地反映市场变化。

def EMA(data, window):
    """
    计算指数移动平均值
    
    参数:
    data: pandas.Series,输入数据
    window: int,窗口大小
    
    返回:
    pandas.Series,指数移动平均值
    """
    return data.ewm(span=window, min_periods=window, adjust=False).mean()
计算MACD指标

MACD指标(Moving Average Convergence Divergence)是一种技术分析工具,通过计算两个移动平均线的差值,并将其绘制成柱状图,来帮助识别市场趋势的变化和买卖信号。

def MACD(close, short=12, long=26, mid=9):
    """
    计算MACD指标
    
    参数:
    close: pandas.Series,收盘价数据
    short: int,短期EMA窗口大小,默认为12
    long: int,长期EMA窗口大小,默认为26
    mid: int,DEA线EMA窗口大小,默认为9
    
    返回:
    tuple,包含dif、dea、macd指标值的元组
    """
    dif = EMA(close, short) - EMA(close, long)
    dea = EMA(dif, mid)
    macd = (dif - dea) * 2
    return dif, dea, macd

完整代码

这里完整代码中的data部分,阔以通过下面资源文件下载,或者留下邮箱等发送。:

https://download.csdn.net/download/qq_36051316/88896567

在这里插入图片描述

import pandas as pd
import stock_data

# 将股票数据存储到字典中
data = {
    'DATE': stock_data.DATE,
    'CLOSE': stock_data.CLOSE,
    'HIGH': stock_data.HIGH,
    'LOW': stock_data.LOW,
    'OPEN': stock_data.OPEN,
    'CHANGE': stock_data.CHANGE,
    'VOL': stock_data.VOL,
    'CAPITAL': stock_data.CAPITAL
}

# 创建DataFrame
df = pd.DataFrame(data)

def EMA(data, window):
    """
    计算指数移动平均值
    
    参数:
    data: pandas.Series,输入数据
    window: int,窗口大小
    
    返回:
    pandas.Series,指数移动平均值
    """
    return data.ewm(span=window, min_periods=window, adjust=False).mean()

def MACD(close, short=12, long=26, mid=9):
    """
    计算MACD指标
    
    参数:
    close: pandas.Series,收盘价数据
    short: int,短期EMA窗口大小,默认为12
    long: int,长期EMA窗口大小,默认为26
    mid: int,DEA线EMA窗口大小,默认为9
    
    返回:
    tuple,包含dif、dea、macd指标值的元组
    """
    dif = EMA(close, short) - EMA(close, long)
    dea = EMA(dif, mid)
    macd = (dif - dea) * 2
    return dif, dea, macd

def c_one_m(close_prices):
    """
    计算MACD指标的dif、dea、macd
    
    参数:
    close_prices: list,收盘价数据列表
    
    返回:
    tuple,包含dif、dea、macd指标值的元组
    """
    short_window = 12
    long_window = 26
    mid_window = 9
    close_series = pd.Series(close_prices)
    return MACD(close_series, short_window, long_window, mid_window)

def check_signal(v_df, day_index=-1):
    """
    检查MACD信号
    
    参数:
    v_df: pandas.DataFrame,包含MACD指标的DataFrame
    day_index: int,要检查的日期索引,默认为最后一天
    
    返回:
    str,表示MACD信号的字符串,可能为"买入信号"、"卖出信号"或"无信号"
    """
    latest_data = v_df.iloc[day_index]
    if latest_data['dif'] > 0 and 0 < latest_data['dea'] < latest_data['dif']:
        signal = "买入信号"
    elif latest_data['dif'] < 0 and 0 > latest_data['dea'] > latest_data['dif']:
        signal = "卖出信号"
    else:
        signal = "无信号"

    return signal

# 计算并添加MACD指标到DataFrame中
dif, dea, m = c_one_m(stock_data.CLOSE)
df['dif'] = dif
df['dea'] = dea
df['m'] = m

# 输出信号
latest_signal = check_signal(df, -1)
print(latest_signal)


在这里插入图片描述

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

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

相关文章

上传文件,页面loading显示文件上传进度

做项目时&#xff0c;弹窗上传文件时&#xff0c;上传动作无法停止&#xff0c;需要加一个蒙层&#xff0c;阻止上传文件过程中的用户操作&#xff0c;并显示文件上传进度&#xff0c;效果如图。 页面上传文件函数 /** 上传文件函数*/ uploadFile(){let config {onUploadProgr…

全网公开!!苍穹外卖或吉瑞外卖等外卖购物项目如何拓展?简历如何写?已经经过不同公司多轮面试。项目中会问到哪些问题?以及问题如何解决?

文章末尾联系作者&#xff0c;免费获取外卖项目的拓展和讲解资料&#xff0c;祝你面试成功 &#xff01;&#xff01;&#xff01; 文章问题的解答&#xff0c;以及作者的规划进步历程&#xff0c;尽在作者的知识库。 想要加入并查阅作者的知识库可以联系作者 不要白嫖&#…

微信报修小程序源码

源码获取方式&#xff1a; 1、搜一搜 万能工具箱合集 然后点击资料库&#xff0c;即可获取资源 一、先看Demo&#xff08;已更新至4.0.0&#xff09; 想看界面图片的&#xff0c;辛苦你爬一下楼&#xff0c;点击下方查看资源&#xff0c;进入官方demo 二、功能介绍 1、当前版…

关于跨境电商知识产权的英语翻译

随着全球化的发展&#xff0c;跨境电商逐渐成为国际贸易的重要组成部分。在这个领域中&#xff0c;知识产权的保护显得尤为重要。那么&#xff0c;对于跨境电商知识产权英语翻译&#xff0c;怎样做比较好&#xff0c;北京哪个翻译公司比较权威&#xff1f; 业内人士指出&#x…

网络工程师笔记8

华为VRP系统 设备管理方式 web管理方式 命令行管理方式 修改命令&#xff1a;undo 基础配置命令

线上问题——学习记录幂等判断失效问题分析

一、业务流程 上图是对save和saveScore两个接口的流程抽象&#xff0c;save是上传答题数据&#xff0c;saveScore则是上传答题分数&#xff0c;为保证幂等和防止并发调用&#xff0c;这两个接口都加了分布式锁&#xff08;还是两层哦&#xff09;。第一层使用的是不同的锁&…

Nginx使用—基础知识

Nginx简介 Nginx优点 高性能、高并发 支持很高的并发&#xff0c;在处理大量并发的情况下&#xff0c;比其他web服务器要高效 轻量且高扩展 功能模块少(源代码仅保留http与核心模块代码&#xff0c;其余不够核心代码会作为插件来安装) 代码模块化&#xff08;易读&#xff0…

【开源】SpringBoot框架开发固始鹅块销售系统

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 鹅块类型模块2.3 固始鹅块模块2.4 鹅块订单模块2.5 评论管理模块 三、系统设计3.1 用例设计3.2 数据库设计3.2.1 鹅块类型表3.2.2 鹅块表3.2.3 鹅块订单表3.2.4 鹅块评论表 四、系统展示五、核心代码5.…

计算文件大小时容易忽略的问题

计算文件大小时容易忽略的问题 1、概述2、问题背景3、解决方案4、结论 1、概述 大家好&#xff0c;我是欧阳方超&#xff0c;可以关注我的公众号“欧阳方超”&#xff0c;后续内容将在公众号首发。 在处理文件大小时&#xff0c;经常需要将其转换为KB并进行适当处理。然而&…

cuda python torch 虚拟环境配置

以下是Pytorch和CUDA对应的版本 以下是Pytorch和Python对应的版本 检查cuda与Python版本是否匹配 import torch print(torch.__version__) print(torch.cuda.is_available()) print(torch.empty(3,4,devicecuda))cuda 删除cuda conda uninstall cudatoolkit --forceconda u…

稀碎从零算法笔记Day5-LeetCode:轮转数组

题型&#xff1a;数组、数学、双指针 前言&#xff1a;LC说你得用三种方法做出来(悲) 链接&#xff1a;189. 轮转数组 - 力扣&#xff08;LeetCode&#xff09; 来源&#xff1a;LeetCode 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 …

操作系统概念概述

软件设计师11--操作系统 考点1&#xff1a;操作系统的作用操作系统概述例题&#xff1a; 考点2&#xff1a;特殊的操作系统例题&#xff1a; 考点1&#xff1a;操作系统的作用 操作系统概述 管理系统的硬件、软件、数据资源控制程序运行人机之间的接口应用软件与硬件之间的接口…

289页初中级前端题助你拿下Offer,web前端开发面试技巧

HTML面试题部分 1.H5的新特性有哪些 2.Label的作用是什么&#xff1f;是怎么用的&#xff1f; 3.HTML5的form如何关闭自动完成功能 4.dom如何实现浏览器内多个标签页之间的通信? 5.实现不使用 border 画出1px高的线&#xff0c;在不同浏览器的标准模式与怪异模式下都 能保持一…

详解C#之WinForm版利用RichTextBox 制作文本编辑器【附源码】

在Windows应用程序开发中&#xff0c;刚刚介绍了WPF版的利用RichTextBox实现文本编辑器&#xff0c;今天继续推出WinForm版的利用RichTextBox实现文本编辑器。本文利用一个简单的小例子&#xff0c;简述如何在WinForm开发中&#xff0c;利用RichTextBox开发文本编辑器&#xff…

数据传输的同步技术包含哪些?如何高效安全传输数据?

在数字化时代&#xff0c;数据传输的同步技术对于确保信息的一致性和通信质量至关重要。本文将探讨数据传输同步技术的种类、如何实现高效安全的数据传输&#xff0c;以及企业在数据迁移中常用的几种方式。最后&#xff0c;我们将重点介绍镭速大数据迁移工具的优势。 数据传输同…

论文:万卡集群训练大模型(by字节跳动)

论文&#xff1a;MegaScale: Scaling Large Language Model Training to More Than 10,000 GPUs&#xff08;https://arxiv.org/pdf/2402.15627.pdf&#xff09; 结论&#xff1a; 1&#xff0c;字节跳动提出了万卡集群大模型训练架构MegaScale&#xff0c;并在12288个GPU上训练…

118页Vue面试题总结,就是这么简单

问&#xff1a;BFC 与 IFC 区别 BFC 是块级格式上下文&#xff0c;IFC 是行内格式上下文&#xff1a; 内部的 Box 会水平放置水平的间距由 margin&#xff0c;padding&#xff0c;border 决定 问&#xff1a;BFC会与float元素相互覆盖吗&#xff1f;为什么&#xff1f;举例说…

人事档案转出需要注意哪些方面

人事档案转出是指将员工的人事档案从一个部门、公司或组织转移到另一个部门、公司或组织的过程。这个过程需要注意以下几个方面&#xff1a; 1.法律合规&#xff1a;在进行人事档案转出前&#xff0c;要确保遵守相关的法律法规和公司内部规定。例如&#xff0c;要确保有合法的授…

web组态--新一代全流程低代码物联网平台

先上图&#xff0c;实际完成效果&#xff1a; 1.添加应用图纸 登录by组态后台&#xff1a;http://www.byzt.net:90 ​ 点击组态管理-画面管理&#xff0c;先新建一个组态画面&#xff0c;填写画面名称&#xff0c;保存&#xff0c;进入组态画面。 ​ 选择画面管理&#xff…

Linux——网络基础

计算机网络背景 网络发展 独立模式: 计算机之间相互独立 在早期的时候&#xff0c;计算机之间是相互独立的&#xff0c;此时如果多个计算机要协同完成某种业务&#xff0c;那么就只能等一台计算机处理完后再将数据传递给下一台计算机&#xff0c;然后下一台计算机再进行相应…