问题描述
我是分析时间序列数据的新手,正在寻找一些帮助来从一些 OHLC 数据中拉出每月的最高价和最低价。当我尝试汇总每月的开盘价、最高价、最低价和收盘价时,只会拉取每个月最后一天的值,而不是每个月的最高(最高)和最低(最低)。非常感谢任何帮助。
library(tidyquant)
library(tidyverse)
amzn.prices <- tq_get("AMZN",get = "stock.prices",from = '2010-12-31',to = "2013-12-31")
monthly.amzn <- tq_transmute(amzn.prices,mutate_fun = to.monthly)
目前,它只是拉取每个月的最后一次观察。相反,我想要第一次开盘、最高最高价、最低最低价、最后一次收盘价和总成交量。
解决方法
在撰写本文时:仍然是一个错误,请参阅 github issue 148。
一种可能的解决方法,使用 tidyr、timetk 和 purrr。使用 timetk 将数据转换为 xts 格式,将数据转换为每月(或任何其他时间段)并转换回 data.frame 格式。包括来自 tidyr 的 nest 和 unnest 以及来自 purrr 的 map。
即使对于多个股票代码,以下代码也能解决您的问题。
library(tidyquant)
library(dplyr)
library(tidyr)
library(timetk)
amzn.prices <- tq_get("AMZN",get = "stock.prices",from = '2010-12-31',to = "2013-12-31")
monthly.amzn <- amzn.prices %>%
group_by(symbol) %>%
nest() %>%
mutate(data = purrr::map(data,function(x) x %>%
select(date,Open = open,High = high,Low = low,Close = close,Volume = volume) %>%
tk_xts(x,select = c(Open,High,Low,Close,Volume),date_var = date) %>%
to.monthly %>%
tk_tbl)) %>%
unnest(data) %>%
rename_with( ~ tolower(gsub("..","",.x,fixed = T))) %>%
rename(date = index)
# A tibble: 37 x 7
# Groups: symbol [1]
symbol date open high low close volume
<chr> <yearmon> <dbl> <dbl> <dbl> <dbl> <dbl>
1 AMZN dec 2010 182. 182. 180. 180 3451900
2 AMZN jan 2011 181. 192. 167. 170. 113611300
3 AMZN feb 2011 171. 191. 170. 173. 95776400
4 AMZN mrt 2011 174. 182. 161. 180. 118979100
5 AMZN apr 2011 182. 198. 175. 196. 116749400
6 AMZN mei 2011 197. 206. 191. 197. 106274500
7 AMZN jun 2011 196. 206. 182. 204. 95563700
8 AMZN jul 2011 206. 227. 204. 223. 92808500
9 AMZN aug 2011 225 227. 177. 215. 155194700
10 AMZN sep 2011 215. 244 204. 216. 143623300