VIXの曜日別リターンを吟味する。
library(quantmod)
day.of.week.ret <- function(vx0, ...){
if(!is.xts(vx0)) vx0 <- getSymbols(vx0, auto.assign=F, ...)
# opeingGap と intraday gap
vx <- cbind((Op(vx0)-Lag(Cl(vx0)))/(Op(vx0)),OpCl(vx0))
vx <- vx[-1,] #最初のNAを取る
vx <- cbind(format(index(vx), "%Y%U"),format(index(vx),"%w"), vx)
names(vx)[1:4] <- c("yw","dw","Ogap","Dgap")
dt <- data.frame(date=index(vx),coredata(vx))
print(table(ddply(dt, .(yw), nrow)[,2]))
##>> 1 3 4 5
##>> 3 3 39 209
## 分断が多い。
## %U では起点が毎年来てしまうので、データの最初の点からの数え週にする。
dt <- dt[-(1:(which(dt$dw==1)[1]-1)),]
dt <- dt[-((tail(which(dt$dw==5),1)+1):nrow(dt)),] #最後も一日だけなので、除去
dt$diff <- dt[,1] - dt[1,1] #起点からの日数
dt$diff <- floor(dt$diff/7)
print(table(ddply(dt, .(diff), nrow)[,2]))
#>> 4 5
#>> 41 209
# これで年末年始の分断が消えた。
dt <- ddply(dt, .(diff), subset, length(date)>3)
r1 <- ddply(dt, .(diff), subset, date == min(date))
r2 <- ddply(dt, .(diff), subset, date == sort(date)[2])
r5 <- ddply(dt, .(diff), subset, date == max(date))
r4 <- ddply(dt, .(diff), subset, date == sort(date,decreasing=T)[2])
r3 <- ddply(dt, .(diff), subset, date == sort(date)[3] & length(date)==5)
sapply(list(r1,r2,r3,r4,r5), nrow)
##>>[1] 250 250 209 250 250
##3番目にしわ寄せた。
raw.dt <- rbind(transform(r1, rdw=1),transform(r2, rdw=2),
transform(r3, rdw=3),transform(r4, rdw=4),transform(r5, rdw=5))
ret0 <- sapply(list(r1,r2,r3,r4,r5), function(x){ c(mean(x$Ogap),mean(x$Dgap))})*100
ret1 <- rbind(ret0, apply(ret0, 2, sum))
ret2 <- cbind(ret1, apply(ret1, 1, sum))
ret2 <- as.data.frame(ret2)
names(ret2) <- c("mon","tue","wed","thu","fri","sum")
row.names(ret2) <- c("open","intra","sum")
list(ret = ret2, period = range(dt$date), dt = raw.dt)
}
0 件のコメント:
コメントを投稿