刚刚开始进入量化投资领域,最近在做金融数据方面的预测,用到了数据挖掘的知识,花了大概半个月的时间搞懂研报的思想,学习研报中提到的数据处理和机器学习算法,并实现了这个量化投资的核心模型部分,虽然结果显示这个方法没有多好,但是在这期间,我遇到了很多问题,也t通过各种渠道把他们解决了,因此,在这里分享一下我在做这一次策略中用到的方法,希望能够给刚开始接触量化投资或者时间序列挖掘的人们提供一些参考,当然,我也是第一次真正地实现一个策略,文中有纰漏之处,若大家发现,也请指出,小胖感激不尽!
做的这个策略来源于国信证券2010年中期策略会专题报告一篇名为《基于小波分析和支持向量机的指数预测模型》的研报(以下简称研报)。
策略思想:
1.先用小波分析对用于预测的数据集进行消噪处理
2.归一化消噪后的时间序列,求出新的股票指标,以备预测用
3.选择适当的核函数,对股票的涨跌情况Label进行预测,并求出支持向量机中的拉格朗日乘数alpha(有i个)和截距bias(一个)
4.根据alpha,bias和涨跌情况Label,结合核函数和支持向量机的高斯径向基函数,预测涨跌值z
5.用预测的涨跌值还原预测股票价格
如果我没有理解错,大致步骤应该就是这样的了。而且绝大多数策略思想和时间序列数据挖掘的思想都和这差不多。
下面详细讲解每一个步骤:
1.小波消噪
MATLAB自带小波分析工具箱,网上也有讲解,但是我在做的过程中也犯过迷糊,因此拿出来和大家分享一下。
假设我们要对成交量,收盘价,成交金额,最高价和最低价这五个指标进行消噪处理,并且用db4小波进行4层分解,那么代码应该是下面这样的:
%% 对每一个指标用db4小波执行4层小波分解
%对总成交量进行分解
[C_Volume, L_Volume] = wavedec(TotalVolumeIndex, 4, 'db4');
%对收盘价进行分解
[C_ClosePrice, L_ClosePrice] = wavedec(CloseIndex, 4, 'db4');
%对总成交金额进行分解
[C_Amount, L_Amount] = wavedec(TotalAmountIndex, 4, 'db4');
%对最高价进行分解
[C_HighPrice, L_HighPrice] = wavedec(HighIndex, 4, 'db4');
%对最低价进行分解
[C_LowPrice, L_LowPrice] = wavedec(LowIndex, 4, 'db4');
小波分析把原始的信号分解为两个部分:近似(Approximation)和细节(Detail),近似就是我们通常所说的信号的低频部分,而细节就是高频部分。信号的噪声通常包含在高频部分,而近似部分和原始的信号非常相似,但是我们又不能只保留低频部分对高频不管不问,因此我们可以只需要对高频部分进行消噪处理,然后再还原信号,代码如下(以收盘价为例,其他指标类似):
%% 从系数中4层近似(低频)和1,2,3,4层细节(高频)
%收盘价的4层近似和1,2,3,4层细节
A4_ClosePrice = wrcoef('a',C_ClosePrice, L_ClosePrice, 'db4', 4);
D4_ClosePrice = wrcoef('d',C_ClosePrice, L_ClosePrice, 'db4', 4);
D3_ClosePrice = wrcoef('d',C_ClosePrice, L_ClosePrice, 'db4', 3);
D2_ClosePrice = wrcoef('d',C_ClosePrice, L_ClosePrice, 'db4', 2);
D1_ClosePrice = wrcoef('d',C_ClosePrice, L_ClosePrice, 'db4', 1);
%% 对高频信息进行消噪处理
ClosePriceT