AI计算年化实现波动率
编辑
0
2025-06-22

提示词
#Python代码
#读取我们要用的历史行情数据文件
df = pd.read_excel('2-1.xlsx')
#保留要用的字段
df = df[['日期', '收盘']]
#转换日期格式并设为index
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
#用对数收益来描述价格变动
df['对数收益'] = np.log(df['收盘']/df['收盘'].shift(1))
#定义一个计算实现波动率的函数
def realized_volatility(x):
return np.sqrt(np.sum(x**2))
#将数据按照月度重组,并计算实现波动率
df_rv = (
df.groupby(pd.Grouper(freq="M"))
.apply(realized_volatility)
.rename(columns={"对数收益": "实现波动率"})
)
#检查结果
df_rv.tail(12)
我需要基于上面的代码,计算出每个月的年化实现波动率,请给出代码。
答案
import pandas as pd
import numpy as np
# 读取历史行情数据
df = pd.read_excel('2-1.xlsx')
# 保留要用的字段
df = df[['日期', '收盘']]
# 转换日期格式并设为index
df['日期'] = pd.to_datetime(df['日期'])
df.set_index('日期', inplace=True)
# 用对数收益来描述价格变动
df['对数收益'] = np.log(df['收盘']/df['收盘'].shift(1))
# 定义一个计算实现波动率的函数
def realized_volatility(x):
return np.sqrt(np.sum(x**2))
# 将数据按照月度重组,并计算实现波动率
df_rv = (
df.groupby(pd.Grouper(freq="M"))
.apply(lambda x: realized_volatility(x['对数收益'])) # 确保只处理对数收益列
.to_frame(name="月实现波动率") # 转换为DataFrame并命名列
)
# 计算年化实现波动率 = 月波动率 × √12 (年化转换因子)[2,3](@ref)
df_rv['年化实现波动率'] = df_rv['月实现波动率'] * np.sqrt(12)
# 格式化为百分比字符串便于阅读
df_rv['年化实现波动率_pct'] = df_rv['年化实现波动率'].apply(lambda x: f"{x:.2%}")
# 检查最后12个月的结果
print(df_rv.tail(12))
输出结果没毛病
月实现波动率 年化实现波动率 年化实现波动率_pct
日期
2022-01-31 0.088663 0.307137 30.71%
2022-02-28 0.068900 0.238676 23.87%
2022-03-31 0.133816 0.463554 46.36%
2022-04-30 0.123565 0.428042 42.80%
2022-05-31 0.068098 0.235899 23.59%
2022-06-30 0.073393 0.254242 25.42%
2022-07-31 0.074279 0.257309 25.73%
2022-08-31 0.070498 0.244212 24.42%
2022-09-30 0.072070 0.249656 24.97%
2022-10-31 0.070144 0.242986 24.30%
2022-11-30 0.140845 0.487901 48.79%
2022-12-31 0.092911 0.321854 32.19%
- 0
- 0
-
赞助
支付宝
微信
-
分享