gpt4 book ai didi

Rollapply 和 xts。我可以输出窗口中最大值的时间吗?

转载 作者:行者123 更新时间:2023-12-02 03:28:24 26 4
gpt4 key购买 nike

我正在通过 quantmod 研究一些雅虎财务数据。

我如何不仅确定数据滚动窗口中的最高和最低价格,而且还确定这些高点和低点的确切时间戳?我已经尝试使用 rollapply 尝试 which.max() ,但这仅报告滚动窗口本身中值的 seq,而不是保存时间戳的行的 .index() 。

有人可以提出解决方案吗?

下面是一个可重现的示例,以及我想要的一些示例输出...

> library(quantmod)
> getSymbols("BET.L")
xmin <- rollapply(BET.L$BET.L.Close,10,min, ascending = TRUE)
names(xmin) <- "MinClose"

xmax <- rollapply(BET.L$BET.L.Close,10,max, ascending = TRUE)
names(xmax) <- "MaxClose"

head(cbind(BET.L$BET.L.Close, as.xts(xmax), as.xts(xmin)),15)
BET.L.Close MaxClose MinClose
2010-10-22 1550.00 NA NA
2010-10-25 1546.57 NA NA
2010-10-26 1545.00 NA NA
2010-10-27 1511.26 NA NA
2010-10-28 1490.00 1550.00 1395
2010-10-29 1435.00 1546.57 1381
2010-11-01 1447.00 1545.00 1347
2010-11-02 1420.00 1511.26 1347
2010-11-03 1407.00 1490.00 1347
2010-11-04 1395.00 1447.00 1347
2010-11-05 1381.00 1447.00 1347
2010-11-08 1347.00 1490.00 1347
2010-11-09 1415.00 1490.00 1347
2010-11-10 1426.00 1490.00 1347
2010-11-11 1430.00 1490.00 1347

我想要生成的输出类型如下所示:

           BET.L.Close MaxClose MinClose    MaxDate    MinDate
2010-10-22 1550.00 NA NA NA NA
2010-10-25 1546.57 NA NA NA NA
2010-10-26 1545.00 NA NA NA NA
2010-10-27 1511.26 NA NA NA NA
2010-10-28 1490.00 1550.00 1395 2010-10-22 2010-11-04
2010-10-29 1435.00 1546.57 1381 2010-10-25 2010-11-05

理想情况下,我采取的任何方法都必须考虑到常见的重复价格这一事实,在这种情况下,我会命令我的窗口获取第一个最大值和最后一个最小值。

最佳答案

这个计划有一个大问题。 coredata 元素是一个矩阵,因此所有元素必须是无类的并且具有相同的模式。 xts 对象中不能包含 Date 类的对象,如果您坚持使用字符类,那么它将强制所有其他元素也是字符。因此,理解了这一点,仍然可以通过计算 which.max 结果,然后创建一个以 which.max 值作为偏移量的行号来执行某些操作,最后使用该结果作为对象的索引。 (很抱歉双重使用“which”和“index”。希望代码能清楚地表达含义。)

xmin <- rollapply(BET.L$BET.L.Close,10,min)
names(xmin) <- "MinClose"

xmax <- rollapply(BET.L$BET.L.Close,10,max, ascending = TRUE)
names(xmax) <- "MaxClose"
head(dat <- cbind(BET.L$BET.L.Close, as.xts(xmax), as.xts(xmin)),15))

w.MaxDate <- rollapply(BET.L$BET.L.Close,10, which.max)
names(w.MaxDate) <- "w.maxdt"
dat <- cbind(dat, as.xts(w.MaxDate) )
dat<-cbind(dat,as.xts(seq.int(236), order.by=index(dat)))
> head(dat)
BET.L.Close MaxClose MinClose w.maxdt ..2
2010-10-22 1550.00 NA NA NA 1
2010-10-25 1546.57 NA NA NA 2
2010-10-26 1545.00 NA NA NA 3
2010-10-27 1511.26 NA NA NA 4
2010-10-28 1490.00 1550.00 1395 1 5
2010-10-29 1435.00 1546.57 1381 1 6
dat$maxdate <- xts( index(dat)[dat$..2-5+dat$BET.L.Close.1], order.by=index(dat))
> head(dat)
BET.L.Close MaxClose MinClose w.maxdt ..2 maxdate
2010-10-22 1550.00 NA NA NA 1 NA
2010-10-25 1546.57 NA NA NA 2 NA
2010-10-26 1545.00 NA NA NA 3 NA
2010-10-27 1511.26 NA NA NA 4 NA
2010-10-28 1490.00 1550.00 1395 1 5 14904
2010-10-29 1435.00 1546.57 1381 1 6 14907

所以我得到了日期的整数表示。只需查看输入向量的头部,您就可以看到它们是正确的值:

> head(index(dat)[dat$..2-5+dat$w.maxdt])
[1] NA NA NA NA "2010-10-22" "2010-10-25"

关于Rollapply 和 xts。我可以输出窗口中最大值的时间吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7613460/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com