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