一起学量化之macd指标

2024-02-14 07:50
文章标签 指标 量化 一起 macd

本文主要是介绍一起学量化之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指标在多头空头信号、金叉死叉操作和背离信号等方面都有一定的效果,但也存在一定的局限性,如信号数量、信号质量和需要的信息等。

这篇关于一起学量化之macd指标的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/707915

相关文章

跟我一起玩《linux内核设计的艺术》第1章(四)——from setup.s to head.s,这回一定让main滚出来!(已解封)

看到书上1.3的大标题,以为马上就要见着main了,其实啊,还早着呢,光看setup.s和head.s的代码量就知道,跟bootsect.s没有可比性,真多……这确实需要包括我在内的大家多一些耐心,相信见着main后,大家的信心和干劲会上一个台阶,加油! 既然上篇已经玩转gdb,接下来的讲解肯定是边调试边分析书上的内容,纯理论讲解其实我并不在行。 setup.s: 目标:争取把setup.

风控系统之指标回溯,历史数据重跑

个人博客:无奈何杨(wnhyang) 个人语雀:wnhyang 共享语雀:在线知识共享 Github:wnhyang - Overview 回顾 默认你已经看过之前那篇风控系统指标计算/特征提取分析与实现01,Redis、Zset、模版方法。 其中已经介绍了如何利用redis的zset结构完成指标计算,为了方便这篇文章的介绍,还是在正式开始本篇之前回顾一下。 时间窗口 zset

量化交易面试:什么是连贯风险度量?

连贯风险度量(Coherent Risk Measures)是金融风险管理中的一个重要概念,旨在提供一种合理且一致的方式来评估和量化风险。连贯风险度量的提出是为了克服传统风险度量方法(如VaR,风险价值)的一些局限性。以下是对连贯风险度量的详细解释: 基本概念: 连贯风险度量是指满足特定公理的风险度量方法,这些公理确保了风险评估的一致性和合理性。 这些公理包括:非负性、次可加性、同质性和单调

Matlab)实现HSV非等间隔量化--相似判断:欧式距离--输出图片-

%************************************************************************** %                                 图像检索——提取颜色特征 %HSV空间颜色直方图(将RGB空间转化为HS

通达信指标公式解析(2)多彩MACD指标

通达信指标公式解析(2)多彩MACD指标 公式效果展示(结合主力操盘线与生命线)公式代码截图公式代码解析1. **DIF 和 DEA 的定义:**2. **MACD 值的计算与颜色条形:**3. **DIF 和 DEA 之间的带状显示:**4. **柱状线的颜色区分:**5. **价格线的绘制:**6. **金叉与死叉的标注:**7. **不同强度柱状图的绘制:**8. **总结**关于建群

社交平台找旅游搭子一起旅行靠谱吗?答案是不要太爽!

哈喽小伙伴们,今天要跟大家分享一个超级棒的小程序——咕哇找搭子!作为一个热爱自由行的人,最头疼的就是找不到志同道合的小伙伴。但自从用了这个咕哇小程序后,一切都变得简单又充满乐趣啦!🎉 上个月,我计划去云南旅行,就试着在咕哇上发布了我的行程信息。没想到很快就收到了几位朋友的回应,其中一位叫小莲的朋友特别投缘。我们不仅目的地一样,就连兴趣爱好都出奇地相似,于是我们就决定一起出发啦!👭

基于yolov8的包装盒纸板破损缺陷测系统python源码+onnx模型+评估指标曲线+精美GUI界面

【算法介绍】 基于YOLOv8的包装盒纸板破损缺陷检测系统是一种高效、智能的解决方案,旨在提高生产线上包装盒纸板的质量检测效率与准确性。该系统利用YOLOv8这一前沿的深度学习模型,通过其强大的目标检测能力,能够实时识别并标记出包装盒纸板上的各种破损缺陷,如划痕、撕裂、孔洞等。 在系统中,首先需对包含破损缺陷的包装盒纸板图像进行数据采集和标注,形成训练数据集。随后,利用这些数据进行模型训练,使

期货赫兹量化-种群优化算法:进化策略,(μ,λ)-ES 和 (μ+λ)-ES

进化策略(Evolution Strategies, ES)是一种启发式算法,旨在模仿自然选择的过程来解决复杂的优化问题,尤其在没有显式解、或搜索空间巨大的情况下表现良好。基于自然界的进化原理,进化策略通过突变、选择等遗传算子迭代生成解,并最终寻求全局最优解。 进化策略通常基于两个核心机制:突变和选择。突变是对当前解进行随机扰动,而选择则用于保留适应度更高的个体。本文详细介绍了 (μ,λ)-ES

Flink实时计算指标对数方案

来源:大数据技术与架构读者投稿 作者:诸葛子房 点击右侧关注,大数据开发领域最强公众号! 点击右侧关注,暴走大数据! By  大数据技术与架构 作者简介: 诸葛子房 ,目前就职于一线互联网公司,从事大数据相关工作,了解互联网、大数据相关内容,一直在学习的路上 。

Flink实战(七十二):监控(四)自定义metrics相关指标(二)

项目实现代码举例: 添加自定义监控指标,以flink1.5的Kafka读取以及写入为例,添加rps、dirtyData等相关指标信息。�kafka读取和写入重点是先拿到RuntimeContex初始化指标,并传递给要使用的序列类,通过重写序列化和反序列化方法,来更新指标信息。 不加指标的kafka数据读取、写入Demo。 public class FlinkEtlTest {priv