No evidence of declining volatility for Bitcoins
Matthew Martin
1/22/2014 10:43:00 PM
Tweetable
Now here's Robert Sams, in rebuttal:
"But the claim that “there is a clear trend of falling volatility over time” isn’t defensible at all."Sams replicated Dourado's results, and then did his own analysis to suggest that Dourado's regression wasn't valid. In particular, Sams ran essentially the same regression, but on a rolling 2-year window to show how the coefficient estimate is evolving over time as new data comes in:
"I don’t like using trend lines in analysing financial timeseries."No, I suppose I don't like that either.
Listen, we have a term for time series whose time-trends shift over time--it's "non-stationary." How did two economists do regressions on a time series, and yet no one has 1)tested for stationarity or 2)done any time-series econometrics? We have tools for these kinds of questions!
Ok, now that I'm done snarking, I will say that Sams is exactly correct, if a little imprecise. Dourado's error is in assuming that the series he was regressing was stationary when such an assumption cannot be supported. Like Sams, I have also replicated Dourado's results:

library(TTR)
bit = read.table("http://blockchain.info/charts/market-price?showDataPoints=false×pan=all&show_header=true&daysAverageString=1&scale=0&format=csv&address=",header=FALSE, col.names=c("Date","Close"), fill=TRUE,sep=",")
bit$Date<- as.Date(bit$Date,"%d/%m/%Y %H:%M:%S")
subbit = bit[which(bit$Close>0),]
ohlc <- subbit[,"Close"]
subbit$vClose <- volatility(subbit$Close, calc="close", N=365)
sub2bit = subbit[which(subbit$vClose>=0),]
ols=lm(sub2bit$vClose~sub2bit$Date)
plot(sub2bit$Date, sub2bit$vClose, xlab="Date", ylab="30-Day Rolling Standard Deviation in Daily Returns", type="n", main="Volatility of Bitcoin Prices")
lines(sub2bit$Date, sub2bit$vClose, type="l")
lines(sub2bit$Date, sub2bit$predict, type="l")
abline(ols)
summary(ols)
library(forecast)
ndiffs(sub2bit$vClose, alpha=0.05, test=c("kpss", "adf", "pp"))
Ok, let's look at this from a different angle. A more precise description of Dourado's hypothesis is that the time-trend in question has a below-zero drift term in the data-generating process. Well, here's that:
The bottom line here is that Dourado aint got it. I cannot tell you which way Bitcoin volatility is going, but I can tell you that Dourado can't either.
Full R code below:
library(TTR)
bit = read.table("http://blockchain.info/charts/market-price?showDataPoints=false×pan=all&show_header=true&daysAverageString=1&scale=0&format=csv&address=",header=FALSE, col.names=c("Date","Close"), fill=TRUE,sep=",")
bit$Date<- as.Date(bit$Date,"%d/%m/%Y %H:%M:%S")
subbit = bit[which(bit$Close>0),]
ohlc <- subbit[,"Close"]
subbit$vClose <- volatility(subbit$Close, calc="close", N=365)
sub2bit = subbit[which(subbit$vClose>=0),]
ols=lm(sub2bit$vClose~sub2bit$Date)
plot(sub2bit$Date, sub2bit$vClose, xlab="Date", ylab="30-Day Rolling Standard Deviation in Daily Returns", type="n", main="Volatility of Bitcoin Prices")
lines(sub2bit$Date, sub2bit$vClose, type="l")
lines(sub2bit$Date, sub2bit$predict, type="l")
abline(ols)
summary(ols)
library(forecast)
ndiffs(sub2bit$vClose, alpha=0.05, test=c("kpss", "adf", "pp"))
vCloseArima=auto.arima(sub2bit$vClose, ic="bic")
vCloseArima
(1-pnorm(abs(vCloseArima$coef)/sqrt(diag(vCloseArima$var.coef))))*2
dourado=Arima(sub2bit$vClose,order=c(0,1,0), include.drift=TRUE)
dourado
(1-pnorm(abs(dourado$coef)/sqrt(diag(dourado$var.coef))))*2