【matlab编程代做】基于MATLAB的股票指数预测算法仿真
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
% 本程序的目的是模拟一个ARMA模型,然后进行时频归并。考察归并前后模型的变化。
% 这个ARMA模型的一般形式用黑盒子模型表示为A(q)y(t)=C(q)e(t)。q是滞后算子。
% 或者是:(1+a1*q^(-1)+a2*q^(-2)+a3^(-3)+a4*q^(-4))y(t)=(1+c1*q^(-1)+c2*q^(-2)+c3^(-3)+c4*q^(-4))e(t)
% 这里多项式A和C都只写出4阶,因为一般的经济时间序列阶数都不高。
clear;
clc;
% ====================第一步,模拟一个ARMA模型并绘制ACF,PACF图========================
%s首先设定ARMA模型的多项式系数。ARMA模型中只有多项式A(q)和C(q),
%把A(q)的系数都设为0就得到MA模型,把C(q)的系数都设为0就得到AR模型。
M=250;%要预测的点数
xa3=textread('data/buy_price.txt');
xa4=textread('data/buy_num.txt') ;
xc3=textread('data/sell_price.txt');
xc4=textread('data/sell_num.txt') ;
% xa3=textread('data/data.mat');
% xa4=textread('data/data.mat') ;
% xc3=textread('data/data.mat');
% xc4=textread('data/data.mat') ;
lp=length(xa3);
for i=1:1:lp
a1(i) = -(0.5)^(1/3);
a2(i) = (0.5)^(2/3);
a3(i) = xa3(i);
a4(i) = xa4(i);
c1(i) = -(0.5)^(1/3);
c2(i) = (0.5)^(2/3);
c3(i) = xc3(i);
c4(i) = xc4(i);
end
obv = 3000; %obv是模拟的观测数目。
A = [1 a1 a2 a3 a4];
C = [1 c1 c2 c3 c4];
m = idpoly(A,[],C,[],[],1,1) %这样就生成了ARMA模型,把它存储在m中。NoiseV ariance被设定为1,1也是默认值。抽样间隔Ts设为1。
error = randn(obv,1); %作为其他影响因子。
e = iddata([],error,1); %用randn函数生成一个噪声序列。存储在e中。抽样间隔是1秒。
y = sim(m,e);
get(y) %使用get函数来查看动态系统的所有性质。
r=y.OutputData; %把y.OutputData的全部值赋给变量r,r就是一个obv*1的向量。
%==========================第二步,绘制ARMA序列r的ACF和PACF图=======================
figure(1)
subplot(2,1,1)
n=lp;
[ACF,Lags,Bounds]=autocorr(r,n,2);
x=Lags(2:n);
y=ACF(2:n);
h=stem(x,y,'fill','-');
set(h(1),'Marker','.')
hold on
ylim([-1 1]);
a=Bounds(1,1)*ones(1,n-1);
line('XData',x,'YData',a,'Color','red','linestyle','--')
line('XData',x,'YData',-a,'Color','red','linestyle','--')
xlabel('lags')
ylabel('ACF')
title('ACF with 2stds Bounds(i.e., approximate 95% confidence interval)')
axis([0,n,-0.15,0.15]);
subplot(2,1,2)
[PACF,Lags,Bounds]=parcorr(r,n,2);
x=Lags(2:n);
y=PACF(2:n);
h=stem(x,y,'fill','-');
set(h(1),'Marker','.')
hold on
ylim([-1 1]);
b=Bounds(1,1)*ones(1,n-1);
line('XData',x,'YData',b,'Color','red','linestyle','--')
line('XData',x,'YData',-b,'Color','red','linestyle','--')
xlabel('lags')
ylabel('PACF')
title('PACF with 2stds Bounds(i.e., approximate 95% confidence interval)')
axis([0,n,-0.15,0.15]);
%===============================函数的估计和拟合===============================
%%============================第三步,对r进行m阶时频归并======================== %%这一步对前面得到的ARMA序列r进行m阶时频归并。归并的方法是把每m个数据项加起来。