蒙特卡罗模拟预测波动率

2024-04-24 07:06:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图用EWMA模型预测波动性。其中我有回报(t-1)和方差(t-1)。 n是天数。 对于每个蒙特卡罗模拟N:

  • t=1: 预测方差采用:var(t+1)=(1-λ)*return(t-1)**2+λ*方差(t-1) 然后计算y(t+1)=sqrt(var(t+1))*高斯(0,1.0)

  • t=2:预测var(t+2)=(1-λ)*y(t+1)+λ*var(t+1)

  • 继续此过程,直到t=n。

然后得到一个(n,n)矩阵,取平均值列式,得到平均日方差。你知道吗

我要对其应用模拟的数据帧:

Date
2015-01-02    0.005735
2015-01-05   -0.024288
2015-01-06    0.007963
2015-01-07    0.005912
2015-01-08    0.011647

代码:

def MC_simulation(y):
    sim_df=pd.DataFrame
    l=0.94
    simulations= 1000
    count=0
    v=df1['variance'][-1]
    v_list=[]
    y_list=[]
    v1=(1 - l)*(y**2) + (l*v)
    v_list.append(v1)
    y1=sqrt(v1)*gauss(0,1.0)
    y_list.append(y1)

for t in range(simulations):

    v1=(1-l)*(y_list[count]**2) + l * v_list[count]
    y1=sqrt(v1)*gauss(0,1.0)
    v_list.append(v1)
    y_list.append(y1)
    count +=1
sim_df= (sum(v_list)/simulations)
return sim_df

def annu(x):
   return x*252

df3=pd.DataFrame()
df3=df1['ret'].apply(MC_simulation)
df3=df3.apply(annu)
df3=df3.to_frame()
df3=df3.rolling(window=63,center=False).mean()
df3=df3.apply(np.sqrt)

绘图: realized_vol vs forecast

运行此代码的结果似乎不正确。当我把它与已实现的波动率作比较时,它完全偏离了。我肯定我的循环是错的,但我想不出来。你知道吗


Tags: 代码dfreturnvarcountsimsqrtlist