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

Connor 欧易app 2022-10-21 243 0

作者 | 邢不行、助教林奇

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

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

01

什么是MACD

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

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

MACD指标

展开全文

根据MACD指标的定义,它主要由 DIFF、 DEA和 MACD三部分组成:

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

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

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

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

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

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

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

当然,头发苦短,也用Python

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

数据输入

数据输出

想要以上的代码和数据亲自尝试,可以扫描下方二维码或加我 微信xbx783,都是可以直接发给你的。

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个交易日后股票的涨跌幅:

代码统计结果

有了这个结果就能全面的对金叉、死叉进行评估,如果你想亲自试试,可以扫描下方二维码或加我 微信xbx783获取代码和数据,都是可以直接发给你的。

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表现:

如果你对这个数据和代码感兴趣的话,可以扫描下方二维码或加我 微信xbx783,都是可以直接发给你的。

我们统计了 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年刚进入数字货币市场,当时行情火热,来不及细细开发策略,就是把原来股票、期货市场的策略简单的搬过来, 就有很好的收益。

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

本文中用到的数据和代码都已经整理好了,有需要的可以扫描下方二维码或加我的 微信xbx783,都是可以直接发给你的。

05

后记

文章的最后,和大家分享一点 量化投资的心得。

很多人问我小白如何开始 学习量化投资,有什么可以 书单推荐。

我的建议是 千万不要直接找本书来看。

你找本 编程书看,那跟着敲完“Hello World”就结束了;你找本 数学书看,那看到第七页的公式就睡着了。

更好的学习方式是做实际的项目,在 实践中学习量化策略。

研报就是很好的量化实践项目。

一篇研报就是一个策略,作者都是年薪百万的高学历券商分析师,你要做的就是 读懂策略研报,并用代码实现。

在此期间什么不会学什么,哪里不会点哪里,抱着 解决问题的心态去学习,事半功倍。

熟读唐诗三百首,不会作诗也会吟。

那么哪里可以 获取研报呢?

你可以扫描下方二维码或加我的 微信xbx783,我这里有分门别类 几万份研报,还会 实时更新。

我会区分难度, 精选之后发给你。

加我 微信xbx783后,也可以 交流量化投资相关问题,我比较忙,回复的比较慢,但是看到的都会回复。

聊的开心,聊得有缘,很多量化的数据、资料都是可以 送给你的。

也可以翻翻我 朋友圈的内容,很多 量化干货。一些不会公开发的内容,都会在朋友圈说。

联系作者

评论