一起学量化之macd指标

macd指标

1. macd指标定义

MACD的组成要素MACD称为异同移动平均线,是从双指数移动平均线发展而来的。MACD由一根快线、一根慢线、一根0轴线和无数根红绿柱状线组成。

如下图所示,粉色的是快线,也称DIFF线蓝色的是慢线,也称DEA线。快线波动较大,慢线相对平稳一些。分割上下红绿柱的横轴就是0轴。

请添加图片描述

2. macd使用

2.1 快线DIF与慢线DEA的数值以及它们所在的位置

  • 当DIF和DEA均大于0(处于0轴之上)并且向上移动时,表示市场处于多头行情中,可以买人或持股
  • 当DIF和DEA均小于0(处于0轴之下)并且向下移动时,表示市场处于空头行情中,可以卖出股票或观望
  • 当DIF和DEA均大于0(处于0轴之上)但都向下移动时,表示市场行情处于退潮阶段,股票将下跌,可以卖出股票和观望
  • 当DIF和DEA均小于0(处于0轴之下)但都向上移动时,表示行情即将启动,股票将上涨,可以买进股票或持股待涨

2.2 快线DIF与慢线DEA的交叉情况

  • 当DIF与DEA都在0轴之上,而DIF向上突破DEA时,表明市场处于一种强势之中,股价将再次上涨,可以加码买进股票或持股待涨,这就是MACD指标黄金交叉的一种形式
  • 当DIF和DEA都在0轴之下,而DIF向上突破DEA时,表明市场即将转强,股价将止跌反弹,可以开始买进股票或持股,这是MACD指标黄金交叉的另一种形式
  • 当DIF与DEA都在0轴之上,而DIF却向下突破DEA时,表明市场即将由强势转为弱势,股价将下跌,这时应卖出大部分股票而不能买进股票,这就是MACD指标死亡交叉的一种形式
  • 当DIF和DEA都在0轴之下,而DIF向下突破DEA时,表明市场将再次进入极度弱市中,股价还将下跌,可以再卖出股票或观望,这是MACD指标死亡交叉的另一种形式。

参考:https://www.sohu.com/a/663842634_120762329

在这里插入图片描述

在这里插入图片描述

2.3 MACD指标与价格的背离

如果MACD在运行的过程中和商品价格的运行节奏出现了不完全同步的情况,那么这有可能是比较重要的转向提示信号。

  • 顶背离:经常出现在上涨趋势中,当商品价格高点不断变高,而同时MACD指标的高点却有所降低,那就表示多头力量有所减弱,价格可能会发生回调。

请添加图片描述

  • 底背离:在价格下跌的过程中,当商品价格的低点比前一次低点要低,而同时MACD指标的低点比前一次的低点要高,说明空头力量减弱,那么价格可能会出现反弹或反转。

在这里插入图片描述

3. backtrader 代码与分析

import backtrader as bt
import os, sys
file_path = os.path.dirname(os.path.realpath(__file__)) 
sys.path.append(file_path + '/../')class TestStrategy(bt.Strategy):params = (('macd1', 12), ('macd2', 26), ('macdsig', 9), ('lookback_period', 30))def __init__(self):self.macd = bt.indicators.MACD(self.data.close, period_me1=self.p.macd1, period_me2=self.p.macd2, period_signal=self.p.macdsig)self.crossup = bt.indicators.CrossUp(self.macd.macd, self.macd.signal)self.crossdown = bt.indicators.CrossDown(self.macd.macd, self.macd.signal)self.lookback_period = self.p.lookback_period # 回溯周期# 保存历史峰值和谷值self.peak_price_list = []self.peak_macd_list = []def find_largest_and_second(self,price,macd,reverse=True):if len(price) < self.lookback_period:return None, None, None, None  # 当列表中的元素不足两个时返回None# 复制并排序sorted_list = sorted(price, reverse=reverse)# 找到第一大的数largest_price = sorted_list[0]# 在原始列表中找到该数的索引largest_macd = macd[price.index(largest_price)]# 找到第二大的数second_largest_price = sorted_list[1]# 在原始列表中找到该数的索引second_largest_macd = macd[price.index(second_largest_price)]return largest_price, largest_macd,second_largest_price,second_largest_macddef next(self):has_position = self.position.size > 0.01has_cash = self.broker.get_cash()/self.data[0] > 0.01dif = self.macd.macd[0]dea = self.macd.signal[0]dif_prev = self.macd.macd[-1]dea_prev = self.macd.signal[-1]###################### 2.1 章节 多头空头信号####################### 多头行情判断if dif > 0 and dea > 0 and dif > dif_prev and dea > dea_prev:if has_cash:self.buy(size=0.01)# 空头行情判断elif dif < 0 and dea < 0 and dif < dif_prev and dea < dea_prev:if has_position:self.sell(size=0.01)# 退潮阶段判断elif dif > 0 and dea > 0 and dif < dif_prev and dea < dea_prev:if has_position:self.sell(size=0.01)# 行情即将启动判断elif dif < 0 and dea < 0 and dif > dif_prev and dea > dea_prev:if has_cash:self.buy(size=0.01)###################### 2.2 章节 黄金交叉和死亡交叉####################### 黄金交叉if self.crossup[0]:if dif > 0 and dea > 0:# 都在0轴之上时,市场处于强势if has_cash:self.buy(size=0.01)elif dif < 0 and dea < 0:# 都在0轴之下时,市场即将转强if has_cash:self.buy(size=0.03)# 死亡交叉elif self.crossdown[0]:if dif > 0 and dea > 0:# 都在0轴之上时,市场即将由强势转为弱势if has_position:self.sell(size=0.01)elif dif < 0 and dea < 0:# 都在0轴之下时,市场将再次进入极度弱市if has_position:self.sell(size=0.03)###################### 2.3 章节 顶背离和底背离######################current_price = self.data.close[0]self.peak_price_list.append(current_price)if len(self.peak_price_list) > self.lookback_period:self.peak_price_list.pop(0)self.peak_macd_list.append(dif)if len(self.peak_macd_list) > self.lookback_period:self.peak_macd_list.pop(0)# 更新峰值peak_price,peak_macd,pre_peak_price,pre_peak_macd = self.find_largest_and_second(self.peak_price_list,self.peak_macd_list,True)# 更新谷值valley_price,valley_macd,pre_valley_price,pre_valley_macd = self.find_largest_and_second(self.peak_price_list,self.peak_macd_list,False)if valley_price is None or valley_macd is None:returnif peak_price is None or peak_macd is None:return# 顶背离判断if current_price > pre_peak_price and dif < pre_peak_macd and current_price ==peak_price:# 执行交易逻辑if has_position:self.sell(size=0.01)# 底背离判断if current_price < pre_valley_price and dif > pre_valley_macd and current_price == valley_price:# 执行交易逻辑if has_cash:self.buy(size=0.01)

3.1 多头空头信号

Final Portfolio Value: 26810.11
Sharpe Ratio: OrderedDict([(‘sharperatio’, 0.7067442967214198)])

在这里插入图片描述

在这里插入图片描述

从上图来看该算法没有跑赢大盘,这种情况有比较明显的追涨卖跌,如果macd的参数不理想会导致大量且频繁的买入卖出。这种只能作为一种辅助的评价指标

  • 信号数量:频繁
  • 信号质量:底下
  • 需要信息:对零线比较敏感,不太适合长期持有操作。快线和慢线不太适合过长,否则有滞后性,例如将参数改为(‘macd1’, 30), (‘macd2’, 60), (‘macdsig’, 16),则结果只有12872.18

3.2 金叉死叉操作

Final Portfolio Value: 18197.17
Sharpe Ratio: OrderedDict([(‘sharperatio’, 0.5990693129804268)])

在这里插入图片描述

从上图来看该算法没有跑赢大盘,这类型号交易频率还是比较慢的,有比较明显的高点卖出,但是如果持续下跌,也需要注意快线和慢线参数信息,会出现骗信号的情况。

  • 信号数量:中等
  • 信号质量:较优
  • 需要信息:适合长期持有操作。快线和慢线需要适中,太长有滞后性,太短会过多交易。将参数改为(‘macd1’, 30), (‘macd2’, 60), (‘macdsig’, 16),则结果只有14011.33

在这里插入图片描述

在这里插入图片描述

3.3 背离信号

Final Portfolio Value: 12537.66
Sharpe Ratio: OrderedDict([(‘sharperatio’, 0.3212700568278445)])

在这里插入图片描述

从上图来看该算法没有跑赢大盘,这类交易信号一般来说还是比较尴尬的,周期越长越难触发,这类算法感觉比较吃周期的,这类算法延续性感觉会更强一点,因为大币种会更符合规律,比如选取100*24天作为一个周期

  • 信号数量:少
  • 信号质量:较优
  • 需要信息:周期,周期越长越难背离

在这里插入图片描述

目前改综合测试,macd的情况跑赢大盘,这个指标还是非常值得关注的

在这里插入图片描述

MACD指标,由快线、慢线、0轴线和红绿柱状线组成,是股票交易中的重要工具。它的使用包括观察快线DIF与慢线DEA的数值和位置,以及它们的交叉情况。MACD指标与价格的背离也是重要的转向提示信号。在Python中,可以通过backtrader库编写策略来利用MACD指标进行交易。测试结果显示,MACD指标在多头空头信号、金叉死叉操作和背离信号等方面都有一定的效果,但也存在一定的局限性,如信号数量、信号质量和需要的信息等。

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

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

相关文章

基于Java SSM框架实现在线课程教育资源考试管理系统项目【项目源码+论文说明】

基于java的SSM框架实现在线课程教育资源考试管理系统演示 摘要 随着社会的发展&#xff0c;社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线教育资源管理系统&#xff0c;主要的模块包括管理员&#xff1b;个人中心、学生…

html5实现最震撼公司年会抽奖(源码)

文章目录 1.设计来源1.1 主界面1.2 抽奖效果1.3 中奖效果 2.效果和源码配置2.1 动态效果2.2 员工信息配置2.3 奖品信息配置2.4 抽奖音效配置2.5 源代码 源码下载 作者&#xff1a;xcLeigh 文章地址&#xff1a;https://blog.csdn.net/weixin_43151418/article/details/12864099…

Kali字典生成工具crunch使用教程

Kali字典生成工具crunch使用教程 1.工具概述2.参数解释3.使用实例1.工具概述 crunch是一个kali自带生成字典的一个工具,一种创建密码字典工具,该字典通常用于暴力破解。使用crunch工具生成的密码可以发送到终端、文件或另一个程序 安装: apt install crunch验证安装: c…

华为数通方向HCIP-DataCom H12-831题库(多选题:241-249)

第241题 (NEW) 以下哪些操作可能会影响客户网络的正常运行? A、从设备上下载日志 B、软件升级 C、路由协议配置变更 D、debug核心交换机上转发的所有IP报文 答案:ABCD 解析: 第242题 对于防火墙的默认安全区 Trust 和 Untrust 的说法,正确的有 A、从 Trust 区域访问 Untr…

【NI-RIO入门】理解Windows、Real Time与FPGA之间数据通信的原理

于NI kb摘录 1.概述 对于NI RIO系列设备&#xff08;CompactRIO、sbRIO、myRIO等&#xff09;进行编程时&#xff0c;需要注意有三个不同的组件。 人机界面 (HMI) 。有时称为“主机”&#xff0c;为用户提供图形用户界面&#xff08;GUI&#xff09;&#xff0c;用于监控系统…

Linux常用基本命令(三)

一、显示命令 1. cat 通式&#xff1a;cat 选项 文件名 只能看普通的文本文件 缺点&#xff1a;如果内容过多会显示不全 选项效果-n显示行号包括空行-b跳过空白行编号-s讲所有的连续的多个空行替换为一个空行&#xff08;压缩成一个空行&#xff09;-A显示隐藏字符 三个标准文件…

深度剖析:Golang中结构体方法的高级应用

深度剖析&#xff1a;Golang中结构体方法的高级应用 引言结构体方法的基础回顾结构体的定义和用法方法的定义和绑定基本语法和用法 高级特性与应用封装、继承和多态方法集与接口的关系结构体方法的匿名字段和嵌入结构体 性能优化与最佳实践接收器类型的选择&#xff1a;指针还是…

「绝世唐门」玄子被百万年魂技吓坏,七怪混合打响,斗魂大赛预热

Hello,小伙伴们&#xff0c;我是拾荒君。 《斗罗大陆Ⅱ绝世唐门》第28集超前爆料&#xff01;这一集中&#xff0c;选拔赛考核落下帷幕&#xff0c;为了选拔出史莱克七怪的预备队&#xff0c;即替补队员&#xff0c;玄子导师特别关注了霍雨浩和王冬的表现。他心中存有疑问&…

HTML标签(下)

一、表格标签 1.1表格的主要作用 主要用于显示、展示数据 1.2表格的基本语法 <td>单元格中的文字</td> 如果是表头单元格的话&#xff0c;eg:姓名&#xff0c;年龄<th> 姓名</th>&#xff08;th是table head&#xff09;; 作用&#xff1a;表头会…

C语言中二维数组的存储和二进制数在底层的排列顺序

1 二维数组变量的存储 二维数组在内存中是按照先行后列的顺序存储的&#xff0c;即先存储第一行的所有元素&#xff0c;再存储第二行的所有元素&#xff0c;以此类推。每个元素在内存中占据一定的字节数&#xff0c;这个字节数由该元素的类型决定。例如&#xff0c;int类型的元…

MATLAB - 机器人逆运动学设计器(Inverse Kinematics Designer APP)

系列文章目录 前言 一、简介 通过逆运动学设计器&#xff0c;您可以为 URDF 机器人模型设计逆运动学求解器。您可以调整逆运动学求解器并添加约束条件&#xff0c;以实现所需的行为。使用该程序&#xff0c;您可以 从 URDF 文件或 MATLAB 工作区导入 URDF 机器人模型。调整逆…

nodejs+vue+ElementUi资源互助共享平台的设计

后台&#xff1a;管理员功能有个人中心&#xff0c;用户管理&#xff0c;卖家管理&#xff0c;咨询师管理&#xff0c;萌宝信息管理&#xff0c;幼儿知识管理&#xff0c;保姆推荐管理&#xff0c;音频资源管理&#xff0c;二手商品管理&#xff0c;商品分类管理&#xff0c;资…