如何将以下数据转换为zoo / xts / tseries对象来计算最大亏损?

时间:2013-02-27 04:51:01

标签: r xts

如何将以下数据转换为zoo / xts / tseries对象,以使用函数Return.calculate和Maxdrawdown函数计算最大亏损?

朋友您好我拥有单一csv中约400股票的特定价格(例如CENTURYTEX,AAPL,RIL等)。

我想计算最大亏损。计算我正在尝试的回报

ret=by[ddr3csv[,4],ddr3csv[,2],
                   function(x)Return.calculate(x,method="simple")]

正在给予'关闭'不是子集表格'错误。

一旦获得回报,发现最大缩编将很容易。我正在搜索错误,但无法弄清楚。

rownum     name     code       date    price    readings

86916 CENTURYTEX 500040 11/04/2011 364.60     2994

86917 CENTURYTEX 500040 13/04/2011 376.70     2994

86918 CENTURYTEX 500040 15/04/2011 370.90     2994

86919 CENTURYTEX 500040 18/04/2011 365.85     2994

1 个答案:

答案 0 :(得分:2)

首先,您需要将[更改为((,所以

ret=by[ddr3csv[,4],ddr3csv[,2],
                   function(x)Return.calculate(x,method="simple")]

library(PerformanceAnalytics)
ret=by(ddr3csv[,4],ddr3csv[,2],FUN=
                   function(x)Return.calculate(x,method="simple"))

没有数据,我无法做到更好。我想你把你的价格换成长格式并使用csv的colmun 2来区分不同的股票。

修改

你需要:

  • 按代码分割您的数据
  • 为每个组创建一个xts对象
  • 计算drawdows组件。

    ## I read the data 
    ddr3csv <- read.table(text = 'rownum     name     code       date    price    readings
                                  86916 CENTURYTEX 500040 11/04/2011 364.60     2994
                                  86917 CENTURYTEX 500040 13/04/2011 376.70     2994
                                  86918 CENTURYTEX 500040 15/04/2011 370.90     2994
                                  86919 CENTURYTEX 500040 18/04/2011 365.85     2994',head=T)
    ## I coerce to Date , because xts needs numeric values as index
    ddr3csv$date<- as.Date(dat$date,format='%d/%m/%Y')
    ## I keep only computational columns (avoid naming/memory problems)
    dat <- ddr3csv[,c('code','date','price')]
    library(plyr)
    ddply(dat,.(code), function(x){
              x.xts <- xts(x$price,x$date)
             unlist(findDrawdowns (Return.calculate(x.xts,method="simple")))
    })
    

这是我的结果

    code return from trough to length peaktotrough recovery
    1 500040      0    1      1  4      4            1        3