我从保留日期的 get.hist.quote 以动物园对象的形式获得了每日收盘价。计算和修剪日志返回以删除 NA 值。
stockEBAY$Data 将日期重新训练为 x 值,以便以后使用 autoplot.zoo 进行绘图 stockEBAY$LogReturns 将日期重新训练为 x 值,以便以后使用 autoplot.zoo 进行绘图
library("tseries")
library("zoo")
library("ggplot2")
AnalyzeStock <- function(ticker){
DailyClosingPrice <- get.hist.quote(ticker,quote="Close",quiet=TRUE)
logreturns <- log(lag(DailyClosingPrice))-log(DailyClosingPrice)
logreturns <- na.trim(logreturns, sides = "both")
list(Data=DailyClosingPrice, LogReturns=logreturns)
}
stockEBAY <- AnalyzeStock("EBAY")
autoplot.zoo(stockEBAY$Data) +
xlab("Year") + ylab("Closing Price (U.S. Dollars)")
但是要创建波动性,我必须基于该函数创建一个新的数据框,但我不知道如何编写它,以便将来自 stockEBAY$LogReturns 的原始日期保留在新数据框中。
Vol <- function(d, logreturns)
{
var = 0
lam = 0
varlist <- c()
for (r in logreturns) {
lam = lam*(1 - 1/d) + 1
var = (1 - 1/lam)*var + (1/lam)*r^2
varlist <- c(varlist, var)
}
sqrt(varlist)
}
#retrieve volatility for decays 10, 30, and 100
vol10 <- Vol(10,stockEBAY$LogReturns)
vol30 <- Vol(30,stockEBAY$LogReturns)
vol100 <- Vol(100,stockEBAY$LogReturns)
plot(vol10,type="l",xlab="Year",ylab="Volatility")
lines(vol30,type="l", col="red")
lines(vol100,type="l",col="blue")
覆盖波动率图,但日期没有保留为 x 轴,而是现在是索引,这弄乱了图表
vol10、vol30、vol100 都以 x 轴为索引,但缺少原始日期。
我希望 vol10、vol30 和 vol100 的新数据帧都保留来自 stockEBAY$LogReturns 的原始日期。
或者,是否有可能将新的波动率列附加到原始 stockEBAY$LogReturns 数据框?
我需要一种方法来更简洁地从函数中求解波动率列,并将原始动物园对象的日期保留到新的数据框中,以便以后进行绘图叠加。
只要我可以绘制并叠加 3 个波动率列,以便将 x 轴保留为日期,而不是索引,这就是目标。
谢谢
编辑:动物园对象令人沮丧,....这不好用
> stockEBAY$LogReturns$vol10 <- Vol(10,stockEBAY$LogReturns)
Error in NextMethod("[<-") :
number of items to replace is not a multiple of replacement length
In addition: Warning messages:
1: In doTryCatch(return(expr), name, parentenv, handler) :
invalid graphics state
2: In doTryCatch(return(expr), name, parentenv, handler) :
invalid graphics state
> stockEBAY$LogReturns$vol30 <- Vol(30,stockEBAY$LogReturns)
Error: all(sapply(args, function(x) is.zoo(x) || !is.plain(x) || (is.plain(x) && .... is not TRUE
> stockEBAY$LogReturns$vol100 <- Vol(100,stockEBAY$LogReturns)
Error: all(sapply(args, function(x) is.zoo(x) || !is.plain(x) || (is.plain(x) && .... is not TRUE
> autoplot.zoo(stockEBAY$LogReturns$vol10)