有了趋势跟随策略这个“道”,我们还需要行之有效的操作方法和技术手段,也就是“术”。
通过上篇文章的介绍,相信大家已经发现,对于趋势跟随策略,关键就是如何定义趋势,然后,如何把满足趋势定义的标的筛选出来。
在前面的文章中,我们介绍过道氏理论中的趋势定义,但在本篇文章中,因为要挑选的是适合普通人的交易策略,因此我们把趋势的判断规则也搞简单一些,直接使用不同时间周期的均线处于多头排列还是空头排列来判断趋势。
所谓多头排列,就是短期均线在中期均线的上方,而中期均线又在长期均线的上方。
所谓多头排列,就是短期均线在中期均线的下方,而中期均线又在长期均线的下方。
有了趋势的判断规则之后,我们还要对其进行衡量,以选出趋势最强,或者最符合买入规则的标的。那么,我们就需要设置一套评分模型,在对技术指标进行计算后,将结果代入我们的模型得到一个分值,然后对多个标的的评分进行排序,就能够筛选到最符合我们要求的标的了。
趋势评分模型
在现实生活中我们经常会遇到各种各样的问题,对于不同的问题我们都有不同的观察维度。
周末去哪儿玩?要考虑自己的身体状况、天气情况、孩子的情绪、游玩的时间、午饭的安排,综合考虑之后才会做出选择。
今天继续摸鱼?要考虑这周的工作安排和进展、手头工作的实现难度、有无重点财经事件,然后才能决定是否搞搞副业。
所以其实在生活中我们无时无刻都在使用一个评估模型,只不过有的时候理性占上风,有的时候感性占上风。但是在交易的过程中,如果放任自己的情绪,那么无疑就离亏损不远了。
在上篇文章中我们已经介绍了市场分析框架的四个维度:基本面、政策面、情绪面、技术面,对于一个理性的交易者而言,显然会综合考虑各个方面的因素,并最终在技术面进行验证。因此,我们有必要对要考虑的因素进行量化,从而将市场分析这个复杂的问题抽象为仅仅考虑几个维度的问题,使其简化为更容易分析、更容易理解、更容易沟通交流的形式。
多头排列与空头排列
首先我们来看趋势要满足的最基本条件。对于普通人而言,平时并没有多少盯盘时间,所以最好是看较长一些的时间周期,免得被短期的波动干扰了情绪。
假设我们的短期、中期、长期均线分别选择为20、60、120,则需要满足 MA20 > MA60 > MA120 才能做多,满足 MA20 < MA60 < MA120 才能做空。
如图所示,在标普500每次恢复多头排列时都是买入点。
如图所示,在中证1000每次恢复空头排列时都是卖出点。
如此,对于是否有趋势这个观察维度,我们就可以根据多头排列还是空头排列来判断。而对于这个维度的量化规则,我们可以这样设定:多头则为 1,空头则为 -1,否则为 0。
那么,我们就可以使用下面的指标代码进行实现。
COND_UP := MA_ST > MA_MT AND MA_MT > MA_LT;
趋势的起点
光满足基本条件还不行,由上面的图我们也能够看到,可能在一段时间内,比如60天内有55天都满足空头排列,但是偏偏就是在最近一周因为政策面、情绪面发生了反转,导致最近5天已经由空头排列转换为了多头排列。那么显然,这种情况就没有60天内最开始的5天是多头排列,然后剩下的55天是空头排列更值得去做空。
那么如何衡量这两种情况的区别呢,一个可行的方法是看当前K线距离最后一根K线的时间,趋势形成的时间越早,则认为更稳定、更可信、更值得交易。
如此,对于趋势的起点这个观察维度,我们就可以通过时间权重来衡量。显然,更近的数据给予更大的权重,更远的数据则给予更小的权重。
通过CURRBARSCOUNT可以获取到最后一个K线的交易周期数,那么,基于如下的代码即可实现按时间呈指数衰减的效果。
TIME_W := POW(0.9, CURRBARSCOUNT);
均线发散
有了时间远近的权重还不够,我们还希望多头/空头排列有一个逐步放大的过程。因为在趋势出来之前,大多是横盘震荡的状态,这样就把不同时间周期的均线都熨平,呈现出一种均线粘合的状态。而一旦市场最终形成了共识,选择出了一个方向,那么就会有一个均线发散的过程,而且越是逐步放大,趋势越持久。
添加更多的均线,并拉长时间范围后,可以很明显的在纳斯达克100指数的走势上看到,在每段趋势形成之前那个均线粘合的过程。
如此,对于均线发散这个观察维度,我们可以将 N 天内的趋势状态相加,看看它在 N 天内的占比,并依次作为衡量趋势强度的一个维度。
DAYS_S := ABS(SUM(TREND_W, N)) / N;
涨跌幅度
仅仅统计一个天数的占比还不足以证明趋势的强度,试想一下,同样是10天时间,同样是多头排列,有的涨了10%,有的涨了20%,那么我们肯定是更想筛选到最强势的股票。
如此,对于涨跌幅度这个观察维度,就需要框定一个范围,我们只比较当前股价相比 N 天前涨了多少,并依次作为衡量趋势强度的一个维度。
DIFF_S := (C - REF(C, N)) / REF(C, N);
波动大小
光有涨跌幅度还不行,如果是上窜下跳,那就说明还是有分歧,持股体验就并不是很好,我们希望找到的是那种基本面的逻辑性很强,但也没有情绪面爆发的股票,这样才能拿得稳,赚的多。
如此,对于波动大小这个观察维度,用什么来衡量呢?显然,直接使用 ATR 与股价的比值就好。当然了,因为我们希望的是波动越小越好,所以这里计算权重的代码和上面其它几个维度略有区别。
VOLA_S := 1 - ATR / C;
成交量
除了上面的一些维度,还有成交量这个维度也可以参考。虽然在多头趋势走出来之后,大家一般会捂股不卖而导致缩量,但是在趋势转折时,成交量就显得非常重要了。
以DJT的走势和成交量来看,哈里斯重蹈希拉里的覆辙也不是没有可能。
和前面的维度一样,我们不仅可以观察是否放量,还可以观察是否逐步放量。
对于是否放量,我们可以将其与成交量的N个周期均值进行比较。
VOL_S := V / MA(V, 20);
对于是否逐步放量,我们可以将其与上一根K线的成交量进行比较,只选取成交量增加的交易周期,然后看其在N个周期内的占比。
VOL_DAYS_S := SUM(IF(V > REF(V, 1), 1, 0), N) / N;
有效性
我们已经选取了足够多的维度对趋势和强度进行验证,最后再介绍一个增强版的观察维度:有效性。
持续上涨或者持续下跌并不常见,总会有偶发的回调或反弹,此时就需要统计在回调时是否遇到了均线的支撑,或是反弹时是否遇到了均线的阻力。如果有,那么支撑或者压制的次数就可以视为趋势的质量,从而对不同标的进行衡量。
当然,这种涉及到对历史数据按某个规则进行统计的逻辑,用指标代码来实现有一定的难度。在一开始我们没有必要搞的这么复杂,可以先使用上面介绍的维度,按照自己的交易经验或者交易偏好,给予不同的维度设置不同的权重,进而,得到一个融合了各个维度分值的综合评分。
SCORE := (TREDN_S * TREDN_W + DAYS_S * DAYS_W + DIFF_S * DIFF_W + VOLA_S * VOLA_W + VOL_S * VOL_W + VOL_DAYS_S * VOL_DAYS_W) * TIME_W * 100;
调整权重
有了上面的评分公式,接下来就是结合图形走势和评分结果对各个维度的权重进行调整。毕竟,一开始我们并不知道每个维度的最佳参数应该设置为多少,而且,不同的人有着不同的侧重点,这些都需要结合图形和评分结果进行调整,以找到最适合自己的参数。
这里就以是否能够满足趋势更好的标的是否有更高的评分来进行验证。
道琼斯指数,63.4分
标普500指数,59.8分
纳斯达克100指数,52.5分
结合图形来看,走势更好的道琼斯指数有着更高的评分,基本满足要求。
恒生指数,35.1分
恒生科技指数,43.0分
上证指数,38.5分
大A任重而道远,各条均线还没有理顺,左侧抄底成功固然收益更高,但右侧入场确定性更高。
所以,只要从逻辑上能验证方法可靠,那么剩下的就是不同的人根据自己的喜好,选择不同的均线组合、不同的维度、不同的权重。
虽然我们根据评分模型得到了评分,但如果还要一个一个标的的去看评分结果,显然效率就有点太低了。如果能够通过选股公式,每天自动筛选出来评分达到阈值的股票,然后按照评分排序后只需要对前五名做一下深入的研究,就可以大大提高分析的效率了。
如果只是交易股票,上面的功能已经够用了。但是对于期权、期货的交易者来说,可能更关注的是趋势的反转点。毕竟,在下跌周期的末端,跌无可跌时,波动率来到了历史低位,看涨期权处于最便宜的时刻。一旦行情反转,大涨加升波,就有可能产生涨幅达到几百倍、上千倍的合约。如果没有一个自动盯盘工具,普通人要怎样才能抓住这样的机会呢?
同样是涨到了100,如果别人的成本是1,那么别人是100倍,你哪怕晚入了一天,成本哪怕是2,也就只有50倍了。更要命的是,一旦你比别人的成本高,那么在追涨之后就要万分小心,能暴涨就能够暴跌,追涨之后赶上下跌和降波,那么可能分分钟就会腰斩。
所以,针对衍生品交易者,如何才能抓住趋势反转的最佳时机,在下篇文章中,我们将会对技术指标做进一步的改进,以实现更完善的自动化:优化评分、优化选股、微信推送。
评论(0)