Python 计算标的价格的历史波动率
时间: 2024-08-16 13:04:59 浏览: 70
计算上证50ETF期权隐含波动率并验证波动率
5星 · 资源好评率100%
在Python中计算金融资产的历史波动率通常涉及计算过去一段时间内价格的标准差。波动率是一个度量市场风险的重要指标,它反映了资产价格变动的幅度。以下是一个简单的步骤来计算基于收盘价的简单移动平均法(SMA)历史波动率:
```python
import pandas as pd
import numpy as np
# 假设df_prices是包含日期和收盘价的数据框,例如从Yahoo Finance获取的DataFrame
def calculate_volatility(prices_df, window_size=20, method='SMA'):
"""
参数:
prices_df (pandas.DataFrame): 包含 'Close' 列的股票价格数据
window_size (int): 振动周期天数,默认20日
method (str): 波动率计算方法,如'SMA'(简单移动平均)、'WMA'(加权移动平均)或'GARCH'(更复杂的时间序列模型)
返回:
volatility (float): 根据给定方法计算的历史波动率
"""
# 使用rolling函数计算收盘价的移动平均
if method == 'SMA':
rolling_mean = prices_df['Close'].rolling(window=window_size).mean()
elif method == 'WMA':
weights = np.linspace(1, window_size, window_size)
weights /= weights.sum()
rolling_mean = prices_df['Close'].ewm(span=window_size, adjust=False).mean(weights)
else:
raise ValueError("Unsupported method. Please choose 'SMA' or 'WMA'.")
# 计算收益率
returns = prices_df['Close'] / rolling_mean - 1
# 计算标准差作为波动率
volatility = returns.std() * np.sqrt(window_size)
return volatility
# 示例使用
volatility = calculate_volatility(prices_df)
```
在这个例子中,我们假设`prices_df`有一个名为'Close'的列,它包含了每一天的收盘价。你可以根据实际数据集调整窗口大小和计算方法。
阅读全文