2011年10月30日日曜日

VIXの曜日別リターンを吟味する。

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 件のコメント:

コメントを投稿