Индикаторы tq_mutate () и Volume в R - PullRequest
       9

Индикаторы tq_mutate () и Volume в R

0 голосов
/ 26 октября 2018

Я использую пакет tidyquant в R для вычисления показателей для каждого символа в 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)

Это работает для индикаторов, основанных на цене, но не для индикаторов, которые включают объем.

Я получаю «Ошибка оценки: отсутствует аргумент« объем », по умолчанию нет».

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)

Как я могу получить показатели, которые включают объем для правильного расчета?

1 Ответ

0 голосов
/ 27 октября 2018

В пакете TTR есть несколько функций, которые нельзя использовать с tidyquant. Причина в том, что им нужно 3 входа, например adjRatios, или объект HLC и столбец объема, например, функция CMF. Обычно это можно решить с помощью функции tq_mutate_xy, но она не может обработать HCL, необходимый для функции CMF. Если вы используете функцию 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
...