Python量化交易——股票择时到底能否赚钱?技术指标大比拼——MACDEXT指标
技术指标大比拼——MACDEXT指标的有效性回测
Python量化交易——MACDEXT
技术指标的有效性研究
背景介绍
技术指标是股票交易中最常用的技术手段之一,abc几乎所有的技术文章或股票分析文章都离不开通过MACD等各种指标来判断一支股票的买点和卖点,做量化的也会经常接触TA-Lib
中提供的各种技术指标。从股评人的文章里看,似乎这些指标都有指哪打哪的能力,但是,我们既然做量化交易,就必须用数据说话,一个技术指标到底好不好,有没有用,不是靠嘴说的,是靠数据来验证的。因此,我这个系列文章的目标,就是把TA-Lib
中的技术指标全都拿出来溜一溜,做一个横向大评比。俗话说,是骡子是马拉出来溜溜,通过大数据分析,我们就应该对指标的有效性有一个大致的了解。
为此,我通过一个系列文章,来综合评测33种TA-Lib中的技术指标的有效性,详情请点击这里
MACDEXT技术指标介绍
MACD的中文直译是“移动平均收敛/发散”。而MACDEXT是Ta-lib中提供的一种扩展MACD计算方式,他允许使用多种不同的均线方式计算MACD。因此,MACDEXT本质上还是MACD,只不过在生成交易策略时,我们有了更多的可调参数。下面的介绍都以MACD为准,实际的回测使用的是TA-Lib中的MACDEXT指标,并且可以使用qteasy对策略进行更深入的调参。
MACD称为异同移动平均线,是从双指数移动平均线发展而来的,由快的指数移动平均线(EMA12)减去慢的指数移动平均线(EMA26)得到快线DIF,再用2×(快线DIF-DIF的9日加权移动均线DEA)得到MACD柱。MACD的意义和双移动平均线基本相同,即由快、慢均线的离散、聚合表征当前的多空状态和股价可能的发展变化趋势,但阅读起来更方便。MACD的变化代表着市场趋势的变化,不同K线级别的MACD代表当前级别周期中的买卖趋势。
指标用法建议
MACD的信号与零线有关:
- 当MACD线从零线以下上穿时是看涨。当它从零以上下穿时是看跌。
MACD的信号也与信号线有关:
- 当MACD线从信号线下方向上穿越信号线时,为看涨。交叉点离0线越远,信号就越强。
- 当MACD线从信号线上方向下穿越信号线时,为看跌。交叉点离0线越远,信号就越强。
qteasy
中内置了MACDEXT交易策略
这里使用qteasy
作为回测评测的工具。
qteasy
是本人正在开发的一个快速量化交易工具包,使用这个工具包,可以快速灵活地生成各种量化交易策略,生成历史数据并回测策略的表现,有针对性地优化策略的性能;还能模拟实盘自动化交易。qteasy目前最新版本为v1.0.14,可以通过pip安装,Github项目地址在这里,安装方法如下:python -m pip install qteasy
qteasy
提供了一个基于MACDEXT的内置交易策略,其创建规则如下:
信号规则:
计算MACD值:
- 当MACD值大于0时,设置仓位目标为1
- 当MACD值小于0时,设置仓位目标为0
与普通的MACD策略不同,MACDEXT多出来几个参数:
策略参数:
- fp: int, 快速均线计算周期
- ft: int, 快速均线类型,取值范围0~8
- sp: int, 慢速均线计算周期
- st: int, 慢速均线类型,取值范围0~8
- s: int, MACD信号线计算周期
- t: int, MACD信号线类型,取值范围0~8
用户可以对MACDEXT策略进行更加丰富的参数调整,详情参见qteasy文档
上述规则是qteasy内置策略的定义,用户完全可以根据自己的理解重新定义交易规则,或者选用其他策略参数。详细用法参见qteasy文档
433支股票五年回测结果
下面使用qteasy
进行技术指标的回测
使用qteasy
回测所有433支股票的回测结果,每次回测的时间跨度都是5年,从2015年1月1日开始投资于一个股票,在技术指标发出买入信号时全仓买入,在发出卖出信号后全仓卖出,一直到2019年21月31日为止,最后综合计算每个技术指标的指标强度和适应性,通过两个数字来反映技术指标的有效性。关于计算方法的详细介绍,请参见这里
首先放出结果:MACDEXT策略的强度为
5.8% ——该指标平均产生5.8%的超额收益
result_df.describe()
return 策略收益率 | benchmark 基准收益率 | mdd 最大回撤 | sharp 夏普率 | alpha 超额收益 | diff | |
---|---|---|---|---|---|---|
count | 296 | 296 | 296 | 296 | 296 | 296 |
mean | 105.21% | 99.40% | 43.90% | -178.66% | 1.67% | 5.82% |
std | 176.29% | 160.75% | 10.49% | 3588.84% | 14.04% | 158.06% |
min | -58.71% | -64.66% | 14.44% | -61712.13% | -42.42% | -608.86% |
25% | 9.38% | -14.25% | 35.98% | 6.92% | -6.34% | -47.08% |
50% | 51.87% | 37.21% | 42.90% | 28.46% | 1.90% | 11.41% |
75% | 119.99% | 154.64% | 51.83% | 51.92% | 11.15% | 65.54% |
max | 1384.88% | 678.90% | 69.00% | 124.94% | 53.77% | 1110.25% |
296支股票的平均收益率是99.4%,而策略平均收益为105.21%,平均跑赢了原始股票6个百分点,总体择时效果相当好。
再看策略适应性:
182.9%——该指标平均适应度182.9%,较广泛地适用于各种股票
在所有有回测结果的296支股票中,六种典型结果的数量分别如下:
序号 | 组别 | 股票数量 | 该组平均基准收益 | 该组平均择时收益 | 该组平均超额收益 |
---|---|---|---|---|---|
1 | 力挽狂澜 | 63 | -28.73% | 53.25% | 81.98% |
2 | 锦上添花 | 84 | 112.30% | 228.40% | 116.10% |
3 | 差强人意 | 98 | 218.56% | 97.40% | -121.17% |
4 | 无力回天 | 23 | -36.41% | -14.77% | 21.63% |
5 | 屋漏逢雨 | 8 | -18.61% | -34.40% | -15.79% |
6 | 乐极生悲 | 20 | 68.28% | -16.34% | -84.62% |
综上,结论如下:
- 该指标在大部分情况下会产生正收益,产生正收益的比例达到82%,这是相当好的择时收益了,如果不做择时,只有67%的股票在同一时段有正收益。
- 该指标表现较好之处在于对本身正收益的股票中,在90%的情况下都能保持正收益。
- 不足之处在于对于本身收益很好的股票(平均218%收益率),反而因为择时错过上涨机会,平均错失121%的收益,实在可惜!
总体来说,该指标的择时效果较好,且有较好的抗跌性能,只是平均超额收益不够理想。如果要看其他所有股票的结果,请点击这里