1

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

您好朋友,我在单个 csv 中有大约 400 种股票的股票(例如 CENTURYTEX、AAPL、RIL 等)特定的 eod 价格。

我想计算最大回撤。为了计算回报,我正在尝试

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
4

1 回答 1

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
于 2013-02-27T05:05:41.647 回答