我希望能够计算给定股票 52 周(或一年)的高点和低点并将其包含到我的数据框中。
计算 52 周的数据。一年的高点/低点
library(tidyquant)
bhp <- tq_get("bhp")
我为计算高/低而构建的函数
one_yea_high_low <- function(df, start, end){
require(tidyverse)
df1 <- df %>% filter(date <= end & date >= start)
one_yr_high <- df1 %>% select(high) %>% as.vector %>% max() %>% as.data.frame()
one_yr_low <- df1 %>% select(low) %>% as.vector %>% min() %>% as.data.frame()
df3 <- bind_cols(one_yr_high, one_yr_low)
colnames(df3) <- c("yr_high", "yr_low")
return(df3)
}
它一次只用于一个搜索:
start_date <- min(bhp$date)
end_date <- start_date + years(1)
one_yea_high_low(bhp, start_date, end_date)
yr_high yr_low
1 87.43 36.37
但我无法在整个数据帧上对其进行矢量化
这不起作用(真可惜!)
map(bhp$date, ~one_yea_high_low(df = bhp, start = (.x - years(1)), end = .x))
Show Traceback
Rerun with Debug
Error in FUN(X[[i]], ...) :
only defined on a data frame with all numeric variables
关于如何解决这个问题并将最终结果包含回主 df 的任何想法。
我真的很想使用日期来计算滚动窗口,因为我拥有的数据有差距,即未交易的天数等。