【量化课堂】基于修正TD指标的指数择时策略


JoinQuant聚宽

前言:基于修正TD指标的指数择时策略,TD指标策略是大型投资基金Tudor的执行副总裁(Thomas R. DeMark)于80年代中期为了发现走势欲转折区域而设计的技术分析方法。因为其原理简单且预测精度高,而得到了广泛的使用。

TD指标基本原理:

TD指标策略分为TD序列和TD组合两种,原理基本相同但在细节上有一些差异,在应用中也是相互独立的,孰好孰坏并不好说。它们的基本原理如下:市场由买方卖方共同作用形成,当买方力量大于卖方力量时,指数表现为上涨,当卖方力量大于买方力量时,指数表现为下跌。
在走势上涨一段时间后,之前占优的一方现在逐渐走向疲软,从而转向下跌。TD指标正是为了发现走势转折区域而设计的。

TD序列和TD组合分别由启动和计数两个阶段构成。其中启动阶段的作用是识别股价的涨势或者跌势,在确认趋势之后开始统计上涨或下跌的天数,并且当计数达到一定程度之后我们认为趋势邻近终结,反转即将发生,所以做出相应的买入或卖出。

经过一定的实证分析可以得出,传统的TD指标并不是很适合我国市场预测,因此直接运用于我国市场时需要做一定的调整。传统TD指标最大的意义也在于为我们提供了一个识别股市走势的有效方法,我们可以根据要预测的对象的不同而对参数做一定的调整,接下来介绍的是经过修正并且可以适用于A股市场的版本。

修正TD指标详细逻辑:

启动阶段:

TD序列和TD组合的启动阶段是相同的。首先固定一个间隔参数T和统计天数N,当连续N个交易日的收盘价都比T天前的收盘价低的话,我们将它识别为一个下跌趋势,这时启动买入计数;反之如果连续N个交易日的收盘价都比T天前的收盘价高,是一个上涨趋势,那么启动卖出计数。

计数阶段:

当启动阶段确认了趋势之后即开始计数阶段,这个阶段的计数方法是TD序列和TD组合的差异所在,先来看TD序列的计数法。设一个参数M,并且每个交易日进行两组计数:


买入计数1:若当前K线的收盘价比之前第二根K线(也就是隔一天)的收盘价低,则第一个买入计数加1。
买入计数2:若当前K线的收盘价比之前第二根K线的收盘价高。则第二个买入计数加1。


当买入计数1达到M的时候,说明股价在确认下跌趋势之后又下跌太多,应该很快就会发生反弹,所以这时应该买入。或者当买入计数2达到M/2的时候,我们认为这些上涨的天数意味着之前的下跌趋势已经变得疲软,股价应该开始反转向上,所以这时也应该买入。因此,买入点正是计数1先达到M或者计数2先达到M/2的时候。


相应的,当启动阶段识别了上涨趋势之后,我们开始卖出计数,和买入计数正好相反
卖出计数1:若当前K线的收盘价比之前第二根K线的收盘价高。则第一个卖出计数加1。
卖出计数2:若当前K线的收盘价比之前第二根K线的收盘价低。则第二个卖出计数加1。
并在计数1先达到M或者计数2先达到M/2的时候卖出股票。

TD组合的计数规则要更复杂一些,首先我们将计数阶段的第一天的收盘价记录为P,然后每个交易日当下面a、b、c条件之一满足时在相应的计数上加1,如果计数1和计数2都有条件满足,那么只增加计数1不增加计数2:


买入计数1:a.收盘价小于或等于之前第二根K线最低价;b.最低价小于之前第一根K线的最低价;c.收盘价小于P。
买入计数2:a.收盘价大于或等于之前第二根K线最高价;b.最高价大于之前第一根K线的最高价;c.收盘价大于P。
卖出计数1:a.收盘价大于或等于之前第二根K线最高价;b.最高价大于之前第一根K线的最高价;c.收盘价大于P。
卖出计数2:a.收盘价小于或等于之前第二根K线最低价;b.最低价小于之前第一根K线的最低价;c.收盘价小于P。
和序列版一样,当计数1达到M或计数2达到M/2的时候执行相应的买入或卖出。

示例:

JoinQuant聚宽

我们以TD序列为例,如上图所示,假设启动阶段的参数为间隔T=4以及N=4,图中橙色方框是连续四天里收盘价都比四天前的要低,于是判定为下跌趋势并且开始计数阶段。在那之后的每一个黑色数字是买入计数1,也就是收盘价低于隔一天前的收盘价(注意要隔一天);红色数字是买入计数2。如果我们设M=12,那么在图中大四角星的位置正好满足计数1的条件,此时执行买入;如果是红色数字先达到M/2=6的话,也在那时进行买入。

参数的选择和止损条件:

你也许想问,上面为什么把M设为12,如果设成13的话不就赚不到钱了吗?的确是这样的。但我们应该认识到,技术分析并不能保证完全正确的判断,它可以提供的是一个可能有良好胜率的分析思路,具体参数定为多少应该通过历史回测去尝试(比如原版TD指标的参数就适用于美股市场但在A股回测很差),并且可以设置一些止损方案来应对判断错误的情况。

通过各种参数的尝试,我们发现设T=4、N=6以及M=28,从07年到16年12月可以持续提供稳定的收益率。并且,为了使策略表现的更加稳健,我们增加了一个止损条件。其思路较为简单,即在进行买入前的计数阶段里,记录下在计数周期内的最低交易价格,作为止损触发条件。在我们达到安全买点并持仓后,每个交易日进行一次判断,看上一日的K线最低价是否跌破了这一最低价。如果跌破了,则为了避免更大的损失,我们提前将所持仓位平仓以避免损失。

回测结果:

(一)先以TD组合为例,以沪深300指数作为交易对象:

JoinQuant聚宽整体来看,TD组合策略近10年年化益率达到了近16%,而最大回测仅为24.8%,且避开了07年和15年的大熊市,表现出了不错的稳定性。
下面以深成指为例进一步说明:

JoinQuant聚宽

回测比沪深300指数大了一些,但在熊市的表现整体还令人满意,结果还比较能够让人接受。但需要注意的是对于其他一些指数或者股票组合可能上述参数并不是最优的,需要自己去调参以寻找最优的参数组合。

(二)下面看一下TD序列回测的结果,先以沪深300为例(TD序列代码):

JoinQuant聚宽虽然收益不如TD组合的高,年化收益为13.6%,但优点是最大回测小,10年间最大回测为16%,且经受住了两次牛熊市的考验。再以上证指数为例:

JoinQuant聚宽回撤比沪深300要大,但总体表现还能够接受。为了更贴合实际,我们用华夏上证50ETF(510050.XSHG)代替上证指数,再做一次回测:

JoinQuant聚宽

可以发现在以上证50ETF为交易对象时,取得了更优异的表现,10年间最大回测仅为21.6%。

TD序列/组合函数示意图:

JoinQuant聚宽

变量说明图:

JoinQuant聚宽

到JoinQuant查看策略并与作者交流讨论:【量化课堂】基于修正TD指标的指数择时策略

雪球转发:2回复:4喜欢:22

全部评论

JoinQuant聚宽 01-10 12:37

https://www.joinquant.com/

冲浪的筋斗云 01-10 12:26

请问大V是哪个网站?谢谢

JoinQuant聚宽 01-10 11:08

编程要会,之后就是思路了。具体可以到我们网站看看,策略擂台上有不少好策略,社区和量化课堂有很多资源可以借鉴学习

冲浪的筋斗云 01-09 12:41

请问如何做量化?编程?