R中的tq_mutate()和音量指示器

时间:2018-10-26 18:57:25

标签: r tidyquant

我正在使用R中的tidyquant软件包来计算SP500中每个符号的指标。

作为代码示例:

library(tidyverse)

df <- data_frame(
  var = c("buildA.equipA.point", "buildA.equipA.another.point",
          "buildA.equipA.yet.another.point")
)

df2 <- df %>%
  mutate(
    building = gsub("(^[^.]*)(.*$)", "\\1", var),
    equip = gsub("^[^.]*.([^.]+).*", "\\1", var),
    point = gsub("^[^.].*", "\\1", var)
  )

这适用于基于价格的指标,但不适用于包含数量的指标。

我收到“评估错误:缺少参数“ volume”,没有默认值。”

stocks_w_price_indicators<- stocks2 %>%
group_by(symbol)%>%
tq_mutate(select=close,mutate_fun=RSI) %>%
tq_mutate(select=c(high,low,close),mutate_fun=CLV)

如何获取包括交易量在内的指标以正确计算?

1 个答案:

答案 0 :(得分:1)

TTR软件包中的一些功能无法与tidyquant一起使用。原因是它们需要3个输入,例如adjRatios,或者需要HLC对象和卷列,例如CMF函数。通常,您可以使用tq_mutate_xy函数来解决此问题,但是此函数无法处理CMF函数所需的HCL。如果您要使用TTR的OBV函数,该函数需要一个价格和一个交易量列,并且可以与tq_mutate_xy一起正常工作。

现在有2个选项。 CMF函数之一需要进行调整以处理(O)HLCV对象。或两个,创建自己的函数。

最后一个选项是最快的。由于CMF函数的CLV函数调用的内部结构,您可以使用拥有的第一个代码块,并通过常规的dplyr::mutate调用对其进行扩展以计算cmf。

# create function to calculate the chaikan money flow
tq_cmf <- function(clv, volume, n = 20){
  runSum(clv * volume, n)/runSum(volume, n)
}

stocks_w_price_indicators <- stocks2 %>%
  group_by(symbol) %>%
  tq_mutate(select = close, mutate_fun = RSI) %>%
  tq_mutate(select = c(high, low, close), mutate_fun = CLV) %>%
  mutate(cmf = tq_cmf(clv, volume, 20))


# A tibble: 5,452 x 11
# Groups:   symbol [2]
   symbol date        open  high   low close   volume adjusted   rsi    clv   cmf
   <chr>  <date>     <dbl> <dbl> <dbl> <dbl>    <dbl>    <dbl> <dbl>  <dbl> <dbl>
 1 MSFT   2008-01-02  35.8  36.0  35    35.2 63004200     27.1    NA -0.542    NA
 2 MSFT   2008-01-03  35.2  35.7  34.9  35.4 49599600     27.2    NA  0.291    NA
 3 MSFT   2008-01-04  35.2  35.2  34.1  34.4 72090800     26.5    NA -0.477    NA
 4 MSFT   2008-01-07  34.5  34.8  34.2  34.6 80164300     26.6    NA  0.309    NA
 5 MSFT   2008-01-08  34.7  34.7  33.4  33.5 79148300     25.7    NA -0.924    NA
 6 MSFT   2008-01-09  33.4  34.5  33.3  34.4 74305500     26.5    NA  0.832    NA
 7 MSFT   2008-01-10  34.3  34.5  33.8  34.3 72446000     26.4    NA  0.528    NA
 8 MSFT   2008-01-11  34.1  34.2  33.7  33.9 55187900     26.1    NA -0.269    NA
 9 MSFT   2008-01-14  34.5  34.6  34.1  34.4 52792200     26.5    NA  0.265    NA
10 MSFT   2008-01-15  34.0  34.4  34    34   61606200     26.2    NA -1        NA