# Calculate and plot historical volatility with Python

I have downloaded historical data for FTSE from 1984 to now. What I would like to do is to graph volatility as a function of time. What I have written is:

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]
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]

# Calculate returns
returns = []
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()


So I first load the data and then calculate the log returns and also take the average; moreover, I calculate the standard deviation for every pair of numbers in my log returns. Is my reasoning correct? In this case I haven't averaged at all for the standard deviation formula, since N-1 = 2-1=1.

• That's a 1 day estimate of volatility, which is fine, but is going to be very "noisy" (i.e. subject to random fluctuations). People usually average over a short period of time (such as 20 days or 120 days, etc.) to get a more stable and well behaved estimator of volatility. May I ask what the purpose of this calculation is ? Sep 5 '15 at 21:25
• @Alex C This is just an exercise I'm doing to learn, and also to see potential connections between volatility and actual price. If I decide to average over 20 days, does that mean I need to do this calculation every say i+20 until the end of my list (which I think is around 8500 days since I'm getting data from 1984)? Sep 5 '15 at 21:32