如何解决使用不同日期的重复功能?

时间:2019-05-02 02:30:04

标签: r date xts

我需要在2013年10月至2018年10月的某个时间段内对股票进行一段时间的工作,例如AKER["2013-11-19/2018-11-19"]。然后这次又要工作了,但离日期更近一年我像这样AKER["2014-11-19/2018-11-19"]进行设置。然后再说一次。再来一次。

  

这就是我得到的:

resistence_line_by_volume <- function(x) {
open_prices <- x[,1]
close_prices <- x[,4]
volume_amount <- x[,5]
average_open_and_close <- (open_prices + close_prices)/2
weighet_price_volume <- (average_open_and_close*volume_amount)/sum(volume_amount)
result <- sum(weighet_price_volume)
result
}

getSymbols("AKER")
[1] "AKER"

 resistence_line_by_volume(AKER["2013-11-19/2018-11-19")
[1] 3.353938

resistence_line_by_volume(AKER["2014-11-19/2018-11-19")
[1] 3.319899

resistence_line_by_volume(AKER["2015-11-19/2018-11-19")
[1] 3.290728

resistence_line_by_volume(AKER["2016-11-19/2018-11-19")
[1] 3.256264

resistence_line_by_volume(AKER["2017-11-19/2018-11-19")
[1] 3.191081
  

这就是我所需要的(某些版本):

resistence_line_by_volume(AKER["2013-11-19/2018-11-19")
[1] 3.353938
[2] 3.319899
[3] 3.290728
[4] 3.256264
[5] 3.191081

如何在每次关闭一年的时间里重复所有这些功能?

1 个答案:

答案 0 :(得分:1)

如果日期数量有限,我们可以手动创建日期向量

library(quantmod)
dates <- c("2013-11-19/2018-11-19","2014-11-19/2018-11-19","2015-11-19/2018-11-19",
           "2016-11-19/2018-11-19", "2017-11-19/2018-11-19")

,然后使用任何循环技术来循环datessapplylapplymapfor循环等)

sapply(dates, function(x) resistence_line_by_volume(AKER[x]), USE.NAMES = FALSE)
#[1] 3.327881 3.294591 3.266057 3.232329 3.168454

或者我们也可以使用seq

以编程方式生成日期
dates <- paste(seq(as.Date("2013-11-19"), length.out = 5, by = "year"),
               "2018-11-19", sep = "/")

sapply(dates, function(x) resistence_line_by_volume(AKER[x]), USE.NAMES = FALSE)
#[1] 3.327881 3.294591 3.266057 3.232329 3.168454