从金融时间序列的角度,以沪深300的收益和价格作为研究标的,使用AR、MR模型尝试拟合和预测,详述模型使用流程,以及模型与模型之间的表现差异。
金融时间序列(一)-AR、MR模型
作者:邱吉尔
1. 输入库包
In [1]:
import pandas as pd
import numpy as np
import seaborn as sns
import matplotlib.pyplot as plt
import datetime
from scipy import stats
import statsmodels.api as sm
plt.style.use('seaborn')
2. 取出数据
In [2]:
HS300_close=get_price(['000905.SH'], '20171125', '20190125', '1d', ['close'], True, None,is_panel=1)['close']
HS300_close.columns=['HS300_close']
HS300_close['return']=HS300_close['HS300_close'].pct_change()
3. 时间序列1(AR Model)
时间序列的平稳性被分为严平稳和宽平稳。其中,严平稳需要两个时间序列在时间的平移变换下,它们的联合分布保持不变。而宽平稳只需要序列的均值、方差相同即可。 由于严平稳的实现较为困难,所以一般来说平稳时间序列指的是宽平稳。如果是非平稳时间序列,可以通过多次差分的方法处理为宽平稳序列。
下列,我们就对沪深300指数价格使用了2次和20次的差分。显而易见,差分次数越多越平稳。
3.1 价格差分
In [10]:
HS300_close['close_diff2']=HS300_close['HS300_close'].diff(2)
HS300_close['close_diff20']=HS300_close['HS300_close'].diff(20)
HS300_close.dropna(inplace=True)
HS300_close.plot(subplots=True,figsize=(20,12))
plt.title('Stationary & Diff',y=4.7,size=25)
Out[10]:
<matplotlib.text.Text at 0x7f3cdf0360f0>
3.2 ACF自相关函数
自相关函数的含义是衡量序列数据和自己的相关程度,即x(t)和过去某个时间x(t−l)的相关性:
该假设检验统计量服从自由度为m的卡方分布。
原假设为所有自相关系数为0,取显著水平为0.05,若所有p值均小于0.05则拒绝原假设,认为该序列存在序列相关性。
以下是该假设检验统计量:
In [4]:
closeprice=HS300_close['HS300_close']
ACF,Q_test,P_value= sm.tsa.acf(closeprice, nlags=10, qstat = True)
data_show=np.c_[range(1,11),ACF[1:],Q_test,P_value]
data_df=pd.DataFrame(data_show,columns=['Lag','ACF','Q_test','P_value'])
data_df.set_index('Lag',inplace=True)
data_df.head(8)
Out[4]:
ACF | Q_test | P_value | |
---|---|---|---|
Lag | |||
1.0 | 0.988893 | 263.068428 | 3.678637e-59 |
2.0 | 0.978027 | 521.362501 | 6.131565e-114 |
3.0 | 0.967327 | 774.996387 | 1.145044e-167 |
4.0 | 0.954426 | 1022.852307 | 3.981759e-220 |
5.0 | 0.942327 | 1265.390107 | 2.010084e-271 |
6.0 | 0.929604 | 1502.330397 | 0.000000e+00 |
7.0 | 0.917226 | 1733.893361 | 0.000000e+00 |
8.0 | 0.904332 | 1959.864313 | 0.000000e+00 |
In [5]:
returndata=HS300_close['return']
ACF,Q_test,P_value= sm.tsa.acf(returndata, nlags=10, qstat = Tr