1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35
| 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))
|