一、常规年波动率及其计算方法
1.计算 对数收益率 (= 对数差分):R_i = log( **p_(i)** / **p_(i-1)** ), log_returns = np.diff(log_prices)
2. 计算对数收益率序列的标准差std, log_returns_std = np.std(log_returns)
3. 计算年波动率 = std * sqrt(252), volatility = log_rets_std * np.sqrt(252)
# 波动率
import os
import sys
import numpy as np
def read_data(filename):
close_prices = np.loadtxt(
filename, delimiter=',',usecols=(6),unpack=True)
return close_prices
def cal_volatility(close_prices):
log_close_prices = np.log(close_prices)
log_rets = np.diff(log_close_prices)
log_rets_std = np.std(log_rets)
# 单位状态下的波动率
volatility_per = log_rets_std / log_rets.mean() / np.sqrt(1/252)
# 年波动率
volatility = log_rets_std * np.sqrt(252)
return volatility_per, volatility
def main(argc, argv, envp):
close_prices = read_data('aapl.csv')
volatility_per, volatility = cal_volatility(close_prices)
print('volatility_per:',volatility_per)
print('volatility:', volatility)
return 0
if __name__ == '__main__':
sys.exit(main(len(sys.argv), sys.argv, os.environ))
output:
volatility_per: 129.274789911
volatility: 0.205921506926 # 年波动率
[Finished in 1.2s]