波動率
使用 Python 計算和繪製歷史波動率
我下載了 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 文章。