我正在使用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)
如何获取包括交易量在内的指标以正确计算?
答案 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