社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

用Python编程量化技术指标MACD,找出全部12万次顶底背离,胜率究竟有多少?附代码

经管之家 • 2 年前 • 338 次点击  

作者 | 邢不行、密斯锌硒


如果要说哪个技术指标知道的人最多,那估计非MACD莫属了。


因为不管你是炒A股、美股,期货期权还是炒币,任何行情软件中它都会默认出现在第一个位置。就好像是全世界通用的一样。


MACD指标


那这个指标真的对投资有很大的帮助吗?我之前有篇文章就对此进行了验证。


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


在这篇文章中我从MACD最经典的金叉、死叉用法入手,找出了80万次相关数据来验证其有效性。




金叉、死叉


如上图中点1处MACD指标的DIFF线(黑线)自下向上穿过DEA线(蓝线),指标认为此处交叉是黄金买点,称为金叉


反之如点2处DIFF线自上向下穿过DEA线,则认为应当坚决卖出,称为死叉


那将金叉、死叉作为买卖点操作能赚钱吗?我们用某茅股票来测试下。


某茅股票回测


上图中黄线代表的某茅股票本身,07年至今涨了32倍,按照金叉死叉规则买卖得到的蓝线却只涨了7倍。



这...还不如买入持有不动好啊...


为了避免特例,我干脆找来了全部A股4000多只股票2007年至今所有数据,得到了80万次金叉死叉,并统计了它们之后N日的股价表现。



MACD在全A上的表现


如上图所示,金叉/死叉发生后股票的上涨/下跌概率基本在50%左右,这个概率和我抛80万次硬币没有本质上的区别。


由此可见,MACD的金叉死叉用法确实没有想象中那么有效。


更详细的内容你可以看我这期视频:

点击⬆️观看视频


需要相关数据和代码的话,可以扫描下方二维码或加我微信xbx783免费发你一份。




01

MACD顶底背离


这期视频后有很多同学留言说,MACD除了金叉死叉外还有顶底背离的用法,希望能测试一下。





其实相关研究我在大学时就自己摸索过,这次就来专门来测试下这个高人气方法。


这里先大概介绍一下顶底背离的定义。


1

顶底背离定义

顶背离


如图所示,当股价呈上升趋势(图中红线),MACD指标却呈下降趋势时(图中绿线),就构成了顶背离


这被认为是见顶的标志,股价后续会下跌(图中橙线)。


同样的,底背离就是股价呈下降趋势时MACD指标呈上升趋势。这被认为是信号,股价倾向于上涨


底背离


需要强调的是,市场上没有统一的标准去定义顶底背离,这里只是选取了最常用定义来讲解。


2

顶底背离案例

如果注意观察,确实会在A股发现很多关于顶底背离的成功案例:



A股顶底背离案例


并且在其它市场也能找到不少成功案例。如下图中比特币2021年3、4月价格不断创新高,对应的MACD指标却不断下降。


BTC顶背离


这是连续双重顶背离现象,属于强烈的见顶信号。之后价格也确实从高位的6.4万(美元)最多跌到了3万以下。


那么顶底背离真的有案例中那么无往不利吗?


我们做量化投资的不能只看个例,而是要通过编程从历史数据里面去找出全部的顶底背离,看看在概率上到底是否有优势。



02

量化定义


想要实现量化顶底背离,就要把顶底背离的模糊定义转化为明确的计算机语言,这一步也是量化投资的关键。


1

量化顶背离

我们逐个看定义,股价不断创新高该如何量化?


找到相邻的三根K线作为一个组合,只要满足收盘价高于前后两个交易日即视为高点,如下图:


高点:收盘价高于前后两个交易日


在下方K线图中标出所有高点。但发现被选中的点数量太多了,不符合我们的直观认知。



初步筛选


因此进一步筛选:高点需同时高于过去30日任何一天的收盘价,得到下图中4个点,这4个点就和我们主观认为的高点比较接近。




进一步筛选高点


我们再加上一个条件:选择出的高点还需大于前一高点。图中4点都符合要求。



符合定义的高点


最后的条件是:K线创新高的同时,对应的DIFF值小于前一个高点


这样我们就成功通过量化定义找出了下图中顶背离位置,股价也确实开始下跌。


量化定义下产生的顶背离


经过上述步骤就能把顶背离的经验描述转化为精确的量化规则:


规则总结


通过这个规则任何人都可以毫不模糊地找出顶背离的点,没有半点的模棱两可、语焉不详


2

量化底背离

底背离的定义就是完全反过来。


先量化创新低的概念,即收盘价低于前后两根K线

低点:收盘价低于前后两个交易日


找出所有低点后从中筛选出创30日新低且小于前一低点的点,其对应的DIFF值大于前一低点,形成底背离且后续股价上升,如下图所示。


量化底背离


3

多种量化定义

以上就是本文对于MACD顶底背离的量化定义。


但要强调的是,量化定义本就是见仁见智的,不同的人会有不同的结论,没有标准答案


比如下图是来自于某券商研报中的另一种顶底背离定义。


某券商研报:MACD顶底背离定义


你感兴趣的话可以看下这个规则,也可以扫描下方二维码或者加我微信xbx783,我把研报原文发你。如果你有更好的定义方法也欢迎与我交流





03

指数回测


有了精准的量化定义后,就可以据此找出历史上所有顶底背离情况,用大数据去证明它是否有效。


先来看顶底背离在沪深300指数上的实际效果。


1

数据获取与加工

针对指数进行回测,要先获取指数数据


登录我们的量化小讲堂网站,找到主要指数历史日线数据。联系网站客服就可以免费获取一份。


www.quantclass.cn/data/stock


得到的数据如下图所示。每一行就是指数每天的开、高、低、收数据。


原始数据


Python来计算MACD指标很简单,几行代码就可以搞定。


这个代码你需要的话可以对着图抄,也可以加我微信xbx783获取。



计算后的结果包含了DIF、DEA及MACD每日的值:



这时就能用Python找出所有的顶底背离了。


需要代码可以加我微信xbx783获取


需要代码的话,你可以扫描下方二维码或加我微信xbx783获取,都是可以免费发给你的。




输出结果如下图所示:


顶底背离及其后续表现


除顶底背离出现时间外,也计算了发生顶底背离后1天/5天/20天的涨跌幅。


2

指数回测

通过顶底背离位置得到相应开仓、平仓信号。


41次顶背离,24次底背离


我们在出现底背离时就全仓买入,顶背离时则全部卖出。过滤掉中间连续的重复信号。


按策略从07年至今针对沪深300指数进行操作,回测结果如下:


顶底背离在沪深300上表现一般


黄色曲线是沪深300指数从07年至今的净值表现,翻了2倍不到


蓝色曲线是顶底背离策略净值,整体下跌且大部分时间都处于空仓状态(横线部分为未持仓阶段)。


由于顶底背离信号出现条件较为严苛,如直接机械的按信号进行交易很容易错过许多大行情,所以使用类似的资金曲线方法判断指标效果并不科学


3

指数未来表现

下面换个方法,从发生顶底背离之后N天涨跌幅角度来看MACD指标是否有效。



如上图中在发生顶背离后,我们统计其未来1天、5天、20天的涨跌幅。



沪深300指数共出现24次底背离、41次顶背离,其未来1天、5天、20天涨跌幅如下:


沪深300顶底背离未来表现


24次底背离发生5日后有62%上涨概率且收益中值显著为正。1日、20日的上涨概率和收益中值都表现较差


41次顶背离后不仅1日、20日都只有44%的概率下跌且收益中值与预期相反,5日后也只有51%的概率下跌,并不明显


所以顶底背离在指数上并未达到相应的预期


之后指数上再出现顶底背离时大家一定要谨慎。概率都是五五开而已,甚至可能是反向指标。比如下图的两个反例:


顶底背离反例



04

全部个股回测


下面再对所有的个股的全部历史数据进行测试。


回测前同样要准备全部A股开、高、低、收数据。


有Python编程基础的可以去网易财经这类财经网站爬取相关数据。


网易财经:quotes.money.163.com/stock


也可以在我们量化小讲堂网站获取股票历史日线数据,包含了1990年至今全部4000多只A股的所有数据,并且每天实时更新


www.quantclass.cn/data/stock


如果你需要的话,可以扫描下方二维码或加我微信xbx783免费获取一份最新的数据。



搞定数据后,就可以用Python编程找出所有的顶底背离。



需要代码可以加我微信xbx783获取



2007年至今4000多只股票的数据样本范围内,共出现顶背离71473次底背离55929次


全部A股顶底背离统计


7万多次底背离发生1天、5天、20天后的上涨概率普遍大于51%,收益中位数显著为正


这已经是不错的概率了,特别是5日之后的54%。要知道在X场上,庄家针对你的优势就可以赚的盆满钵满了。


而5万多次顶背离后预期下跌但继续上涨的概率更大,收益中值也基本可以忽略不计。


由此可见,MACD的底背离有一定的参考价值,而顶背离的有效性就要打一个大大的问号了。


看到这大家对顶底背离是否有效也应该有了自己的看法。投资是概率游戏,以后看到顶底背离切记三思而后行



05

尾声


相信一定会有人抬杠说本文中顶底背离的用法是不对的。


量化定义本就是见仁见智的。我更希望这篇文章抛砖引玉,对你将自身的投资经验转为量化定义有所帮助。


当然如果你有顶底背离更好的用法,你可以和我一样把它转换为明确的量化语言进行回测,也欢迎你加我微信xbx783一起交流探讨。


联系作者



Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/152083
 
338 次点击