如何将以下数据转换为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
答案 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来区分不同的股票。
修改强>
你需要:
计算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