songzi91 发表于 2008-10-17 14:33

如何用ARMA模型拟合股价时间序列?

我在MATLAB2007上建立了ARMA模型,分析股价时间序列,模型已经有了,但是不知道如何得到拟合输出时序。分析需要拟合输出图,作拟合误差分析。以下是我的程序,请高手指点。
x = ;
figure(1)
plot(x);
%扩充ADF单位根检验
= ...         %Augmented Dickey-Fuller unit root test based on AR model withdrift
    dfARDTest(x,[],0.05,'T')
z = price2ret(x);   %股价序列非平稳,一阶差分z(i) = log(x(i)/x(i-1))/(i-(i-1))
figure(2)
plot(z);
%一元线性回归,求残差residuals
X = z(1:length(z)-1,1);
Y = z(2:length(z),1);
lxx=0;
lxy=0;
for k=1:length(X)
lxx=lxx+(X(k)-mean(X))^2;
lxy=lxy+(X(k)-mean(X))*(Y(k)-mean(Y));
end
b=lxy/lxx;
a=mean(Y)-b*mean(X);
for k = 1:length(X)
    Y1(k,1) = a+b*X(k);      %估计值
    residuals (k,1) = Y(k)-Y1(k);       %残差
end
figure(3)
subplot(2,1,1)
autocorr(z);   %一阶差分序列z自相关函数图MA(q),观察系数是否在区间(-2T^(1/2),-2T^(1/2))内
subplot(2,1,2)
parcorr(z);      %一阶差分序列z偏相关函数图AR(p),观察系数是否在区间(-2T^(1/2),-2T^(1/2))内
%---------------------------------------------------模型定阶或识别-------------------
%扩充ADF单位根检验,检验序列z平稳性
= ...         %Augmented Dickey-Fuller unit root test based on AR model withdrift
    dfARDTest(z,[],0.05,'T')
%确定ARMA模型阶数,选择相关度大、下降幅度大的阶数作测试,在此选择|ACF|>0.05的阶为q,|PACF|>0.05的阶为p,邻近的阶数也参与测试
u = iddata(z);
test = [];
%p = ;    %自回归对应PACF,给定滞后长度上限p和q,一般取为T/10、ln(T)或T^(1/2),这里取T/10=12
%q = ;   %移动平均对应ACF
for p = 0:12    %自回归对应PACF,给定滞后长度上限p和q,一般取为T/10、ln(T)或T^(1/2),这里取T/10=12
    for q = 0:12    %移动平均对应ACF
      m = armax(u,)      
      AIC = aic(m)                      %armax(p,q),选择对应FPE最小,AIC值最小的模型
      % = lbqtest(z, , 0.05)    %Ljung-Box Q-statistic lack-of-fit hypothesis test
      test = ;
    end
end
for k = 1:size(test,1)
    if test(k,3) == min(test(:,3))      %选择AIC值最小的模型
      p_test = test(k,1)
      q_test = test(k,2)
      break;
    end
end
%------------------------------------------模型参数估计--------------------------
m = armax(u,)      %armax(p,q),对应AIC值最小
AIC = aic(m)         %选择AIC值最小的模型

%----------------------------------------这段拟合程序有问题??????????????
uu = iddata([],idinput(size(z,1)));
y = sim(m,uu);   %ARIMA拟合
yh = y.OutputData;
%----------------------------------------这段拟合程序有问题??????????????

%-----------------------------------------检验-------------------------------
figure(4)
e = resid(m,u);   %残差分析
plot(e);
%检验残差的自相关和偏相关函数
figure(5)
subplot(2,1,1)
autocorr(e.OutputData)      %一阶差分序列z自相关函数图MA(q),置信水平0.95
subplot(2,1,2)
parcorr(e.OutputData)    %一阶差分序列z偏相关函数图AR(p),置信水平0.95
errors = z-yh;            %误差
%errors = pe(m,u);
%perf(i) = mse(errors);   %均方误差
%figure(3)
%plot(y);
%compare(data,m,1)       %1步预测
figure(6)
subplot(1,2,1)
plot(u);
hold on ;
plot(y,'-.r') ;
hold off
title('拟合效果');
xlabel('采样点');ylabel('收盘价');
legend('实际值','拟合值')
subplot(1,2,2)
bar(errors);
hold off
title('拟合误差');
xlabel('采样点');ylabel('误差');
%---------------------------------------反差分-------------------------------------
figure(7);
plot(ret2price(z,x(1)));
hold on ;
plot(ret2price(yh,x(2)),'-.r') ;
hold off
title('拟合效果');
xlabel('采样点');ylabel('收盘价');
legend('实际值','拟合值')

[ 本帖最后由 songzi91 于 2008-10-17 15:15 编辑 ]

dingdingshuai 发表于 2009-1-4 15:16

请问楼主的问题搞定没有啊?

zzhwq1986 发表于 2009-2-12 15:02

学习......
页: [1]
查看完整版本: 如何用ARMA模型拟合股价时间序列?