谷歌Deepmind研发的围棋程序阿尔法狗(Alpha Go)打败了围棋职业选手的新闻,大家可能都关注过。阿尔法狗采用了蒙特卡洛树搜索算法、机器学习算法和深度神经网络技术。对阿法尔狗进行训练,可以让程序进行深度学习。程序算法也可以用在股票趋势分析上。今天就给大家讲讲如何通过程序,识别k线趋势变化。当然,我们给大家讲的模式识别算法没有阿尔法狗那么复杂。
图1 基于聚类分析的k线图(candlestick)模式识别
k线图的英文名字叫做candlestick chart,又称为蜡烛图。k线起源于18世纪日本人Munehisa Homma发明,k线图用一根线记录了开盘收盘最高最低四个价位,另外各价格之间的距离和长短形态也可以作为当期多空力量对比的一种反应。K线图的绘制方法是,先把某日或者某个周期的最高价和最低价,垂直地连成一条直线;然后再找出当日或某一周期的开盘价和收盘价,连成一条长方柱体。在国内,阳线以红色表示,阴线以绿色表示。如果收盘价高于开盘价,柱体用红色来表示,或是在柱体上留白,称为”阳线”。如果收盘价低于开盘价,那么我们用绿色表示,或者在柱体上标记为黑色,即阴线。在欧美,阴线以红色表示,阳线以绿色表示。K线图分析,是基于历史数据寻找规律。在我们这篇文章中,采用的是欧美表示方法,红色是阴线,绿色是阳线。
最近我阅读了一本叫做《量化》(the Quants)的书籍,这本书中包含的量化概念,我相信一定能够吸引很多量化交易者。最吸引人的是,文艺复兴公司的James Simons,雇佣了很多的密码破解者来破解市场的密码。其中最吸引人的专家,名字叫做Leonard Baum,他是Baum-Welch法则的共同发明者。这是一个用来建立隐马科夫模型的算法。现在我并不想透露我在这一领域的工作的具体细节,但是我想要给一些简单的、与这些方法相关的量化分析的例子。
目前,很多技术分析的实践者,贡献了很多关于k线图的文献。但是,这些过去的文献存在一个很大的问题,就是这些方法并不是真正的量化。
我们可能想要利用更加量化的方法来利用这些k线图中的信息,问题是,如何用一种量化的方法来实现?
其中一个识别模式的方法叫做有监督学习(Supervised Learning):假设你有一些问题和他们的答案,你要做的有监督学习就是学习这些已经存在的问题和他们的答案。然后在你接受到一个新的不知道答案的问题的时候,你可以根据学习的结果得出答案。
我们有一个数据集,如果对于每一个单一的数据根据它的特征向量我们要去判断它的标签(算法的输出值),那么就是有监督学习。通俗的说,有监督学习就是比无监督学习多了一个可以表达这个数据特质的标签。有监督学习通常分为回归分析(regression)与判别分类(classification)。
有监督学习可以最小化模型的误差(error)。例如,为了识别手写文字,我们可能通过神经网络、支持向量机(SVM)或者其他有监督学习的方法来识别每个字母。然而,你可能不想在识别k线图的种类时花费几个小时的时间。那些熟悉k线图的人,也许能够识别大量的标志,如射击之星(shooting star,长上影线,见顶信号),锤头(hammer,下影线长,柱体短小),十字线(doji,开盘价等于收盘价,市场犹豫),等。每一种k线型都意味着未来特定的走势。为了量化预测,我们可能会对贝叶斯概率感兴趣,例如:
P( upday丨hammer)=P(upday,hammer)/P(hammer)
如果不通过枯燥的手动识别过程,我们怎么才能发现k线图的这些特殊标识?这个问题也许可以通过无监督学习(unsupervised learning)完成。在无监督学习中,我们不需要训练机器,它就能自己发现k线图的特征。通常,这种关系可以通过计算样本个体之间的距离(distance)实现,如下图,就是用无监督学习中k-均值聚类的方法实现的特征识别。
图2 k线图样本
如上图所示图2为k线图的时间序列。我们使用k-均值聚类,结果得到了6个cluster,结果表明不同的k线图类型通过距离聚类为6个cluster
图3 通过k线图标识分类得到6个cluster
如图3 所示,我们可以看到k-均值分类能够分类大的红色柱体、绿色柱体。更有趣的是,cluster5将所有的锤头(hammer)聚类到一起了。
现在我们已经得到了6个cluster,接下来,我们通过R语言编程,使用交叉表(cross tabulation)分析。
图4 聚类分析交叉表分析
最令人吃惊的一件事情就是上表中的57.1%,state5 对应的是锤头k线,而state1对应的是红色下移k线(up move),这说明锤头k线后通常出现下移,这与我们的常识与直觉相背离。
这个结果可能会让人觉得难以置信。为了展示结果,我们看下面这张图,下面这张图展示的是聚类与原始时间序列结合的结果。
图5 锤头(state5)之后经常跟着向下(down)的阴线k线(state1)
与我们通常对锤头的主观认识不同,我们的模式识别结果与手动检查结果一致,锤头k线后通常跟着向下的红线。在state5之后有14.3%的概率接下来是state6(向下的阴线,柱体比state1小),57.1%的概率接下来是state1(向下的阴线)。State1和state6都是阴线。注意我们这里使用的是欧美的表示方法,红色的为阴线,绿色的为阳线。
我们可以将这一量化方法视为MCMC(Markov Chain Monte Carlo,马尔科夫链蒙特卡洛)、Baum Welch和Viterbi算法的拓展。
大家可能关注的是,这个模式识别的结果,对我们有什么用处呢?我们这篇文章的结果是基于美股的,美股不像A股,股票买了不能够当天卖,而是可以做T+0。在进行美股交易的时候,如果做迅速进出的交易,当看到了k线锤头的出现,接下来,高达71.4%的概率股票接下来将会下跌,即收盘价低于开盘价,如果是做当天买卖不持股过夜的交易,当出现锤头时,就应当根据趋势平仓止损。港股、国内股指期货同样可以T+0操作,但港股和国内股指期货的K线聚类结果未必和美股一致。国内也有一些T+0的基金,如货币基金等,同样可以用该方法探讨k线趋势。
对于A股T+1,当日买入的股票,要到下一个交易日才能卖出。A股和美股的交易限制不同,我们若要了解A股如何操作,需要采用A股数据进行聚类分析。根据常见的A股k线理论,锤形线是一个反转信号。我们可以通过上述方法来验证这一理论。对于T+2交易的基金,可以用2日均k线数据,进行分析。
综上所述,本文中的趋势,对于港美股交易较为适用,对于A股等,需要重新分析。
推荐阅读:
1.一个量化策略师的自白(好文强烈推荐)
2.股票期货经典的量化交易策略都在这里了!(源码)
3.期货/股票数据大全查询(历史/实时/Tick/财务等)
4.一个完整的量化交易系统都需要哪些功能?
5.学习Python有哪些书籍?这里有一份书单送给你
6.江湖中常说的“网格交易法”到底是什么?
7.10种经典的日内交易策略模型思路
8.干货 | 量化选股策略模型大全
9.量化金融经典理论、重要模型、发展简史大全