20日間で計測することが多いようなので、計算式は以下のようにしています.
HV = 20日間の対数収益率の標準偏差 × 250の平方根
HVは過去の株価の変動が大きくなれば大きくなり、一定の割合ならば小さくなります.
HV導出に用いたデータはyahoo! financeから取得しています.
データ:Nikkei 225
データ:Nikkei 225
サンプル期間:2012年1月4日〜5月14日
Rスクリプト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#20日間のHVをまとめて表示 | |
#yahoo! Financeから情報取得 | |
test2 <- read.csv("table.csv", header = T) | |
attach(test2) | |
#標本分散 | |
variance <- function(xx){ | |
(var(xx, na.rm = T) * length(xx - 1)) / length(xx) | |
} | |
#対数収益率を計算 | |
rat <- c() | |
for(ii in 2:length(Date)){ | |
rat[ii] <- log(Close[ii]/Close[ii - 1]) * 100 | |
} | |
#HVを20日間計算 | |
dd <- c() | |
for(ii in 1:length(Date)){ | |
diff <- length(Date) - 19 | |
cc <- c() | |
cc <- rat[(ii+1):(ii+20)] | |
if(ii <= diff){ | |
dd[ii] <- sqrt(variance(cc)) * sqrt(250) | |
} | |
else { | |
break | |
} | |
} | |
#作成した対数収益率とHVをデータフレームに追加 | |
temp <- rev(dd) | |
temp <- c(temp, rep(NA, 19)) | |
temp <- rev(temp) | |
test2 <- transform(test2, "Return"=rat ,"HV"=temp) | |
#対数収益率とHVをプロット | |
par(mar=c(5, 5, 4, 5) + 0.1) | |
plot(test2$Return, type="l", ylim=c(-4,4), xlab="", ylab="", col="red") | |
par(new=T) | |
plot(test2$HV, type="l", axes=F, xlab="", ylab="", col="blue") | |
axis(4) | |
mtext("HV", side=4, line=3) | |
title("Rate of Log Return and HV", xlab="Time", ylab="Return") |
図
応援よろしくです.
