[英]Using quantmod periodReturn with an index of variables in the environment
我编写了以下函数来自动评估错过给定股票的最佳/最差交易日的影响。 不幸的是,函数的一部分似乎失败了:
library(quantmod)
missingDays<- function(ticker,dmiss=10,type="best",period="days",fdate="2000-01-01",tdate=Sys.Date()) {
getSymbols(ticker,from=fdate,to=tdate) #quantmod to pull ticker info
d<-get(ls()[1])
x<-as.data.frame(periodReturn(Cl(d),period=period))
x<- x[order(x[1]),]
if(type=="best") {
(((mean(x[1:(length(x)-dmiss)],na.rm=TRUE)+1)^(251))-1)*100 #average daily return, annualized
} else {
(((mean(x[dmiss:(length(x))],na.rm=TRUE)+1)^(251))-1)*100 #average daily return, annualized
}
}
missingDays("^GSPC",10,type="best",period="daily",fdate="2000-01-01")
这两行代码中明显出现错误:
d<-get(ls()[1])
x<-as.data.frame(periodReturn(Cl(d),period=period))
这很奇怪,因为当我直接运行它而不是函数时,它运行正常。 它似乎无法将d
识别为xts对象。
如果我错过明显的事情,我深表歉意-我已经有一段时间了。
非常感谢您的帮助。
不要在函数中使用类似的getSymbols
。 设置auto.assign=FALSE
和分配的输出getSymbols
到d
直接:
d <- getSymbols(ticker,from=fdate,to=tdate,auto.assign=FALSE)
这些都在?getSymbols
中详细描述。 我鼓励您仔细阅读它。
更新:
现在我missingDays
,对于missingDays
函数来说,接受来自getSymbols
的调用的输出可能会更好。 然后,您将不必下载不同参数集的数据。
missingDays <- function(symbol, dmiss=10, type="best", period="daily",
fdate="2000-01-01", tdate=Sys.Date()) {
x <- as.data.frame(periodReturn(Cl(symbol),period=period))
x <- x[order(x[1]),]
if(type=="best") {
#average daily return, annualized
(((mean(x[1:(length(x)-dmiss)],na.rm=TRUE)+1)^(251))-1)*100
} else {
#average daily return, annualized
(((mean(x[dmiss:(length(x))],na.rm=TRUE)+1)^(251))-1)*100
}
}
getSymbols("^GSPC", from="2000-01-01")
missingDays(GSPC)
那是因为ls
正在评估函数envir。 使用.GlobalEnv
可以在全局环境中查找它。
d <- get(ls(envir = .GlobalEnv), envir = .GlobalEnv)
我不确定是否需要get函数的环境。 但我想它不会受到伤害。
HTH
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.