量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)

引言: 邢不行的系列帖子“量化小讲堂”,通过实际案例教初学者使用python进行量化投资,了解行业研究方向,希望能对大家有帮助
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?

量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
如果要说哪个技术指标知道的人最多,那估计非MACD莫属了。
因为不管你是炒A股、美股,期货期权还是炒币,任何行情软件中它都会默认出现在第一个位置。就好像是全世界通用的一样。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?

那这个指标真的对投资有很大的帮助吗?我之前有篇文章就对此进行了验证。
听说MACD是技术指标之王?我们用Python来验验成色
在这篇文章中我从MACD最经典的金叉、死叉用法入手,找出了80万次相关数据来验证其有效性。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
金叉、死叉
如上图中点1处MACD指标的DIFF线(黑线)自下向上穿过DEA线(蓝线),指标认为此处交叉是黄金买点,称为金叉。
反之如点2处DIFF线自上向下穿过DEA线,则认为应当坚决卖出,称为死叉。
那将金叉、死叉作为买卖点操作能赚钱吗?我们用某茅股票来测试下。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
某茅股票回测
上图中黄线代表的某茅股票本身,07年至今涨了32倍,按照金叉死叉规则买卖得到的蓝线却只涨了7倍。
这...还不如买入持有不动好啊...
为了避免特例,我干脆找来了全部A股4000多只股票2007年至今所有数据,得到了80万次金叉死叉,并统计了它们之后N日的股价表现。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
如上图所示,金叉/死叉发生后股票的上涨/下跌概率基本在50%左右,这个概率和我抛80万次硬币没有本质上的区别。
由此可见,MACD的金叉死叉用法确实没有想象中那么有效。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
更详细的内容你可以看我这期视频。相关数据和代码,加我微信xbx3642免费发你一份。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片

点击链接观看视频

01 MACD顶底背离
这期视频后有很多同学留言说,MACD除了金叉死叉外还有顶底背离的用法,希望能测试一下。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
其实相关研究我在大学时就自己摸索过,这次就来专门来测试下这个高人气方法。
这里先大概介绍一下顶底背离的定义。
1.顶底背离定义
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
顶背离
如图所示,当股价呈上升趋势(图中红线),MACD指标却呈下降趋势时(图中绿线),就构成了顶背离。
这被认为是见顶的标志,股价后续会下跌(图中橙线)。
同样的,底背离就是股价呈下降趋势时MACD指标呈上升趋势。这被认为是底部信号,股价倾向于上涨。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
底背离
需要强调的是,市场上没有统一的标准去定义顶底背离,这里只是选取了最常用定义来讲解。
2.顶底背离案例
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
A股顶底背离案例
并且在其它市场也能找到不少成功案例。如下图中比特币2021年3、4月价格不断创新高,对应的MACD指标却不断下降。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
BTC顶背离
这是连续双重顶背离现象,属于强烈的见顶信号。之后价格也确实从高位的6.4万(美元)最多跌到了3万以下。
那么顶底背离真的有案例中那么无往不利吗?
我们做量化投资的不能只看个例,而是要通过编程从历史数据里面去找出全部的顶底背离,看看在概率上到底是否有优势。

02 量化定义 想要实现量化顶底背离,就要把顶底背离的模糊定义转化为明确的计算机语言,这一步也是量化投资的关键。
1.量化顶背离
【量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)】我们逐个看定义,股价不断创新高该如何量化?
找到相邻的三根K线作为一个组合,只要满足收盘价高于前后两个交易日即视为高点,如下图:
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
在下方K线图中标出所有高点。但发现被选中的点数量太多了,不符合我们的直观认知。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
初步筛选
因此进一步筛选:高点需同时高于过去30日任何一天的收盘价,得到下图中4个点,这4个点就和我们主观认为的高点比较接近。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
进一步筛选高点
我们再加上一个条件:选择出的高点还需大于前一高点。图中4点都符合要求。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
符合定义的高点
最后的条件是:K线创新高的同时,对应的DIFF值小于前一个高点。
这样我们就成功通过量化定义找出了下图中顶背离位置,股价也确实开始下跌。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
量化定义下产生的顶背离
经过上述步骤就能把顶背离的经验描述转化为精确的量化规则:
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
规则总结
通过这个规则任何人都可以毫不模糊地找出顶背离的点,没有半点的模棱两可、语焉不详。
2.量化底背离
底背离的定义就是完全反过来。
先量化创新低的概念,即收盘价低于前后两根K线。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
低点:收盘价低于前后两个交易日
找出所有低点后从中筛选出创30日新低且小于前一低点的点,其对应的DIFF值大于前一低点,形成底背离且后续股价上升,如下图所示。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
量化底背离
3.多种量化定义
以上就是本文对于MACD顶底背离的量化定义。
但要强调的是,量化定义本就是见仁见智的,不同的人会有不同的结论,没有标准答案。
比如下图是来自于某券商研报中的另一种顶底背离定义。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
某券商研报:MACD顶底背离定义
你感兴趣的话可以看下这个规则,也可以加我微信xbx3642,我把研报原文发你。
同时如果你有更好的定义方法也欢迎与我交流或在评论区留言。

03 指数回测 有了精准的量化定义后,就可以据此找出历史上所有顶底背离情况,用大数据去证明它是否有效。
先来看顶底背离在沪深300指数上的实际效果。
1.数据获取与加工
针对指数进行回测,要先获取指数数据。
登录我们的量化小讲堂网站,找到主要指数历史日线数据。联系网站客服就可以免费获取一份。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
www.quantclass.cn/data/stock
得到的数据如下图所示。每一行就是指数每天的开、高、低、收数据。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
原始数据
用Python来计算MACD指标很简单,几行代码就可以搞定。
这个代码你需要的话可以对着图抄,也可以加我微信xbx3642获取。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
计算后的结果包含了DIF、DEA及MACD每日的值:
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
这时就能用Python找出所有的顶底背离了。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
需要代码可以加我微信xbx3642获取
输出结果如下图所示:
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
顶底背离及其后续表现
除顶底背离出现时间外,也计算了发生顶底背离后1天/5天/20天的涨跌幅。
2.指数回测
通过顶底背离位置得到相应开仓、平仓信号。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
41次顶背离,24次底背离
我们在出现底背离时就全仓买入,顶背离时则全部卖出。过滤掉中间连续的重复信号。
按策略从07年至今针对沪深300指数进行操作,回测结果如下:
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
顶底背离在沪深300上表现一般
黄色曲线是沪深300指数从07年至今的净值表现,翻了2倍不到。
蓝色曲线是顶底背离策略净值,整体下跌且大部分时间都处于空仓状态(横线部分为未持仓阶段)。
由于顶底背离信号出现条件较为严苛,如直接机械的按信号进行交易很容易错过许多大行情,所以使用类似的资金曲线方法判断指标效果并不科学。
3.指数未来表现
下面换个方法,从发生顶底背离之后N天涨跌幅角度来看MACD指标是否有效。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
如上图中在发生顶背离后,我们统计其未来1天、5天、20天的涨跌幅。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
沪深300指数共出现24次底背离、41次顶背离,其未来1天、5天、20天涨跌幅如下:
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
沪深300顶底背离未来表现
24次底背离发生5日后有62%上涨概率且收益中值显著为正。1日、20日的上涨概率和收益中值都表现较差。
41次顶背离后不仅1日、20日都只有44%的概率下跌且收益中值与预期相反,5日后也只有51%的概率下跌,并不明显。
所以顶底背离在指数上并未达到相应的预期。
之后指数上再出现顶底背离时大家一定要谨慎。概率都是五五开而已,甚至可能是反向指标。比如下图的两个反例:
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
顶底背离反例

04 全部个股回测 下面再对所有的个股的全部历史数据进行测试。
回测前同样要准备全部A股开、高、低、收数据。
有Python编程基础的可以去网易财经这类财经网站爬取相关数据。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
网易财经:quotes.money.163.com/stock
也可以在我们量化小讲堂网站获取股票历史日线数据,包含了1990年至今全部4000多只A股的所有数据,并且每天实时更新。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
www.quantclass.cn/data/stock
可以加我微信xbx3642免费获取一份最新的数据。
搞定数据后,就可以用Python编程找出所有的顶底背离。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
需要代码可以加我微信xbx3642获取
在2007年至今共4000多只股票的数据样本范围内,共出现顶背离71473次,底背离55929次。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
全部A股顶底背离统计
7万多次底背离发生1天、5天、20天后的上涨概率普遍大于51%,收益中位数显著为正。
这已经是不错的概率了,特别是5日之后的54%。要知道在X场上,庄家针对你的优势就可以赚的盆满钵满了。
而5万多次顶背离后预期下跌但继续上涨的概率更大,收益中值也基本可以忽略不计。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?
由此可见,MACD的底背离有一定的参考价值,而顶背离的有效性就要打一个大大的问号了。
看到这大家对顶底背离是否有效也应该有了自己的看法。投资是概率游戏,以后看到顶底背离切记三思而后行。

05 尾声 相信一定会有人抬杠说本文中顶底背离的用法是不对的。
量化定义本就是见仁见智的。我更希望这篇文章抛砖引玉,对你将自身的投资经验转为量化定义有所帮助。
当然如果你有顶底背离更好的用法,你可以和我一样把它转换为明确的量化语言进行回测,也欢迎你加我微信xbx3642一起交流探讨。
量化小讲堂|用python找出12万次MACD顶底背离,胜率究竟有多少(附代码【邢不行】)
文章图片
?

    推荐阅读