波動率

使用 Python 計算和繪製歷史波動率

  • September 9, 2015

我下載了 1984 年至今的 FTSE 歷史數據。我想做的是將波動率繪製為時間的函式。我寫的是:

import matplotlib.pyplot as plt
import datetime as dt
import numpy as np
import math

lines = [line.rstrip('\n') for line in open("Data.txt")]
a = list(range(len(lines)))
adjClose = [float(i) for i in lines]
adjClose.reverse()
dates = [line.rstrip('\n') for line in open("Date.txt")]
dates.reverse()
x = [dt.datetime.strptime(d,'%Y-%m-%d').date() for d in dates]
dailyVolatility = np.std(np.diff(np.log(adjClose))).round(4)

# Calculate returns
returns = []
for i in range(len(adjClose[1:])):
   element = adjClose[i]/adjClose[i-1]
   element = math.log(element)
   returns.append((element))
returns = returns[1:]

mean_returns = np.mean(returns)
vol = []
for i in range(len(returns)):
   element = (returns[i]-mean_returns)**2
   element=math.sqrt((element))
   vol.append(element)
for i in range(len(vol)):
   vol[i]*=math.sqrt(252)
x = x[2:]
plt.plot(x,vol)
plt.show()

所以我首先載入數據,然後計算日誌返回並取平均值;此外,我計算了日誌中每對數字的標準差返回值。我的推理正確嗎?在這種情況下,我根本沒有對標準差公式進行平均,因為 N-1 = 2-1=1。

我沒有足夠的聲譽點來發表評論,所以我會把它放到一個答案中。

我不確定這意味著什麼,“我的日誌返回的每對數字的標準偏差”。但聽起來你正在採用兩個連續回報的標準差。如果是這樣的話,我不會那樣做。

我認為您想要“已實現的差異”。這只是平方對數返回的總和。然後,您可以取這個總和的平方根來獲得實際波動率。如果您在一周或一個月內進行匯總,您將獲得該週或一個月內的已實現波動率。

有關已實現變異數的良好數學屬性,請參見 Wikipedia 文章。

引用自:https://quant.stackexchange.com/questions/20643