经常有朋友问我一些MACD这个技术指标相关的问题:

本文就全面的讲解一下MACD指标,用Python和全量的历史数据,看看它的表现到底如何。

01

什么是MACD

不管你是交易A股、美股、期货还是数字货币,大部分的行情软件都会将MACD指标默认显示在指标的前几位

例如下图,在常见的K线图下方有两条曲线和一些红或绿色的柱子,这个组合就是MACD指标

MACD指标

根据MACD指标的定义,它主要由DIFFDEAMACD三部分组成:

DIFF是下图中的橙线,它是对K线收盘价进行一系列的计算后得到:

DEA是下图中的蓝线,它是在DIFF的基础上进一步计算得出:

橙线(DIFF)减去蓝线(DEA)后,再乘以2就能得到MACD指标了,也就是下图中红色和绿色的柱子

柱子的长度就是MACD绝对值的大小,如果MACD大于0,则为红色,如果MACD小于0,则为绿色

我们做量化交易的,不仅要在图上看到指标,还要将其计算出来,这样才方便之后得到相应的买点、卖点。

知道定义后要计算MACD并不复杂,几行Python代码就能搞定:

其中计算MACD仅用了最后5行代码,前面3行主要是导入数据及计算复权价。人生苦短,我用Python。

当然,头发苦短,也用Python

有了这个代码,我们读取某股票的K线数据,就能得到其每根K线对应的MACD指标:

数据输入

数据输出

想要以上的代码和数据亲自尝试,可以加我xingbuxing0809获取。

02

如何使用MACD

计算出MACD指标之后,我们应该如何使用呢?

介绍一个MACD最常见的用法--“金叉和死叉”

仔细观察MACD的图形,我们会发现,橙线(DIFF)蓝线(DEA)纠缠在一起,互相不断交叉,这些交叉点就可以作为买入和卖出的信号

橙线(DIFF)和蓝线(DEA)相互交叉

橙线(DIFF)向上穿过蓝线(DEA)时,被称为“黄金交叉”,简称“金叉”,这是一个买入信号。

例如下图发生金叉后,确实一路上涨。

橙线(DIFF)向下穿过蓝线(DEA时,被称为“死亡交叉”,简称“死叉”,这是一个卖出信号。

例如下图发生死叉后,股价也开始下跌。

金叉和死叉必定是相邻交替出现,最常见基于MACD的择时策略就是选择在金叉时买入、死叉时卖出

沪深300MACD择时表现

上图是沪深300某段时间的K线图,红色部分表示金叉买入持有指数的阶段,绿色部分表示死叉卖出空仓的阶段。

从图中看,红色部分确实主要在上涨,绿色部分也确实在下跌

这样看来,MACD的择时能力,让人不禁打出666。

看到这是不是有点心动了,甚至准备试着操作,从此走向人生巅峰?

先别着急。

新华书店正面显眼处,摆放着"炒股大师"的书,通常也会告诉你某个神奇的指标

然后再精挑细选出几张行情图片,展示这个指标的买点、卖点是多么的神奇,让你对这个指标深信不疑。

但是对于做量化投资的我们,几张图并不能让人信服。万一这并不是大概率事件,只是巧合呢?

想要知道MACD金叉、死叉是否有效,不是只看几张图就行的。

而是要把一只股票历史上所有的金叉死叉都找出来,看看它们之后的表现到底怎么样。这样才有说服力。

02

MACD金叉死叉表现

要统计一只股票历史上所有金叉、死叉的表现,人工对着行情软件去数肯定是不行的,此时就需要使用Python。

我们把之前计算MACD的Python代码稍作扩展:

统计MACD金叉死叉的代码

通过上面的代码,就可以找到一只股票历史上所有的金叉、死叉。并且还计算了信号发生1、5、20个交易日后股票的涨跌幅:

代码统计结果

有了这个结果就能全面的对金叉、死叉进行评估,如果你想亲自试试,可以加我xingbuxing0809获取代码和数据。

1  浦发银行MACD表现

先随便挑一只股票,上交所代码序号排列第一的浦发银行(sh60000),运行下程序看看MACD在它上面的表现:

数据显示,浦发银行从1999年上市至今一共出现过194次金叉,在金叉之后的1天、5天、20天出现上涨的比例分别是:50.51%、48.45%、51.55%

这...结果有点出乎意料啊。出现金叉后,上涨的概率都在50%左右...

和抛硬币没什么差别

虽然本来也不指望金叉后100%上涨,但概率怎么说也要有60%吧?

要不然干脆来个30%也行,这样当反指用就是70%的胜率。50%是最尴尬的概率了,反过来还是50%

而且194次金叉之后1、5、20个交易日的涨幅中位数分别是0.08%、-0.09%、0.39%。

只有20日的涨跌幅中值表现稍好,但算一下这个年化收益也就和余额宝差不多。

再来看死叉。出现死叉后,下跌的概率也基本上是50%左右,涨跌幅中值也接近0%,也是一个没有任何意义的指标

以上只是简单的统计,我们再看看严格的按照金叉买入、死叉卖出浦发银行,最终的资金曲线会怎么样呢?

我们采用大部分行情软件MACD的默认参数(12,26,9),设置手续费和印花税,进行回测,结果如下:

橙线是浦发银行的原始表现,蓝线是MACD择时策略在浦发银行上的表现。

采用MACD择时买卖浦发银行,年化收益率只有3.5%,历时13年资产只涨了61%,而浦发银行本身的股价都翻了1.9倍

可以看到使用MACD择时浦发银行的效果很差,还不如直接买入持有

没想到在各大行情软件都处于C位的人气指标,表现居然这么差?

是不是浦发银行刚好不适合MACD呢?

2  贵州茅台MACD表现

那我们换个股票,来看看MACD在贵州茅台上的表现。

把之前的Python程序的输入数据改成贵州茅台,直接运行即可得出结论:

由图中可见,在发生金叉之后,茅台的上涨概率比浦发银行高了不少,并且涨跌幅中值也有所提升,很不错。

但死叉之后的表现就不尽如人意了。20日后下跌的概率只有43%,中位数上涨0.92%。

这...明明是个看涨信号啊

如果对茅台严格的按照金叉买入、死叉卖出进行操作,表现又如何呢?

我们同样采用默认的MACD参数得到如下结果:

如果从2007年投入1元,到现在已经翻了8倍了,年化率高达16.33%,看起来好像很不错。

但如果我们和茅台本身的价格对比一下:

上图中的蓝线是MACD择时的表现,橙线是茅台本身的表现,这么一对比,MACD择时的表现就有点可笑了

茅台本身的年化收益率高达28.69%,共翻了32.5倍,但是经过MACD择时的一番神操作,只翻了8倍

这大概就是传说中的一顿操作猛如虎,一看收益2.5%吧。

MACD在茅台上的表现依旧不好,难道是MACD恰好在这两只股票上都不适用?

3  所有股票MACD表现

这次我们玩得狠一点,统计一下A股所有股票的MACD表现,看看结果到底怎么样。

将之前的Python代码稍作修改就能统计所有股票的MACD表现:

可以加我xingbuxing0809获取代码和数据

我们统计了1990年至今大约5000个交易日,A股市场上4000多只股票历史上所有的金叉和死叉,共计约80万次信号,得到如下结果:

不管是金叉后上涨的概率,还是死叉后下跌的概率,都集中在50%左右,涨跌幅中值也都趋近于0%。

金叉、死叉并不能预测未来的涨跌。

所以之后大家如果遇到所谓神器的指标,千万不要人云亦云,一定要亲自用代码和数据去验证下

不用代码验证,就只能投入真金白银去试错了

4  MACD的其他用法

当然有的朋友可能会说MACD还有很多其他用法。比如著名的顶背离、底背离。

顶背离

底背离

顶背离指价格峰值不断创新高,但是MACD峰值却一路下跌,这是一个卖出信号。

底背离刚好相反,价格峰值一路下跌MACD峰值却不断新高,这是一个买入信号。

背离的用法我也验证过,结论暂时保密。对此感兴趣的可以留言,多的话之后可以再单独讲讲。

MACD很多其他的用法,想测试的也可以在评论区留言,之后可能可以用程序验证一下它是否有效。

03

降维打击

那MACD指标真的已经不能用了吗?

熟悉我的朋友知道我常常会说一句话:

与其花时间提高牌技,我更愿意花时间寻找对手更弱的牌局。

这句话的意思是,不要去高手扎堆的地方,要主动去找一些竞争对手更弱的环境。

我给大家举一个交易上的例子。

华尔街日报统计的数据显示,在美国90%以上的主动基金都没能跑赢大盘指数。美国金融市场发达,基金经理骚操作也多,但还是败给了指数基金。

不过这只是美国的情况,中国可不太一样。

我之前发过一条朋友圈,里面有详细是数据指出,A股的基金经理是可以显著跑赢大盘指数的。

那是A股的基金经理更厉害吗?显然目前还不是。

原因是美股市场更成熟,高手如云,是一个更高端的牌局

而很多人抱怨A股混乱、不成熟、散户多,但这其实是好事。这意味着市场上有更多低水平的投资者,是一个对手更弱的牌局。

A股散户持仓占比

其实不光是交易,在平时的工作和生活中,换一个对手更弱的牌局会让你更加轻松。

这句话放在MACD指标上也一样。

比特币历史行情图

上图是比特币的历史行情图,以比特币为代表的数字货币市场,其实是比A股更不成熟的市场,是一个对手更更弱的牌局

你在比特币市场的对手可能是她们

在这个市场上,MACD指标就突然显得有效了起来。我们使用比特币2017年9月至今的4小时K线数据,用Python统计其金叉死叉后的表现:

出现金叉后,上涨的概率涨跌幅的中值比在A股的表现都要

再来看严格按照MACD金叉、死叉进行买卖的表现,依旧使用在股市默认的参数,扣除手续费,结果如下:

橙线是比特币原始的价格,蓝色的线是MACD择时在比特币上的表现。

原始的比特币价格,从2017年9月至今年化收益率是40.07%,而MACD择时的年化收益率为57.79%,提高17个百分点。

在风险方面,原始比特币价格的最大回撤高达84.09%,而MACD择时后最大回撤显著降低为36.97%

这意味着MACD应用在比特币上可以显著地提高收益并且降低风险,效果显著。

04

总结

数字货币还是一个相对原始的市场,股市里很多已经被无效的策略,在数字货币市场仍然有用。

我2017年刚进入数字货币市场,当时行情火热,来不及细细开发策略,就是把原来股票、期货市场的策略简单的搬过来,就有很好的收益

再次印证了那句话:“与其提高牌技,我更愿意花时间寻找对手更弱的牌局。

本文中用到的数据和代码都已经整理好了,有需要的可以加我xingbuxing0809获取。

本期代码

本期数据

听说MACD是技术指标之王?我们用Python来验验成色相关推荐

  1. python股票技术指标计算_通达信指标python都实现,python计算macd等技术指标,有什么包吗...

    Q1:python计算macd等技术指标,有什么包吗 有的,包的链接如下: https://github.com/lovelylain/pyctp/tree/master/example/ctp/ta ...

  2. python股票技术指标计算_使用 Ta-lib 计算 MACD 等技术指标

    最近很多朋友使用老虎的开放API时, 都会咨询我们获取 MACD.KDJ 等技术指标的方法. 开放API没有提供计算好的技术指标数据, 因为这类指标的计算方法比较简单. 这里做一个简单的示例,供大家参 ...

  3. 技术指标之王MACD搞定白银走势预测

    MACD作为白银投资市场上最经典的技术分析指标,用的人非常之多.由于市场上时常有人说,越多人用的技术指标,就越会失效,被大机构或者做市商来做反向操作,因此,很多人对于用MACD进行白银走势预测嗤之以鼻 ...

  4. 搭建系统|别只盯MA、KDJ、MACD这些技术指标,择时策略也能叠加基本面指标!

    前言 "搭建系统"专栏系列一直按以下的进程再不断地迭代开发工具: 我一直强调要搭建属于适合自己的股票量化交易系统,而不是照搬着拿别人的来用呢.也就是说我们要掌握搭建的方法,不断去调 ...

  5. python 模型交叉验证法_python – 交叉验证和模型选择

    我正在使用skilearn进行SVM培训.我正在使用交叉验证来评估估算器并避免过度拟合模型. 我将数据分成两部分.训练数据和测试数据.这是代码: import numpy as np from skl ...

  6. 【交易回顾】没用Python做量化回测,少赚100w | 股指期货妙用案例

    最近发现自己做了一件很傻逼的事情. 是年初做的一笔投资.当时对这笔交易思考的不够全面,没用历史数据做详细的回测. 导致现在让我至少少赚了100万. 这种事情大家肯定都喜闻乐见,比如之前一篇文章< ...

  7. Python绘制MACD指标图

    写在前面 MACD简介 用到的主要Python库 MACD详细介绍 Python代码 总结 参考文献 推荐阅读 2020.8.1更新 写在前面 最近正在研究算法交易,看了几本英文原版书.本文总结自Pa ...

  8. Python量化投资——股票择时到底能否赚钱?TA-Lib 33种技术指标有效性横向大评比

    TA-Lib中33种技术指标回测研究 `Python`量化投资--`TA-Lib`中33种股票择时技术指标的有效性研究 为什么要做这个评测 技术指标清单 评测方法 评测工具 测试方法及评价指标 期待你 ...

  9. 国内股票MACD指标计算,Python实现MACD指标计算,Talib实现MACD指标计算

    0 引言 MACD指标是最为常见的指标之一,股票每日的K线数据通过Tushare.Baostock等平台能够获取到个股及指数的Open.High.Low.Close.Volume等数据,MACD等技术 ...

  10. 商品期货策略 之 Python 精简多品种 MACD 趋势策略框架(注释版)

    Python 精简多品种 MACD 趋势策略框架(注释版) Python超级精简的多品种MACD趋势策略框架, 代码超级精简, 注释超级详细啰嗦. >_<! 需要引用 python版CTP ...

最新文章

  1. 【转】Android source build/envsetup.sh学习笔记
  2. leetcode 41. First Missing Positive
  3. 0 win10重装partition_修复Win10系统无法安装系统保留分区方法
  4. Git(2):安装和使用
  5. MySQL性能优化之:索引下推
  6. 洛谷 P1097 统计数字
  7. 如今被小乙两弩箭结 水浒传
  8. 【Unity面板属性扫盲】导入模型后属性设置之——Avatar Mapping 选项卡
  9. LINUX下PHP扩展开发:第一个C扩展
  10. 电脑QQ正常上网但浏览器无法上网解决办法
  11. NVIDIA NCCL 源码学习(五)- 路径计算
  12. java菜单管理模块_后台管理系统-菜单管理模块
  13. 使用openpyxl进行多个excel数据合并
  14. java高级软件工程师面试_高级软件工程师的新面试问题
  15. BugkuCTF misc 旋转跳跃
  16. cli sti cld std
  17. 为什么网络钓鱼攻击仍然有利可图----以及如何阻止它
  18. python爬取整个网站的广告敏感词_Python实现敏感词过滤的4种方法
  19. 动态canvas 相册简单效果展示
  20. ProxyCap +ccproxy 组合使用Socks5 实现代理服务器

热门文章

  1. 软件易用性测试怎么做?
  2. labwindows panel设置透明度方法
  3. Java随意输入字符串,如果含有$将该字符及之前一个字符的去掉
  4. Linux常用命令100个用法
  5. 怎么用表格做出html网页,用表格制作网页
  6. 美联储印钞,中国物价为何上涨?
  7. 程序猿 C语言入门 颈椎,【计时器小工具】70行代码让你远离颈椎病,致所有的程序猿们...
  8. 如何写好一个综述,以一个综述为例
  9. 《游戏系统设计三》游戏服务器线上出bug,怎么办?急,在线等!热更新
  10. 如何将文件或文件夹加入杀毒软件白名单步骤