手动计算波动率与内置函数不一样

问题描述

有人可以帮助我了解我错了吗?我不知道为什么每一栏的波动率都不同...

这是我的代码的示例:

from math import sqrt
from numpy import around
from numpy.random import uniform
from pandas import DataFrame
from statistics import stdev

data = around(a=uniform(low=1.0,high=50.0,size=(500,1)),decimals=3)
df = DataFrame(data=data,columns=['close'],dtype='float64')
df.loc[:,'delta'] = df.loc[:,'close'].pct_change().fillna(0).round(3)

volatility = []

for index in range(df.shape[0]):
    if index < 90:
        volatility.append(0)
    else:
        start = index - 90
        stop = index + 1
        volatility.append(stdev(df.loc[start:stop,'delta']) * sqrt(252))

df.loc[:,'volatility1'] = volatility
df.loc[:,'volatility2'] = df.loc[:,'delta'].rolling(window=90).std(ddof=0) * sqrt(252)

print(df)

      close   delta  volatility1  volatility2
0    10.099   0.000     0.000000          NaN
1    26.331   1.607     0.000000          NaN
2    32.361   0.229     0.000000          NaN
3     2.068  -0.936     0.000000          NaN
4    36.241  16.525     0.000000          NaN
..      ...     ...          ...          ...
495  48.015  -0.029    46.078037    46.132943
496   6.988  -0.854    46.036210    46.178820
497  23.331   2.339    46.003184    45.837245
498  25.551   0.095    45.608260    45.792188
499  46.248   0.810    45.793012    45.769787

[500 rows x 4 columns]

非常感谢您!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)