这是邢不行第 1 期量化小讲堂的分享
作者 | 邢不行
你周围有没有一些交易高手,看一眼股票的K线就可以大致预测后续的走势。虽然不是完全准确,但也能说个七七八八。
这源于他们在市场较久,此前或多或少见过类似图形,对后市有一定判断。是长期的经验积累所致,而非真正的预测行情。
对经验不足的新手小白来说,很难在短时间内掌握这项技能。
但经验不够,可以科技来凑。对面任意行情,我们都可以借助Python程序找出历史上走势相似的K线,并分析其后续表现,以此给出参照。
本文我们就来做相应的研究,看这样操作对实战是否有帮助,又是否可以据此构建一些交易策略?
01
相似K线
1
支付宝功能
2024年国庆节前后,大A经历了一轮完整的牛熊,更有大盘开盘涨停的盛况。
很多人问我如何看待这段行情,说实话我记忆中也没见过这样的走势。
但记忆可能出错,数据却不会骗人。
最好的办法,还是从过往指数K线中寻找有没有相似的走势,它们之后又是如何演绎行情的。
有同事说支付宝有类似的功能,可以实现我们的需求,叫相似K线。
选择任意股票,就会分别展示出它自身和所有股票历史上,与最近30日K线最相似的形态,并画出未来走势。
对一个免费的功能来说,这个效果已经很好了。
但对我们做量化交易的来说,看到这些功能就想知道该如何计算,是否能将它复现出来,为自己所用。
在翻阅了一些研究资料后,我们最终复刻出了相似K线,还在原有功能上做了全面的升级,整理出了一份极其全面的文件,包含需要用到的数据、代码、各类教程文档。
下文我们就带着大家一起,开始本次寻找相似K线之旅。
02
皮尔逊相关系数
1
皮尔逊相关系数概念
要在众多K线中找到相似度高的组合,就需要借助皮尔逊相关系数。
学过概率论、统计学的同学,应该很熟悉它,是一个比较基础的概念。
没学过的朋友也不用担心,皮尔逊相关系数,简单来说就是用来衡量两组数据之间的线性相关程度。
皮尔逊相关系数计算公式
你不需要理解它的原理,只要会运用就可以了。
甚至Excel中就有现成的公式用于辅助计算:
用Excel计算皮尔逊相关系数
Python中更是有打包好的计算函数,只需一行代码就可以解决。
用Python计算皮尔逊相关系数
2
皮尔逊相关系数应用
指标用法也很简单,比如图中几个点可以连成一条向上的直线,则认为相关系数为1,即x的数据增加时y也会按相同趋势增加。
假若数据点是围绕图中直线分布,则说明它们之间是正相关关系,相关系数介于0-1,围绕的越紧密,指标越接近1。
与之相反,如若是向下的直线则为负相关关系。
若数据之间毫无关系,它们的相关系数则为0。
了解了上述内容,就可以借此构建出计算K线相似度的公式:
相似度在-100%-100%之间波动
具体用法也很简单,例如下图是股票A和股票B某时间段的K线图,它们的相似度高达98%,走势上也的确极其接近。
而股票C和A的相似度是75%,走势上也给人一种相像又不完全像的感觉。
再比如股票D和A的相似度只有0.05%,它们之间毫无关联也一目了然。
通过上述案例即可发现,相似度越接近100%,K线之间也就越相似。
03
指数相似度
1
寻找指数相似K线
我们先用相似度指标来寻找上证指数最近20个交易日的相似K线。
理论上Excel也可以做相应的计算,我们则是直接编写了Python代码来辅助计算。
程序运行结果如图所示:上证指数历史上共出现了57次与近20日K线相似度超过了90%的情况。
其中相似度最高的是2016年7月29日-8月25日这段时间,高达96%。
将两段K线放在一起看,在走势上也极其接近。
如此看来,我们的经验和记忆有时确实会出现偏差,一些历史上存在过的K线走势,如果不借助数据和代码复现,可能就会被自然遗忘。
我们也可以稍微修改代码,去看指数最近30个交易日的相似K线是哪些时间段:
结果与20日完全不同
你也可以拿到代码后,选择自己感兴趣的时间段去做观察,类似操作就不再多加赘述。
2
未来表现统计
寻找历史上的相似K线,是想以史为鉴,去探究过去发生了什么,以便给当下的交易做出指导。
我们还不能只单纯看个例,应综合分析历史上相似度高于90%的所有情况,观察在这些K线产生后,买入并持有未来1天/5天/10天/20天后,赚钱的概率有多少,获取的平均收益又有多少?
上证指数历史上,与最近20个交易日的K线相似度超过90%的阶段共57次。
在这些K线出现后的第二天开盘去买入上证指数,持有1天的上涨概率是63.16%,平均收益是0.18%。
持有5天/10天的上涨概率也都在50%以上,但收益率几乎可以忽略不计。
持有20天的上涨概率骤降至43%,收益率也来到了-1.39%。
以上数据结果,也可以给我们的交易决策一定的底气和参考。
我们以上的所有研究都是基于上证指数,鉴于大家还是以交易个股为主,下文我们就将研究拓展到个股。
比如选取任意股票任意时间段的K线,在所有股票的历史数据中,找出相似度高的时段,并统计这些相似走势之后的市场表现。
04
全市场探究
以茅台为例,它最近20个交易的K线如图所示。站在这个时点,我们就想知道未来几天茅台的价格会如何变化,该直接进场还是等它继续下跌?
但我们无法预知未来,最好的办法是通过分析历史相似K线,来辅助判断后续行情。
该思路类似于技术指标中归纳整理特殊形态,只不过我们寻找的是随机的相似K线,无需做特殊条件的归纳。
我们请出祖传的Python代码,相关功能已经帮大家准备好了,只需要根据我文档中的流程来操作即可。
通过代码,我们先找出了2007年至今A股历史上和茅台最近20个交易日走势最相似的三段K线,并画了出来,相似度分别是97.7%和97.6%。
并标注出了它们的股票名称、交易日期,甚至还将后续走势也画出供大家参考。
以上功能,支付宝也可以提供,虽然不如我们全面,但也确实不值得我们夸耀。
我们还额外添加了其它功能,比如历史上和茅台最近走势相似度最大的1万组K线,相似度最低的也有92%,说明彼此走势都很相似,那这些K线未来的整体表现又是如何?
我们计算了这些K线出现后未来1天/5天/10天/20天的上涨概率和平均涨跌幅,结果如图所示:
利用我们的工具,你既可以肉眼直观比较最相似K线的未来表现,也可以通过大数据分析最相似的前X组K线的整体表现,以此辅助你做出交易决策。
本文只是以茅台为例,你也可以拿了代码后,选择其他任意股票、任意时间段、任意X根K线去做走势的研究,这些完全可以实现,就看你如何使用。
最后再透露个小秘密,既然相似度是以开高收低价格为基础计算的,那是否可以将成交量也考虑进去?
是不是也可以融入技术指标,如均线的相似度计算,寻找更广泛意义上的相似K线?
篇幅有限,就不多加赘述了,感兴趣的朋友可以和我一起讨论,也可以问我要了数据和代码自己把玩修改,以上思路都是可以实践的。