В пакете 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