当前位置:文档之家› 实验一根据AR模型的股票价格预测

实验一根据AR模型的股票价格预测

end
end
% a(:,i+1) = -inv(Y'*Y)*Y'*y;
a = -inv(Y'*Y)*Y'*y;
for m = 1:L_list(select_number)
data1(L+L_list(select_number)*i+m) = data1(L+L_list(select_number)*i+m-1:-1:L+L_list(select_number)*i+m-p)*(-a);
end
end
Y1 = Y';
K = inv(Y1*Y);
a = -inv(Y1*Y)*Y1*y;
data1(i) = data1(i-1:-1:i-p)*(-a);
end
figure(2)
plot(data(1:2000),'b');
hold on
plot(data1(1:2000),'r');
xlabel('数据量');
plot(data(1:1500),'b');
hold on
plot(data1(1:1500),'r');
xlabel('数据量');
ylabel('股票收盘价格');
legend('实际值','预测值');
axis([0 1300 1000 2800]);
%每次预测一个点,代入更新a值
clc
clear all
考虑到3.2中系数矩阵a是在每次得到新的预测值就进行更新,在本节中,我们利用前1000个股价预测接下来长度为m的股价,m即为我们加窗的长度。在这里我们取m为一系列的值,分别为50、100、200、300和400。通过预测的估计,更新系统矩阵a,进而预测接下来的股价。仿真时阶数分别取为100和300,显示如下图所示:
(2.9)
将因变量观测值y(n)的L个观测值写成矩阵形式如下:
(2.10)
将上式写成Yule-Walker方程形式为: 。其中,x是自变量观测值矩阵,a是系数矩阵,Y是Toeplitz矩阵,y是因变量观测值矩阵。
使用最小二乘法(Least Square,LS)寻找一个最优解为: 。对该式进行求解可得: 。将所求系数代入即可得到拟合方程,根据拟合方程可以得到问题的估计值。
将所得的y(n)代入可得:
(2.4)
同样,将任意的一个y(n-K)代入可得: 。
接下来,我们将所得各式写成向量的形式如下:
(2.5)
(2.6)
(2.7)
将因变量观测值的自相关函数写成矩阵形式可得如下:
(2.8)
该矩阵由Yule-Walker方程描述为: 。
对于该系统预测的关键在于对系统系数向量a的求解。将AR Model方程写成如下形式:
(a) (b)
图4 加窗长度为50时不同阶数下的股价预测图
(a) (b)
图5 加窗长度为100时不同阶数下的股价预测图
(a) (b)
图6加窗长度为200时不同阶数下的股价预测图
(a) (b)
图7加窗长度为300时不同阶数下的股价预测图
(a) (b)
图8加窗长度为400时不同阶数下的股价预测图
观察以上各图可知,加窗长度为100、200和300时,预测值和实际值具有较大偏差。而当加窗长度为50和400时,效果较之前三种有较大提高。其中当阶数为100时,预测结果近似于线性,当阶数为300时,两者均具有较好的预测。其中,加窗长度为50时,具有最佳预测效果。
select_number = 5;
data1 = data(1:L);
for i = 0:30
y = data1(L_list(select_number)*i+(p+1):L_list(select_number)*i+L)';
for j = 1:p
for k = 1:(L-p)
Y(k,j) = data1(L_list(1)*i+p-j+1+k-1);
load ('xx.mat');
data = xx(:,1)';
p = 200;
L = 1000;
data1 = data(1:L);
for i = L+1:length(data)
y = data1(p+1:L)';
for j = 1:p
for k = 1:(L-p)
Y(k,j) = data1(p-j+1+k-1);
(2.1)
其中,a=[a0,a1,…aN]为各项因变量观测值系数。通常情况下,我们令a0=1。考虑到式(2.1)的迭代性,我们可以将其转化为一组自变量观测值和一个因变量观测值的形式如下:
(2.2)
其中,A=[ ]是各项自变量观测值的系数。另外,我们假定自变量观测值的自相关函数为:
(2.3)
其中, 是自变量观测值的方差, 是狄拉克函数。
四种不同阶数的预测均方误差如表I所示:
表I 不同阶数下股票价格预测均方误差
阶数
10
50
100
200
均方误差( )
5.7328
1.6552
3.8745
6.0020
从表I中可以看出,阶数位于10~100之间时,具有最优预测。
本节中,我们利用原始数据求解系统系数矩阵a,利用该系数矩阵a构建预测方程,通过预测方程求解接下来的一个值,再将该值代入,更新系数矩阵a,实现一种交叉迭代的预测求解。仿真采用1000个股票收盘价格构建预测方程,来预测接下来1000个股票收盘价格,具体仿真如下图所示:
end
a = -inv(Y'*Y)*Y'*y;
for i = L+1:length(data)
data1(i) = data1(i-p:i-1)*(-a);
end
for i = 1000:1300
MSE = MSE+(data(i)-data1(i))^2;
end
MSE = MSE/300;
figure(1)
仿真采用1000个股票收盘价格构建预测方程,来预测接下来300个股票收盘价格,具体仿真如下图所示:
(a) (b)
(c) (d)
图2 固定系数矩阵时不同阶数下股票价格预测图
图2所示为利用前1000个数据求得系数矩阵a之后对接下来300个股票价格的预测图,蓝色为股票价格实际值,红色为股票价格预测值。图中(a)、(b)、(c)、(d)分别代表阶数为10、50、100、200时的不同情况。从图中可以看出,在阶数为10时,股票价格预测效果较差;当阶数为50和100时,预测效果有较大提升;而在阶数为200时,出现过度拟合的情况,预测效果开始下降。
具体实现步骤如下:
(1)利用自变量观测值x,因变量观测值y和系数矩阵a构建系统模型 ;
(2)依据LS求解系统系数矩阵 ;
(3)将a代入构造预测方程;
(4)将已知值代入到预测方程中对未知值进行预测。
图1 预测实现框图
仿真分为三组进行,分别是固定系数矩阵a的股价预测图样;迭代更新系数矩阵a的股价预测图样;加窗更新系数矩阵a的股价预测图样。
(a) (b)
(c) (d)
图3迭代更新系数矩阵时不同阶数下股票价格预测图
图3中(a)、(b)、(c)、(d)分别为阶数取10、50、100和200时的股票价格预测图,从图中可以看出,由于对系数矩阵a进行不断的迭代更新,因此求得的预测值近似为线性预测,即只能预测股票的升降趋势。观察之前1000个数据可知,股票价格以下降趋势为主,因此在这里的预测函数为一近似单调递减的线性函数。
自回归模型(Autoregressive Model,AR Model)是用自身做回归变量的过程,即利用前期若干时刻的随机变量的线性组合来描述以后某时刻随机变量的线性回归模型,它是时间序列中的一种常见形式。
考虑一组随机自变量观测值与因变量观测值之间的关系,设自变量观测值为x(n),因变量观测值为Y=[y(n),y(n-1),…,y(n-N)],则依据AR Model,满足如下关系式:
ylabel('股票收盘价格');
legend('实际值','预测值');
%加窗的预测,窗的长度分别为100、200、300、400、500
clc
clear
load ('xx.mat');
data = xx(:,1)';
p = 300;
L = 1000;
L_list = [50 100 200 300 400];
基于AR模型的股票价格预测
AR模型是一种线性预测,即已知N个数据,可由模型推出第N点前面或后面的数据(设推出P点),所以其本质类似于插值,其目的都是为了增加有效数据。本次实验使用从雅虎上下载的美国某股票七年共2000个收盘价格数据来进行数据分析建模,取其前1000个价格数据构建预测方程,预测剩下的股票收盘价格。
股票价格数据命名为‘xx’。
% 不更新A值
clc
clear
load ('xx.mat');
data = xx(:,1)';
p = 200;
L = 1000;
MSE = 0;
data1 = data(1:L);
y = data(p+1:L)';
for i = 1:p
Y(:,p-i+1) = data(i:L-p+i-1)';
end
end
re(3)
相关主题