田红丽,杨莹莹,闫会强
1.河北工业大学 人工智能与数据科学学院,天津 300401
2.河北工业大学 经济管理学院,天津 300401
国民经济发展迅速,金融投资重要性凸显,股票预测既是研究热点,亦是研究难点。人工智能在股票市场的应用主要集中于股价预测与拐点预测,股票价格受多方面因素影响,预测具体的价格存在困难[1]。股价拐点是反映股票价格趋势变化的“信号”,可以使投资者快速发觉股票的变化趋势。由于交易成本的存在,日内交易基本无法获利,对于将股票作为长线投资的股民来说,找到股票的买卖点,高抛低吸,以获得最大收益至关重要。股市拐点预测可以为投资者提供一定的买卖信号,因此股价拐点预测在股票投资之中存在重要意义[2]。
在证券市场之中,大数据成为信息的主要存储方式,海量数据中蕴含着常规方法无法提取的特征。从线性模型到非线性模型,研究者们尝试了多种方式对股票市场进行挖掘与预测,如支持向量机[3]、卷积神经网络[4-5]、灰色模型[6]和长短期记忆网络[7-8]等。郑兴等将加权支持向量机应用于股票反转点的预测[9]。程一梅将SMOTE 过采样算法与支持向量机相结合,平衡数据集中不同类别样本的差异,以提升拐点预测的准确率[10]。Chen等将主成分分析算法与加权支持向量机相结合对股市拐点进行预测[11]。Luo等结合分段线性化和加权支持向量机对股票市场的交易信号进行预测[12]。蔺晓运用卷积神经网络,与全连接的多层感知器相结合对股市拐点进行预测[13]。石陆魁等将最小方差算法与支持向量机相结合,对股市拐点进行预测[14]。对于上述模型,均未将股票的长短期趋势进行充分利用,在拐点标注的过程中未考虑无法为投资者带来收益的伪分型,未从投资者所获收益的角度出发,对预测结果的实际收益率进行探讨,模型的实际收益模糊。
本文结合缠论和深度学习对股票价格的拐点进行预测。为提升模型的实际收益率,拐点标注过程中基于缠论删除股市中存在的伪分型,并与股市的长短期趋势相结合作为拐点预测模型的输入特征。由于拐点数据集是典型的不平衡数据集,提出一种结合SMOTE 过采样算法[15]、引入焦点损失函数的卷积神经网络(convolutional neural network with focal loss,FLCN)与加权支持向量机(weight support vector machine,WSVM)的混合模型,以缓解数据类别不平衡带来的分类困难问题,提升模型性能,为投资者提供投资信号,提高收益率。
技术指标是股票市场中判断股价涨跌趋势的有力武器。近年来,诸多学者将技术指标与股票基本数据相结合对股票价格进行预测,技术指标的选择主要集中于MACD、KDJ、OBV、RSI 等。众多技术指标在股票市场具有不同的功能:MACD 利用快、慢速移动平均线之间的聚合与分离的状况,对买卖的时机进行判断;KDJ 适用于分辨个股超买超卖的情况;BIAS 对移动平均线的使用功能进行具体量化。由此可见,不同的技术指标从不同角度对股票进行解析。本文对股票市场进行综合考虑,采用MACD、OBV、KDJ、BIAS、MA5 等技术指标作为输入特征。其中MACD与MA5指标代表股票的趋势特征;KDJ、BIAS 与RSI 代表股票的震荡特征;OBV代表股票的能量特征。
缠论作为一种原理型的技术分析理论,试图采用数理学与完全分类的方式来解析股票价格与走势的变化规律。K 线图将股票在特定周期内的开盘价、收盘价、最高价和最低价等涨跌变化状况以图形的方式表现出来。在K线图中,该理论对走势采用完全分类的画线分析方式,并提出交易市场“走势终完美”的哲学思想。本文根据缠论对周K线与日K线的拐点进行标注。
1.2.1 分型
拐点蕴含在分型之中,若要获取拐点,首先需要提取出股票K线中存在的分型。
顶分型:相邻三根K 线之中,中间一根K 线的最高价,是三根K 线中最高价的最大值,并且其最低价是三根K线中最低价的最大值,此三根K线的组成则构成顶分型,如图1(a)所示。
底分型:相邻三根K 线之中,中间一根K 线的最高价,是三根K 线中最高价的最小值,并且其最低价是三根K线中最低价的最小值,此三根K线的组成则构成底分型,如图1(b)所示。
图1 顶分型与底分型示意图Fig.1 Schematic diagram of top typing and bottom typing
1.2.2 包含关系
分型判断过程中,可通过K线信息直接获取的分型称为直接型分型;而隐藏在K线信息之中的分型称为犹豫型分型。若需要获取犹豫型分型,需要先对其进行包含关系处理。包含关系是股价K 线图中一种常见的存在形式,若不对其进行处理,将极有可能错失蕴含着重要拐点的分型,影响实验结果。相邻两根K 线用K1与K2表示,open_1、open_2、close_1、close_2、high_1、high_2、low_1、low_2 分别代表两根K 线的开盘价、收盘价、最高价与最低价。包含关系处理如下。
上升趋势中:
(1)若high_1<high_2且low_1>low_2,则将low_1的值赋给low_2,使low_2=low_1,其他数据不改变。
(2)若high_1>high_2且low_1<low_2,则将high_1的值赋给high_2,使high_2=high_1,其他数据不改变。
下降趋势中:
(1)若high_1>high_2且low_1<low_2,则将low_1的值赋给low_2,使low_2=low_1,其他数据不改变。
(2)若high_1<high_2且low_1>low_2,则将high_1的值赋给high_2,使high_2=high_1,其他数据不改变。
1.2.3 笔
两个相邻的顶底分型可以构成一笔。缠论理论下的一笔至少包括7根K线。笔的组成包括顶分型、底分型与至少一根既不属于顶分型也不属于底分型的K线。如图2(a)所示,由顶分型与底分型构成的笔称为向下笔;反之,如图2(b)所示,由底分型与顶分型构成的笔称为向上笔。
图2 向下笔与向上笔示意图Fig.2 Schematic diagram of pen down and pen up
1.2.4 伪分型处理
缠论理论要求:相邻分型间不可共用同一根K 线;股票的顶分型与底分型交替存在;一笔由至少7根K线组成;顶分型的顶应高于相邻底分型的底。若不符合任意一项要求,则表示存在伪分型。伪分型即其K线结构符合分型特征,却蕴含着无法为投资者带来收益的假拐点。在所有分型中,顶分型包含着向下拐点;底分型包含着向上拐点;而伪分型并不包含拐点。因此,在进行拐点标注的过程中,去除不包含拐点的伪分型。
对于股票市场,长周期波动大,作为买卖点不够精确,需要短周期进行配合。本文的长短期趋势信息通过不同频率的K 线信息进行获取。高低频K 线信息分别选择股票价格的日K 线信息与周K 线信息。以短周期为基准,将长周期趋势信号融入短周期之中。根据缠论理论对分型与笔的概念要求,可以得出前一个分型出现后,下一分型与前一分型相反,且距离下一个分型出现至少存在一根K线,即距离下一个拐点出现至少两根K线。如图3 所示,对周K 线进行解析,阴影K 线代表不可能形成拐点的区域,则前一个分型出现后的二周内不会出现大周期上的趋势反转;虚线框部分的K线表示可能形成拐点的区域。长短期趋势结合即将周趋势以信号的方式加入到短周期数据集之中。如周K 线的向下笔,顶分型出现后的两周间,K线将呈现下降趋势,不构成拐点,因此在该区间的日数据集中以(-1,-1)的信号进行标注。两周之后的每一周均存在构成向上拐点的可能性,即以(1,0)的信号标于日数据集之中,直至下一个底分型出现;向上笔,即底分型出现后的两周,周趋势以信号(1,1)标注于日数据集,两周之后,以(1,0)标注于日数据集,直至下一顶分型出现。
图3 趋势结合信号图Fig.3 Trends combined with signal graphs
SMOTE-FLCN-WSVM 股价拐点预测模型由合成少数类过采样技术(synthetic minority oversampling technique,SMOTE)、引入Focal Loss 的卷积神经网络(FLCN)与加权支持向量机(WSVM)三部分组成。拐点预测模型如图4所示。
图4 拐点预测模型Fig.4 Turning point prediction model
股票拐点数据集是典型的不平衡数据集,其拐点样本在所有数据中占比不足20%,因此在神经网络的学习中,容易对拐点样本造成特征学习不足的现象,分类结果则偏向于多数类别。SMOTE算法[10]的基本思想是对少数类样本进行分析和模拟,通过KNN 近邻算法对每一个少数类样本x随机选取一个少数类样本y,通过式(1)产生新样本[16]。
其中,x代表原始数据集的一个少数类样本;rand( 0,1)代表0到1之间的随机数;y代表以x为中心附近随机选取的K近邻少数类样本。
FLCN 模型为引入Focal Loss 的卷积神经网络模型。FLCN网络结构如图5。
图5 FLCN网络结构Fig.5 FLCN network structure
卷积神经网络具有特征提取能力。基本结构包括输入层、卷积层(convolutional layer)、池化层(pooling layer,也称为取样层)、全连接层和输出层。网络中卷积层的作用是对输入数据进行特征提取,如式(2)所示;数据经过卷积层的特征提取后进入池化层,池化层的作用是数据特征降维。全连接层整合卷积层或者池化层中具有类别区分性的局部信息。该层神经元的激励函数一般采用ReLU激活函数。
其中,x代表输入特征向量;w代表卷积核;k代表卷积核尺寸;*代表卷积运算;b为偏置项;f()· 代表激活函数;ci代表经过卷积层的输出特征向量。
在平衡数据集的多分类任务中,交叉熵损失函数(Cross Entropy Loss)为最常用的损失计算函数,它的表达式:
其中,p代表模型输出的类别概率;y代表类别标签。
焦点损失函数(Facal Loss)[17]于2017 年被Kaiming提出,首次提出被应用于解决one-stage 目标检测中正负样本比例严重失衡问题。在不平衡数据集分类中,Focal Loss 函数通过对少数类样本内部加权以缓解类别不平衡问题。Focal Loss 函数在Cross Entropy Loss函数的基础上增加两个参数αt和γ。其中αt为平衡因子,用来处理类别数量的不均衡问题,若某一个类别的样本数量占总数量的比值较高,则适当降低该类别α值的大小;反之,适当增大。γ为惩罚项,使损失函数专注于难分类的样本。Focal Loss函数的表达式:
其中,p代表模型输出的类别概率;α为平衡因子;γ代表难易样本权重;y为样本类别标签。
支持向量机(support vector machine,SVM)的基本思想为在特征空间中寻找可以将不同类别样本分开的超平面,并使得不同样本间距离最大。假设样本数据集,则支持向量机的初始目标函数表达式:
其中,C代表惩罚参数;ξi代表松弛变量;w代表超平面w·xi+b=0 的法向量;b代表超平面的偏置项;xi与yi代表数据集样本。对上式进行拉格朗日求解,可得其对偶公式:
相应的高维空间的决策函数公式:
对于不平衡数据集,少数样本类别对分类贡献较小,普通的支持向量机并不适用于该类问题。为平衡各类别的贡献率,引入类别权重参数(class weight)增大少数类样本权重,同时减小多数类样本权重,则初始目标函数的改变公式:
其中,σi代表类别权重,其余与式(5)相同。则该公式的对偶公式:
相应的分类决策函数公式:
支持向量机将线性不可分数据映射到高维特征空间的工具为核函数,本研究选择径向基核函数作为样本数据向高维的映射工具。RBF核函数公式:
其中,(x,y)代表样本数据;K(x,y)代表映射后的高维样本数据。
支持向量机运算过程中存在两个重要的参数C和γ,实验采用网格寻优方法对两参数进行调整,寻求最优参数。惩罚因子C的范围大小设置为(1,3),以0.2为步长进行寻优;γ的范围设置为(1,2),同样以0.2 为步长进行参数寻优。
为提升拐点预测模型的性能,提出了SMOTE-FLCNWSVM混合模型。近年的研究中,SMOTE算法被广泛应用于不平衡数据集的处理,但该算法合成的数据为模拟数据,无法完全替代真实数据,因此本文在特征提取模块引入Focal Loss 函数,并与SMOTE 算法结合以解决不平衡数据集特征提取困难的问题。数据集进行拐点标注后,对非拐点样本、向上拐点样本和向下拐点样本以{x1:x2:x3} (x1>x2=x3)的比例进行SMOTE 运算,一定程度上缓解拐点与非拐点比例严重失衡的问题。经过SMOTE 算法的拐点数据集依然存在不平衡,特征提取过程使用FLCN模型,以{x3:x2:x1} 的比例调节不同类别损失函数的权重系数,增大少数类别对损失函数的贡献率。该方式不仅改善了单独使用SMOTE算法造成合成数据过多致使数据集缺乏真实性的问题,也缓解了数据样本极度不平衡造成预测结果偏斜严重的问题。FLCN模型提取的的特征作为输入进入WSVM模型。
本文在Windows10操作系统的计算机上进行,仿真平台选取Pycharm,模型搭建框架为Keras,编程语言为Python,编程所用数据包包括tushare、sklearn、pandas、numpy、talib、matplotlib等。
本文选取的数据集输入特征包含开盘价(open)、收盘价(close)、最高价(high)、最低价(low)、成交量(volume)、MACD、KDJ 等。不同数据间存在量级差异,因此本文对数据进行归一化处理。为验证该研究模型的有效性,在实验对象的选择中,对所选对象的交易数据有一定的要求,选择每日的成交额均大于一亿的股票,若股票的成交额小于一亿,则在投资者进行投资的过程中,投资金额在当日成交额中所占比例无法忽略不计,投资者投入金额将推动股价以相对其价值以上的价格进行估值,造成该支股票短期急速增长,市盈利攀升,价格与其价值背离,而产生股市泡沫现象。相对而言,模型适用于对交易额影响较小的中小型投资者。为验证模型的实用价值,且可与基金业绩形成对比,实验数据选取股票1(沪深300综合指数)、股票2(中证500指数)以及股票3(上证50指数)三支股指作为实验对象。
首先,依据缠论思想对股价拐点信息进行标注。三支股指的原始K 线数据与拐点标注如图6~图8 所示。由于篇幅原因,拐点标注图示仅展示2017年1月至2019年12月3年的数据。
图6 沪深300指数拐点标注示意图Fig.6 Shanghai and Shenzhen 300 index turning point
图8 上证50指数拐点标注示意图Fig.8 Shanghai 50 index turning point
依据图6、图7可以看出,依据缠论理论可以较准确地提取出股指价格的拐点,因此基于缠论理论对股价的拐点进行标注是有效的。
图7 中证500指数拐点标注示意图Fig.7 CSI 500 index turning point
依据本文提出的拐点预测模型,将预测出的向上拐点与向下拐点分别作为股票市场的买点与卖点,进行一年期与三年期的模拟交易。从实用性角度,以收益率作为评价标准,对模型的实用性进行评判,股票收益率(R)的计算公式如下:
本文选取三支股指2006年1月4日至2019年12月31日共13年的历史数据作为实验数据。集合的划分过程中,短期收益选取2019 年1 月4 日至2019 年12 月31日共1 年数据作为验证集;长期收益选取2017 年1 月4日至2019年12月31日共3年数据作为验证集。从绝对收益率与相对收益率两个角度对收益结果进行讨论。绝对收益率指的是其净值的增长率,相对收益率为其绝对收益率与同时期基金业绩涨跌幅的差值。基金即集中众多中小型投资者的资金,委托专业投资人进行量化选股投资。本文的相对收益的基准选择各范围基金业绩的中位数,原因是中位数代表整个基金业绩的平均水平。若个人投资者可通过模型获取基金业绩平均水平的收益且可免除基金手续费,代表该模型具有实用价值。其中,相对收益率1代表与同类基金业绩的中位数相比较;相对收益率2为与全部股票型基金业绩的中位数相比较;相对收益率3为与全部基金业绩的中位数相比较。
根据表1 结果可以得到,无论短期交易或长期交易,三支股指的绝对收益均为正,代表依据该模型进行投资,均可获利。以基金业绩为基准,仅股票3 的相对收益率2为负,其余均为正,表示在绝大多数的情况下,该模型的收益率高于基金业绩平均水平。证明了本文模型的实际应用价值。
表1 股票收益率Table 1 Stock return
为验证本文模型的性能,按一年期模拟交易的数据进行数据集划分。选取WSVM[9]、SMOTE-SVM[10]与结合主成分分析的加权支持向量机(PCA-WSVM)[11]三类模型与本文模型进行对比实验。选取准确率(Accuracy)和收益率对模型性能进行评估。准确率计算公式如下:
其中,TP代表正确的划分为正例的个数;FP代表正确的划分为负例的个数;P代表被划分为正例的个数;N代表被划分为负例的个数。
根据表2可知,本文模型的准确率与收益率优于对比实验模型,再次证明了本文模型的有效性与实用性。
表2 模型效果比较Table 2 Model effect comparison
本文基于缠论理论,将卷积神经网络与支持向量机进行改进与结合,提出一种结合缠论和深度学习的SMOTE-FLCN-WSVM股价拐点预测模型。首先,利用缠论对股价拐点进行标注,并将股价的长短期趋势进行融合。针对类别样本失衡问题,利用SMOTE 过采样算法对数据集进行预处理。之后,采用引入Focal Loss的卷积神经网络(FLCN)进行特征提取,并使用加入类别权重参数的支持向量机进行分类。对三支股指进行预测,实验结果从绝对收益与相对收益两个角度,证明了模型可为投资者带来收益,具有实际应用价值。经过对比实验,再次证明了模型的有效性与实用性。此模型针对中小投资者,股票选择也局限于日营业额高于一亿的股票。下一步的工作,希望通过增加多方面信息以使模型适用于更广泛类型的股票。