我正在编写一个脚本来计算S&P 500的标准差,并希望将滚动标准差与SD的长期平均值进行比较。
我可以使我的密码工作,但似乎有点笨拙。我想问两个问题,让我的代码更容易理解。
的代码
GSPC.new <- merge(GSPC.new,rollapply(GSPC.new$GSPC.adj.ret, 252, sd)) gspc.avg10yr <- mean(na.omit(GSPC.new$GSPC.adj.std.annualised["2011/2022"]))下面的所有代码都可以直接在RStudio中执行。
library(tidyverse)
library(quantmod)
library(ggplot2)
tickers <- c("^HSI","^GSPC")
getSymbols(Symbols = tickers,
src = "yahoo",
index.class = "POSIXct",
from = "1997-01-01")
GSPC.new <- na.omit(GSPC)
GSPC.new <- merge(GSPC.new, dailyReturn(GSPC.new$GSPC.Adjusted))
colnames(GSPC.new)[7] <- "GSPC.adj.ret"
GSPC.new <- merge(GSPC.new,rollapply(GSPC.new$GSPC.adj.ret, 252, sd)) # how to annualised both tickers in one line
colnames(GSPC.new)[8] <- "GSPC.adj.std"
GSPC.new <- merge(GSPC.new, GSPC.new$GSPC.adj.std*sqrt(252))
colnames(GSPC.new)[9] <- "GSPC.adj.std.annualised"
GSPC.new.tbl <- as_tibble(fortify(GSPC.new))
p.gspc <- ggplot(GSPC.new.tbl, aes(x=Index,y=GSPC.adj.std.annualised))
p.gspc + geom_line()
gspc.avg10yr <- mean(na.omit(GSPC.new$GSPC.adj.std.annualised["2011/2022"])) # is it possible to do in tibble way?
gspc.avg15yr <- mean(na.omit(GSPC.new$GSPC.adj.std.annualised["2006/2022"]))
gspc.avg20yr <- mean(na.omit(GSPC.new$GSPC.adj.std.annualised["2001/2022"]))
gspc.avg25yr <- mean(na.omit(GSPC.new$GSPC.adj.std.annualised["1997/2022"]))
p.gspc + geom_line()+
geom_hline(yintercept = gspc.avg10yr, color = "red")+
geom_hline(yintercept = gspc.avg15yr, color = "blue")+
geom_hline(yintercept = gspc.avg20yr, color = "green")+
geom_hline(yintercept = gspc.avg25yr, color = "black")发布于 2022-02-25 14:24:40
将滴答数据放在环境中,例如,迭代计算列表( ret.list )中返回的代码标记名,然后将其形成一个xts对象ret。由此计算标准化的年化返回( std_ann )作为xts对象。
要创建该图,请创建一个网格数据框架g,从中数据框架意味着使用列Series、col (colors)和在geom_hline中使用的方法。“自动绘图”将使用“系列”来引用面,而geom_hline将使用“系列”列将每条水平线与适当的面相匹配。
只使用下面列出的包(以及它们所依赖的包)。
library(quantmod)
library(ggplot2)
tickers <- c("^HSI","^GSPC")
yrs <- c(red = 10, green = 15, blue = 20, black = 25)
getSymbols(Symbols = tickers, env = e <- new.env(), from = "1997-01-01")
ret.list <- Map(function(nm) dailyReturn(na.omit(Ad(e[[nm]]))), ls(e))
ret <- setNames(do.call("merge", ret.list), names(ret.list))
std_ann <- rollapplyr(ret, 252, function(x) sqrt(252) * sd(x, na.rm = TRUE))
g <- expand.grid(Series = names(std_ann), col = names(yrs),
stringsAsFactors = FALSE)
meansfun <- function(Series, col) {
st <- as.Date(as.yearqtr(2022-yrs[[col]]-1))
mean(window(std_ann[, Series], start = st), na.rm = TRUE)
}
Means <- transform(g, means = mapply(meansfun, Series, col))
autoplot(std_ann) +
geom_hline(aes(yintercept = means), Means, col = Means$col) +
xlab("")

https://stackoverflow.com/questions/71246861
复制相似问题