0

我是分析时间序列数据的新手,正在寻找一些帮助,从一些 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)

目前,它只是拉动每个月的最后一次观察。相反,我想要第一个开盘价、最高最高价、最低最低价、最后收盘价和总成交量。

4

1 回答 1

1

在撰写本文时:仍然是一个错误,请参阅github 问题 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
于 2021-07-23T09:05:56.357 回答