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

tq_mutate() and Volume indicators in R

我正在使用 R 中的 tidyquant 包来计算 SP500 中每个交易品种的指标。

作为代码示例:

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)

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

我得到 "Evaluation error: argument "volume" is missing, with no default."

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

如何获得包含交易量的指标以正确计算?

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