0

我正在使用 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)

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

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

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)

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

4

1 回答 1

2

TTR 包中的一些函数不能与 tidyquant 一起使用。原因是他们需要 3 个输入,如adjRatios或需要一个 HLC 对象和一个卷列,如CMF函数。通常你会通过使用该tq_mutate_xy函数来解决这个问题,但这个函数无法处理HCLCMF 函数所需的问题。如果您要使用OBV来自 TTR 的函数,该函数需要价格和数量列并且与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
于 2018-10-27T12:54:45.017 回答