量化交易系统开发-实时行情自动化交易-4.1.2.A股平滑异同移动平均线(MACD)实现

news2024/11/20 19:48:49

19年创业做过一年的量化交易但没有成功,作为交易系统的开发人员积累了一些经验,最近想重新研究交易系统,一边整理一边写出来一些思考供大家参考,也希望跟做量化的朋友有更多的交流和合作。

接下来继续说说A股平滑异同移动平均线(MACD)实现。

在 A 股市场中,平滑异同移动平均线(MACD)是一种常用的技术指标,用于衡量股票的价格趋势和动量。MACD 结合了移动平均线的趋势跟踪特性和动量变化,通过快线、慢线、以及柱状图的相互关系,帮助交易者判断买卖信号。以下是针对 A 股的平滑异同移动平均线(MACD)实现,利用 Python 和 Tushare 获取数据并计算 MACD。

1. MACD 的基本组成
  • 快线(DIF):通常为 12 日指数移动平均线(EMA)减去 26 日 EMA。

  • 信号线(DEA):通常为 DIF 的 9 日 EMA。

  • 柱状图(Histogram):DIF 与信号线的差值,用于判断市场的多空力量。

2. 获取 A 股数据

使用 Tushare 获取 A 股的股票数据,确保你有 Tushare 的 API token。

import tushare as ts
import pandas as pd
import matplotlib.pyplot as plt

# 设置 Tushare token
ts.set_token('your_tushare_token')
pro = ts.pro_api()

# 获取 A 股的日线数据(以贵州茅台为例)
def get_a_stock_data(stock_code, start_date, end_date):
    df = pro.daily(ts_code=stock_code, start_date=start_date, end_date=end_date)
    df = df[['trade_date', 'close']]
    df['trade_date'] = pd.to_datetime(df['trade_date'])
    df.set_index('trade_date', inplace=True)
    df = df.sort_index()
    return df

# 获取贵州茅台(600519.SH)的日线数据
stock_code = '600519.SH'
start_date = '20200101'
end_date = '20221231'
stock_data = get_a_stock_data(stock_code, start_date, end_date)
3. 计算 MACD 指标
# 计算 MACD 指标
def calculate_macd(data, short_window=12, long_window=26, signal_window=9):
    """
    计算 MACD 指标。

    :param data: 股票数据的 pandas DataFrame,必须包含 'close' 列
    :param short_window: 短期 EMA 的窗口大小,默认为 12
    :param long_window: 长期 EMA 的窗口大小,默认为 26
    :param signal_window: 信号线 EMA 的窗口大小,默认为 9
    :return: 包含 MACD 指标的 DataFrame
    """
    # 计算短期和长期的指数移动平均线 (EMA)
    data['ema_short'] = data['close'].ewm(span=short_window, adjust=False).mean()
    data['ema_long'] = data['close'].ewm(span=long_window, adjust=False).mean()

    # 计算 DIF (快线)
    data['DIF'] = data['ema_short'] - data['ema_long']

    # 计算 DEA (信号线),即 DIF 的 9 日 EMA
    data['DEA'] = data['DIF'].ewm(span=signal_window, adjust=False).mean()

    # 计算 MACD 柱状图
    data['MACD'] = data['DIF'] - data['DEA']

    return data

# 计算贵州茅台的 MACD 指标
stock_data = calculate_macd(stock_data)

# 打印结果
data[['close', 'DIF', 'DEA', 'MACD']]

# 绘制 MACD 图表
plt.figure(figsize=(12, 8))
plt.subplot(2, 1, 1)
plt.plot(stock_data.index, stock_data['close'], label='Close Price', color='blue')
plt.title(f'{stock_code} Close Price')
plt.xlabel('Date')
plt.ylabel('Price')
plt.legend()
plt.grid()

plt.subplot(2, 1, 2)
plt.plot(stock_data.index, stock_data['DIF'], label='DIF', color='blue')
plt.plot(stock_data.index, stock_data['DEA'], label='DEA', color='red')
plt.bar(stock_data.index, stock_data['MACD'], label='MACD Histogram', color='green', alpha=0.5)
plt.title('MACD Indicator')
plt.xlabel('Date')
plt.ylabel('Value')
plt.legend()
plt.grid()

plt.tight_layout()
plt.show()
4. 代码解释
  • 获取数据:我们使用 Tushare 的 pro.daily 接口获取贵州茅台的日线数据,数据包括收盘价。

  • 计算短期和长期 EMA:使用 ewm() 函数计算短期(12 日)和长期(26 日)指数移动平均线。

  • DIF 和 DEA:DIF 是短期 EMA 和长期 EMA 的差值,DEA 是 DIF 的 9 日 EMA,用于平滑快线的波动。

  • MACD 柱状图:柱状图表示 DIF 与 DEA 之间的差值,通常用于判断市场多空力量的转换。

5. 使用 MACD 的交易信号
  • 金叉(买入信号):当 DIF 向上突破 DEA 时,称为金叉,通常被视为买入信号,意味着市场可能进入上涨趋势。

  • 死叉(卖出信号):当 DIF 向下突破 DEA 时,称为死叉,通常被视为卖出信号,意味着市场可能进入下跌趋势。

  • MACD 柱状图:当柱状图由负转正时,说明市场多头力量增强;当柱状图由正转负时,说明市场空头力量增加。

6. 总结

平滑异同移动平均线(MACD)是 A 股市场中广泛使用的技术分析工具,通过分析快慢线和柱状图的变化,可以帮助交易者判断市场的趋势方向和动量强度。MACD 的优势在于结合了趋势和动量的分析,从而减少了单纯依靠移动平均线可能出现的虚假信号。在实际应用中,MACD 常与其他技术指标(如 RSI、布林带等)结合使用,以增强交易策略的可靠性。

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

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

相关文章

计算机网络 (3)计算机网络的性能

一、计算机网络性能指标 速率: 速率是计算机网络中最重要的性能指标之一,它指的是数据的传送速率,也称为数据率(Data Rate)或比特率(Bit Rate)。速率的单位是比特/秒(bit/s&#xff…

豆包MarsCode

#豆包MarsCode上新workspace# 1. 首先,个人所写的代码,会提交到gitee或者阿里的云效仓库,但是想在数据仓库导入的时候,只有github的仓库,希望可以加入国内的数据仓库 2. 加载不流畅,在使用网页版的时候&…

物联网智能技术的深入探讨与案例分析

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。 🍎个人主页:Java Fans的博客 🍊个人信条:不迁怒,不贰过。小知识,大智慧。 💞当前专栏…

C语言零基础入门

一、输入输出 &#xff08;1&#xff09;scanf scanf 是C语言中的一个标准库函数&#xff0c;用于从标准输入&#xff08;通常是键盘&#xff09;读取数据。scanf 函数定义在 <stdio.h> 头文件中。 #include <stdio.h>int main(void) {//读取整数 int num;print…

Jmeter数据库压测之达梦数据库的配置方法

目录 1、概述 2、测试环境 3、数据库压测配置 3.1 安装jmeter 3.2 选择语言 3.3 新建测试计划 3.4 配置JDBC连接池 3.5 配置线程组 3.6 配置测试报告 3.7 执行测试 1、概述 Jmeter是Apache组织开发的基于Java的压力测试工具&#xff0c;用于对软件做压力测试。 它最…

golang开发一个海盗王的登录更新器

前段时间&#xff0c;用golang配合界面库govcl开发一个海盗王的登陆更新器&#xff0c;实现多区注册和文件更新分离不同服务器等新功能。 由于govcl没有更换皮肤的功能&#xff0c;界面都是默认&#xff0c;不好看。 找了很多go语言的gui库&#xff0c;都没有符合要求的。 后来…

好用的js组件库

lodash https://www.lodashjs.com/https://www.lodashjs.com/ uuid 用于生成随机数&#xff0c;常用于生成id标识 GitHub - uuidjs/uuid: Generate RFC-compliant UUIDs in JavaScripthttps://github.com/uuidjs/uuid dayjs 常用于时间的处理 安装 | Day.js中文网 (fenxi…

ElasticSearch学习篇17_《检索技术核心20讲》最邻近检索-局部敏感哈希、乘积量化PQ思路

目录 场景在搜索引擎和推荐引擎中&#xff0c;对相似文章去重是一个非常重要的环节&#xff0c;另外是拍照识花、摇一摇搜歌等场景都可以使用它快速检索。 基于敏感性哈希的检索更擅长处理字面上的相似而不是语义上的相似。 向量空间模型ANN检索加速思路 局部敏感哈希编码 随…

针对git、giteeVSCode连接的使用 || Live Share插件使用

1.下载git 链接 打开终端&#xff0c;桌面鼠标右键 2.配置密钥 登录gitee。 设置密钥 查看官方文档 跟着教程 复制最后的输出进行密钥添加 验证是否添加成功 3.创建&连接远程仓库 创建仓库 git终端进行配置 远程仓库克隆到本地 桌面终端clone,克隆他人|自己的仓库到本地…

【Pikachu】XML外部实体注入实战

若天下不定&#xff0c;吾往&#xff1b;若世道不平&#xff0c;不回&#xff01; 1.XXE漏洞实战 首先写入一个合法的xml文档 <?xml version "1.0"?> <!DOCTYPE gfzq [<!ENTITY gfzq "gfzq"> ]> <name>&gfzq;</name&…

【vmware+ubuntu16.04】ROS学习_博物馆仿真克隆ROS-Academy-for-Beginners软件包处理依赖报错问题

首先安装git 进入终端&#xff0c;输入sudo apt-get install git 安装后&#xff0c;创建一个工作空间名为tutorial_ws&#xff0c; 输入 mkdir tutorial_ws#创建工作空间 cd tutorial_ws#进入 mkdir src cd src git clone https://github.com/DroidAITech/ROS-Academy-for-Be…

【澜舟科技-注册/登录安全分析报告】

前言 由于网站注册入口容易被机器执行自动化程序攻击&#xff0c;存在如下风险&#xff1a; 暴力破解密码&#xff0c;造成用户信息泄露&#xff0c;不符合国家等级保护的要求。短信盗刷带来的拒绝服务风险 &#xff0c;造成用户无法登陆、注册&#xff0c;大量收到垃圾短信的…

thinkphp6 --数据库操作 增删改查

一、数据库连接配置 如果是本地测试&#xff0c;它会优先读取 .env 配置&#xff0c;然后再读取 database.php 的配置&#xff1b; 如果禁用了 .env 配置&#xff0c;则会读取数据库连接的默认配置&#xff1a; # .env文件&#xff0c;部署服务器&#xff0c;请禁用我 我们可以…

Excel数据动态获取与映射

处理代码 动态映射 动态读取 excel 中的数据&#xff0c;并通过 json 配置 指定对应列的值映射到模板中的什么字段上 private void GetFreightFeeByExcel(string filePath) {// 文件名需要以快递公司命名 便于映射查询string fileName Path.GetFileNameWithoutExtension(fi…

Python学习29天

二分查找 # 定义函数冒泡排序法从大到小排列 def bbble_sort(list):# i控制排序次数for i in range(len(list) - 1):# j控制每次排序比较次数for j in range(len(list) - 1 - i):if list[j] < list[j 1]:list[j], list[j 1] list[j 1], list[j] # 定义二分查找函数 def…

nodemon入门介绍

以前&#xff0c;我们开发一个node后端服务时&#xff0c;每次更改文件&#xff0c;均需重启一下&#xff0c;服务才能生效。这使我们的开发效率降低了很多。nodemon的出现&#xff0c;可以随时监听文件的变更&#xff0c;自动重启服务&#xff0c;我们开发时只需关注代码即可&…

STM32设计防丢防摔智能行李箱-分享

目录 目录 前言 一、本设计主要实现哪些很“开门”功能&#xff1f; 二、电路设计原理图 1.电路图采用Altium Designer进行设计&#xff1a; 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 随着科技的不断发展&#xff0c;嵌入式系统、物联网技术、智能设备…

Pytest 学习 @allure.severity 标记用例级别的使用

一、前言 使用allure.serverity注解&#xff0c;可以在allure报告中清晰的看到不同级别用例情况 使用等级介绍 allure提供的枚举类 二、等级介绍 二、等级介绍 blocker&#xff1a;阻塞缺陷&#xff08;功能未实现&#xff0c;无法下一步&#xff09; critical&#xff1a;…

[javascript]js的五子棋让红蓝双方自己跟自己下棋

运行效果&#xff08;这是未分出胜负&#xff09;&#xff1a; 这是分出胜负&#xff1a; 源代码&#xff0c;把下边的代码放到1.html&#xff0c;然后用浏览器打开&#xff0c;就可以&#xff0c;然后刷新网页&#xff1a; <!DOCTYPE html> <html><body>&l…

Go语言中AES加密算法的实现与应用

一、前言 在当今的软件开发领域&#xff0c;数据安全至关重要。加密技术作为保护数据机密性的关键手段&#xff0c;被广泛应用于各个方面。AES&#xff08;高级加密标准&#xff09;作为一种对称加密算法&#xff0c;以其高效性和安全性在众多加密场景中占据重要地位。本文将详…