2012年5月16日水曜日

【R】【ファイナンス】ヒストリカルボラティリティを計算してみる

ヒストリカルボラティリティ(HV)を計算できるプログラムをRで書いていました.

20日間で計測することが多いようなので、計算式は以下のようにしています.

HV = 20日間の対数収益率の標準偏差 × 250の平方根

HVは過去の株価の変動が大きくなれば大きくなり、一定の割合ならば小さくなります.

HV導出に用いたデータはyahoo! financeから取得しています.
データ:Nikkei 225
サンプル期間:2012年1月4日〜5月14日

Rスクリプト
#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")



赤線が対数収益率、青線がHVを表しています.4月の半ば頃からHVが高くなっている様子が伺えます.

参考書


「R言語逆引きハンドブック」はRコードを書くときにお世話になりました.

応援よろしくです.

0 件のコメント:

コメントを投稿