一、设计背景
随着越来越多的人投资于股市,股票价格预测已经成为一个研究热点。关于股票价格预测的技术分析方法有很多,其中应用最为广泛的是K线技术分析法。如果将每天的K线按时间顺序排列在一起,就组成了反映股票价格历史变化情况的数列称为K线序列。它能够全面透彻地观察到市场的真正变化,看到股价的趋势、了解到每日市况的波动情形。
经过研究发现,时间序列具有两个重要特征:一是“历史信息会影响未来走势”,即时间序列的过去值会影响到将来;二是“历史经常会重现”即一些特殊的时间序列在整个时间序列中会反复出现。这些特征使得时间序列相似性搜索预测成为可能,从历史数据中寻找与指定股票近期走势相似的数据段,以期通过相似数据段的未来走势来预测指定股票的未来走势。由于K线序列也是一种时间序列,因此用股票K线图相似性来预测便成为股票预测首选方法。
二、系统架构
假定K线走势相近的股票,未来也可能会发生近似的走势。因此根据标的股票当前走势与沪深市场所有股票的历史K线形态进行匹配,并且加入成交量趋势分析找出相似特征的股票,统计这些样本后续的走势供投资者分析参考。
三、算法说明
在统计学中皮尔逊相关系数( Pearson correlation coefficient),又称皮尔逊积矩相关系数,是用于度量两个变量X和Y之间的线性相关,我们可以利用numpy.corrcoef()函数,来计算两个矩阵之间的相关性。
选择出相似数据段的算法主要分为两步:
第一步:根据限制条件(具体包括股票范围、时间),划分出用于搜索的历史数据范围;第二步:在划分出的历史数据范围中,通过相似性算法,获得相似数据段及对应相似度。
1)划分历史数据范围
a.根据输入参数时间,在时间序列上切割历史数据;
b.根据输入参数范围,在横截面上切割历史数据,其中市值档位分为大市值、中市值、小市值。在每个截面上市值前1/3大的个股为大市值,在每个截面上市值前1/3小的个股为小市值,剩余为中市值。股票的行业属性较为稳定,而市值属性可能不稳定。如现在小市值的某股票,历史某短时间可能为中市值。对于市值属性的处理方案,以现在的市值档位来筛选股票。
注意:
为了保证可以根据历史数据预测未来,历史数据从20日前开始计算,即保留20日作为收益统计。
2)相似性算法
从用户的使用体验考虑,价量的形似是最关键的相似性度量指标, 利用价格相似度和成交量相似度以不同权重来进行计算。三维股池添加的趋势层面、四维股池添加的趋势层面与主力资金层面的匹配,应是在价量形似的基础上的次级匹配目标。且这样设计可以大幅降低计算成本。
四、预测方法
从用户的使用体验考虑,价量的形似是最关键的相似性度量指标。三维股池添加的趋势层面、四维股池添加的趋势层面与主力资金层面的匹配,在价量形似的基础上进行次级匹配这样设计可以大幅降低计算成本。
每天收盘后对于每支股票在划分的历史数据范围中计算每个数据段的价量相似度,排序得到最匹配的N个数据段(如N=500)及其对应的股票、起止时间。若用户输入参数模型为二维股池,则按预定展示数(如10)直接展示前几名。若用户输入参数模型为三维股池、四维股池,则仅在此N个数据段中进一步进行筛选,并展示筛选后数据段的前M名。
1)价量
a.价格相似度计算:
记close_01为指定股票的近期前复权收盘价序列,close_02为当前对比相似度的数据段的前复权收盘价序列,close_01与close_02长度相等。
第一步对c1、c2进行归一化,得到c1_s, c2_s。
c1_s = [(x-min(c1))/(max(c1)-min(c1)) for x in c1]
c2_s = [(x-min(c2))/(max(c2)-min(c2)) for x in c2]
第二步计算欧式距离。
similarity_close = sqrt(sum([x ** 2 for x in (c1_s - c2_s)]))
公式:
b.成交量相似度计算与价格相似度计算步骤类似。
c.价量相似度=0.7价格相似度计算+ 0.3成交量相似度。
价量相似度越小表示两个序列越相关,升序排序保存前M名继续进行下面模型筛选。如果用户选择二维模型,则直接输出前M名,但如果结果出现一只股票有多段数据相似,只保留排名靠前的一段数据,增加候选数据段保证总的输出有M段相似数据 ,即输出的相似数据段来自M只不同股票的历史数据。
2)三维股池
使用多参数动量来刻画趋势。动量即为平均收益率(收盘价斜率)。记m_n为n日动量,即往前数n个交易日收益率的均值。考虑使用3种参数的动量,分别对应总趋势、近1/2周期趋势、近1/4周期趋势。
趋势相似度越小越相似,升序排列保存前M名继续进行下面模型筛选,若用户输入参数模型为三维股池,取前M名作为输出。
3)四维股池
使用大单净流入额日频指标衡量主力资金动向。记指定股票的大单净流入额序列为BI1,对比数据段的大单净流入额序列为BI2。计算correlation(BI1,BI2),对主力相似度降序排列保存前M名,若用户输入参数模型为四维股池,输出前M名。
五、评价标准
使用预测准确率和预测误差来评价股票的预测效果。取标的股票每天收益率(默认最近20个交易日)作为一组时间序列,与所有股票的历史数据(从2011年1月1日至今)任意长度为20的连续时间序列计算相似系数,相似系数越高表示K线越相似,从而根据相似股票的后期走势进行统计分析。
采用多次预测求平均值的方法来计算最终的预测准确率和误差。具体步骤如下 :
1)构建预测样本。首先随机选择一个时间段,接着从预测样本数据源中选择每只股票在该时间段内的K线序列作为一个预测序列,最后将这些预测序列组合在一起便可以构成一组预测样本。基于这种方法最终按照时间顺序随机构建15组预测样本进行实验。
2)使用普通序列预测法或模式序列预测法对所有的预测样本进行预测并计算每个预测样本的预测准确率和误差。
3)对所有预测样本的预测准确率和误差进行平均就可以得到该预测方法最终的预测准确率和误差。
六、总结
技术分析者认为K线包容了一切市场行为,价格将以趋势方式演变,相似K线是验证“历史总会重演”的一个经典产品。投资者可以根据相似K线展示的结果来观察个股可能的未来走势,从而对投资起到一定的指导作用。