Python量化交易——股票择时到底能否赚钱?技术指标大比拼——APO指标
APO指标的有效性回测
Python量化交易——APO
技术指标的有效性研究
背景介绍
技术指标是股票交易中最常用的技术手段之一,几乎所有的技术文章或股票分析文章都离不开通过MACD等各种指标来判断一支股票的买点和卖点,做量化的也会经常接触TA-Lib
中提供的各种技术指标。从股评人的文章里看,似乎这些指标都有指哪打哪的能力,但是,我们既然做量化交易,就必须用数据说话,一个技术指标到底好不好,有没有用,不是靠嘴说的,是靠数据来验证的。因此,我这个系列文章的目标,就是把TA-Lib
中的技术指标全都拿出来溜一溜,做一个横向大评比。俗话说,是骡子是马拉出来溜溜,通过大数据分析,我们就应该对指标的有效性有一个大致的了解。
为此,我通过一个系列文章,来综合评测33种TA-Lib中的技术指标的有效性,详情请点击这里
技术指标介绍
APO指标全称 Absolute Price Oscillator 绝对价格震荡指标,绝对价格震荡指标显示证券价格的两个指数移动平均线之间的差异,并以绝对值表示。
计算公式如下:
A
P
O
=
短期
E
M
A
–长期
E
M
A
APO = 短期 EMA – 长期 EMA
APO=短期EMA–长期EMA
指标用法建议
APO衡量价格变动的趋势,因此,我们的交易信号可以根据价格变动的趋势强弱判断:
- APO 上穿零线被视为看涨,而下穿零线则看跌。
- 正指标值表示向上运动,而负读数表示下降趋势。
- 当价格的新高或新低未被绝对价格震荡指标 (APO) 确认时,就会形成背离:
- 当价格形成较低的低点时形成看涨背离,但 APO 形成较高的低点。 这表明可能预示看涨逆转的下行势头减弱。
- 当价格形成更高的高点时形成看跌背离,但 APO 形成更低的高点。 这表明可能预示看跌逆转的上升势头减弱。
qteasy
中的APO内置策略
这里使用qteasy
作为回测评测的工具。
qteasy
是本人正在开发的一个快速量化交易工具包,使用这个工具包,可以快速灵活地生成各种量化交易策略,生成历史数据并回测策略的表现,有针对性地优化策略的性能;未来还将提供实时自动化交易功能。该项目正在开发中,Github项目地址在这里
qteasy
的安装方法:python -m pip install qteasy
qteasy
中有一个内置策略是基于APO指标创建的,其创建规则如下:
APO交易策略:
按照规则计算APO趋势:
- 当APO大于0时,判断为牛市趋势,设定持仓比例为1
- 当APO小于0时,判断为熊市趋势,设定持仓比例为-1
上述规则是qteasy内置策略的定义,用户完全可以根据自己的理解重新定义交易规则,或者选用其他策略参数。详细用法参见qteasy文档
433支股票五年回测结果
下面使用qteasy
进行技术指标的回测
使用qteasy
回测所有433支股票的回测结果,每次回测的时间跨度都是5年,从2015年1月1日开始投资于一个股票,在技术指标发出买入信号时全仓买入,在发出卖出信号后全仓卖出,一直到2019年21月31日为止,最后综合计算每个技术指标的指标强度和适应性,通过两个数字来反映技术指标的有效性。关于计算方法的详细介绍,请参见这里
首先放出结果:APO策略的强度为
-23.53% ——该指标能平均导致23.53%的超额亏损
result_df.describe()
rtn | benchmark | mdd | sharp | alpha | diff | |
---|---|---|---|---|---|---|
count | 296.000000 | 296.000000 | 296.000000 | 296.000000 | 296.000000 | 296.000000 |
mean | 0.687801 | 0.923122 | 0.526557 | 0.075802 | -0.037814 | -0.235321 |
std | 1.366940 | 1.700960 | 0.130308 | 0.438415 | 0.101213 | 1.352614 |
min | -0.642494 | -0.646602 | 0.149147 | -0.943480 | -0.431287 | -10.824741 |
25% | -0.182062 | -0.119593 | 0.440801 | -0.207921 | -0.103054 | -0.642615 |
50% | 0.229756 | 0.296901 | 0.524234 | 0.043722 | -0.037454 | -0.130950 |
75% | 1.002688 | 1.369048 | 0.609974 | 0.414639 | 0.030957 | 0.229460 |
max | 8.074746 | 14.203513 | 0.835120 | 1.415803 | 0.230860 | 5.881215 |
296支股票的平均收益率是92%,而策略平均收益只有68.8%,平均跑输了大盘23.5个百分点。
再看策略适应性:
-37.0%——该指标平均适应度为负,适应度很差,如果不针对个股进行参数适配,将普遍取得较差的结果
在所有有回测结果的296支股票中,六种典型结果的数量分别如下:
序号 | 组别 | 股票数量 | 该组平均基准收益 | 该组平均择时收益 | 该组平均超额收益 |
---|---|---|---|---|---|
1 | 力挽狂澜 | 18 | -25.54% | 33.08% | 58.62% |
2 | 锦上添花 | 44 | 108.02% | 185.45% | 77.44% |
3 | 差强人意 | 90 | 247.21% | 120.06% | -127.16% |
4 | 无力回天 | 36 | -36.40% | -20.48% | 15.92% |
5 | 屋漏逢雨 | 32 | -24.61% | -43.05% | -18.44% |
6 | 乐极生悲 | 43 | 43.82% | -22.69% | -66.51% |
综上,结论如下:
- 该指标只能在刚刚过半的情况下取得正收益,约51%
- 有大量的股票被归为差强人意组,在目标股票收益良好的时候,策略导致收益率平均下降127个百分点:有30%的股票都属于这种情况
- 产生超额收益的股票数量只有不到1/3:约31%
总体来说,该指标的择时效果很差。如果要看其他所有技术指标的结果,请点击这里