如何使用 R 中 tidyquant 包中的 tq_transmute 获取 OHLC 每月高低数据

问题描述

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