9.2 上证指数开盘指数预测
9.2.1 模型建立
对于大盘指数的有效预测可以为从整体上观测股市的变化提供强有力的信息,所以对上证指数的预测很有意义,通过对上证指数从1990.12.20-2009.08.19每日的开盘数进行回归分析,最终拟合的结果是:均方误差MSE=2.35705e-005,平方相关系数R=99.9195%。SVM的拟合结果还是比较理想的。
【例9-1】测试数据:上证指数(1990.12.19-2009.08.19)。整体数据存储在chapter_sh.mat,数据是一个4579×6的double型的矩阵,记录的是从1990年12月19日开始到2009年8月19日这期间内4579个交易日中每日上证综合指数的各种指标,每一行表示每一交易日的上证指数各种指标,6列分别表示当天上证指数的开盘指数、指数最高值、指数最低值、收盘指数、当日交易量和当日交易额。
数据来源:大智慧证券软件,http://www.gw.com.cn/。
上证指数每日的开盘指数如图9-2所示。


模型日的:利用SVM建立的回归模型对上证指数每日的开盘数进行回归拟合。
模型假设:假设上证指数每日的开盘数与前一日的开盘指数、指数最高值、指数敲低值、收盘指数、交易量和交易额相关,即把前一日的开盘指数、指数最高值、指数最低值、收盘指数、交易量和交易额作为当日开盘指数的自变盘,当日的开盘指数为因变量。
算法流程如图9-3所示。


9.2.2 MATLAB 实现
这里SVM的实现使用的是LISBVM工具箱。
1. 根据模型假设选定自变量和因变量
选取第1~4578个交易日内每日的开盘指数、指数最高值、指数最低值、收盘指数、交易量和交易额作为自变量,选取第2~4579个交易日内每日的开盘数作为因变量。
MATLAB 实现代码如下:

2. 数据预处理
数据归一化预处理使用mapminmax函数来实现。需要说明的是,这里不但需要对因变量(上证指数每日的开盘数)作归一化处理,对于自变量也需要作同样的预处理。
MATLAB 实现代码如下:


上证指数每日的开盘数归一化的结果如图9-4所示(这里将其归一到[1,2]区间)。


3. 参数选择
参数选择由SVMcgForRegress.m实现,其函数接口为:


输入参数如下。
● train_label:训练集标签(待回归的变量),与LIBSVM工具箱中的要求一致。
● traÎn:训练集(自变量),与LIBSVM工具箱中的要求一致。
● cmin:惩罚参数c的变化范围的最小值(取以2为底的幕指数后),即c_mm=2^(cmin),默认为-5。
● cmax:惩罚参数c的变化范围的最大值(取以2为底的幕指数后),即c_max=2^(cmax),默认为5。
● gmin:参数g的变化范围的最小值(取以2为底的幕指数后),即g_min=2^(gmin),默认为-5。
● gmax:参数g的变化范围的最大值(取以2为底的幕指数后),即g_max=2^(gmax),默认为5。
● V:Cross Valjdation的参数,即给测试集分为几部分进行Cross Validation,默认为5。
● cstep:参数c步进的大小,默认为1。
● gstep:参数g步进的大小,默认为1。
● msestep:最后显示MSE图时的步进大小,默认为0.1。
输出参数如下。
● mse:Cross Validation 过程中最低的均方误差。
● bestc:最佳的参数c。
● bestg:最佳的参数g。
MATLAB实现代码如下:

其实现的参数粗略选择结果如图9-5所示。

打印精细选择结果:
Best Cross Validation MSE=0.000948821
Best c=1 Best g=1.6245
其实现的参数精细选择结果如图9-6所示。

4. 训练及回归预测
利用上面得到的最佳参数c和g对SVM进行训练, 然后再对原始数据进行回归预测。
MATLAB实现代码如下:

最终的回归预测结果、误差和相对误差如图9-7~ 图9-9所示。

