使用 tq_mutate 添加指标会生成重复的列
Adding indicator with tq_mutate generates duplicated columns
我不明白为什么我得到两次 ATR 和 DonchianChannel 列,所以最后 tibble 有 ATR 和 ATR.1 列,还有 DonchianChannel 和 DonchianChannel.1 列。这些值也彼此不同?有人可以帮忙吗?谢谢
tq_get(c("DTE.DE", "SAP.DE"), get = "stock.prices", from = "2017-12-01") %>%
group_by(symbol) %>%
tq_mutate(select = c("high", "low", "close"), n=14, mutate_fun = ATR) %>%
tq_mutate(select = c("high", "low"), mutate_fun = DonchianChannel)
# A tibble: 38 x 15
# Groups: symbol [2]
symbol date open high low close volume adjusted tr atr ATR ATR.1 DonchianChannel mid DonchianChannel.1
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 DTE.DE 2017-12-01 15.065 15.140 14.975 14.975 14796786 14.975 NA NA NA NA NA NA NA
2 DTE.DE 2017-12-04 15.140 15.345 15.050 15.245 13463710 15.245 0.370 NA 15.345 14.975 NA NA NA
3 DTE.DE 2017-12-05 15.335 15.425 15.265 15.275 9877870 15.275 0.180 NA 15.425 15.245 NA NA NA
4 DTE.DE 2017-12-06 15.200 15.425 15.175 15.360 8934058 15.360 0.250 NA 15.425 15.175 NA NA NA
5 DTE.DE 2017-12-07 15.405 15.690 15.370 15.620 13318348 15.620 0.330 NA 15.690 15.360 NA NA NA
6 DTE.DE 2017-12-08 15.710 15.730 15.520 15.520 13255747 15.520 0.210 NA 15.730 15.520 NA NA NA
7 DTE.DE 2017-12-11 15.505 15.505 15.255 15.330 11920247 15.330 0.265 NA 15.520 15.255 NA NA NA
8 DTE.DE 2017-12-12 15.360 15.370 15.160 15.280 10615751 15.280 0.210 NA 15.370 15.160 NA NA NA
9 DTE.DE 2017-12-13 15.270 15.325 15.165 15.200 8826821 15.200 0.160 NA 15.325 15.165 NA NA NA
10 DTE.DE 2017-12-14 15.260 15.270 15.025 15.175 12976932 15.175 0.245 NA 15.270 15.025 15.73 15.3525 14.975
# ... with 28 more rows
在函数文档中,您将读到 TTR::ART
returns 与 HLC 或矩阵相同 class 的对象(如果 try.xts失败)包含以下列: tr
、atr
、trueHigh
和 trueLow
。 TTR::DonchianChannel
returns 与 HL 相同 class 的对象或包含列的矩阵(如果 try.xts 失败): high
, mid
, low
.
tq_mutate
重命名新创建的列,以便它们不与现有列名称冲突。,例如使用 "open"
、"high"
、"low"
and/or "close"
等字符串(这是函数 replace_bad_names
在 tq_mutate
, 看看源代码 here.)
例如,如果您使用 tq_transmute
而不是 tq_mutate
,您可以看到 names
列是 ?TTR::ATR
中提到的列。 (结果是一个只有新创建的列的对象,因此没有命名冲突。)
library(tidyquant)
tq_get(c("DTE.DE", "SAP.DE"), get = "stock.prices", from = "2017-12-01") %>%
group_by(symbol) %>%
tq_transmute(select = c("high", "low", "close"), n = 14, mutate_fun = ATR) %>%
names(.)
[1] "symbol" "date" "tr" "atr" "trueHigh" "trueLow"
所以你的代码工作正常。但是,您可以重命名列以了解它们的含义。
library(tidyquant)
tq_get(c("DTE.DE", "SAP.DE"), get = "stock.prices", from = "2017-12-01") %>%
group_by(symbol) %>%
tq_mutate(select = c("high", "low", "close"), n=14, mutate_fun = ATR) %>%
tq_mutate(select = c("high", "low"), mutate_fun = DonchianChannel) %>%
dplyr::rename(ATR_trueHigh = ATR,
ATR_trueLow = ATR.1,
DC_low = DonchianChannel,
DC_mid = mid,
DC_high = DonchianChannel.1)
同时检查 tq_mutate
的 col_rename
参数。
我不明白为什么我得到两次 ATR 和 DonchianChannel 列,所以最后 tibble 有 ATR 和 ATR.1 列,还有 DonchianChannel 和 DonchianChannel.1 列。这些值也彼此不同?有人可以帮忙吗?谢谢
tq_get(c("DTE.DE", "SAP.DE"), get = "stock.prices", from = "2017-12-01") %>%
group_by(symbol) %>%
tq_mutate(select = c("high", "low", "close"), n=14, mutate_fun = ATR) %>%
tq_mutate(select = c("high", "low"), mutate_fun = DonchianChannel)
# A tibble: 38 x 15
# Groups: symbol [2]
symbol date open high low close volume adjusted tr atr ATR ATR.1 DonchianChannel mid DonchianChannel.1
<chr> <date> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 DTE.DE 2017-12-01 15.065 15.140 14.975 14.975 14796786 14.975 NA NA NA NA NA NA NA
2 DTE.DE 2017-12-04 15.140 15.345 15.050 15.245 13463710 15.245 0.370 NA 15.345 14.975 NA NA NA
3 DTE.DE 2017-12-05 15.335 15.425 15.265 15.275 9877870 15.275 0.180 NA 15.425 15.245 NA NA NA
4 DTE.DE 2017-12-06 15.200 15.425 15.175 15.360 8934058 15.360 0.250 NA 15.425 15.175 NA NA NA
5 DTE.DE 2017-12-07 15.405 15.690 15.370 15.620 13318348 15.620 0.330 NA 15.690 15.360 NA NA NA
6 DTE.DE 2017-12-08 15.710 15.730 15.520 15.520 13255747 15.520 0.210 NA 15.730 15.520 NA NA NA
7 DTE.DE 2017-12-11 15.505 15.505 15.255 15.330 11920247 15.330 0.265 NA 15.520 15.255 NA NA NA
8 DTE.DE 2017-12-12 15.360 15.370 15.160 15.280 10615751 15.280 0.210 NA 15.370 15.160 NA NA NA
9 DTE.DE 2017-12-13 15.270 15.325 15.165 15.200 8826821 15.200 0.160 NA 15.325 15.165 NA NA NA
10 DTE.DE 2017-12-14 15.260 15.270 15.025 15.175 12976932 15.175 0.245 NA 15.270 15.025 15.73 15.3525 14.975
# ... with 28 more rows
在函数文档中,您将读到 TTR::ART
returns 与 HLC 或矩阵相同 class 的对象(如果 try.xts失败)包含以下列: tr
、atr
、trueHigh
和 trueLow
。 TTR::DonchianChannel
returns 与 HL 相同 class 的对象或包含列的矩阵(如果 try.xts 失败): high
, mid
, low
.
tq_mutate
重命名新创建的列,以便它们不与现有列名称冲突。,例如使用 "open"
、"high"
、"low"
and/or "close"
等字符串(这是函数 replace_bad_names
在 tq_mutate
, 看看源代码 here.)
例如,如果您使用 tq_transmute
而不是 tq_mutate
,您可以看到 names
列是 ?TTR::ATR
中提到的列。 (结果是一个只有新创建的列的对象,因此没有命名冲突。)
library(tidyquant)
tq_get(c("DTE.DE", "SAP.DE"), get = "stock.prices", from = "2017-12-01") %>%
group_by(symbol) %>%
tq_transmute(select = c("high", "low", "close"), n = 14, mutate_fun = ATR) %>%
names(.)
[1] "symbol" "date" "tr" "atr" "trueHigh" "trueLow"
所以你的代码工作正常。但是,您可以重命名列以了解它们的含义。
library(tidyquant)
tq_get(c("DTE.DE", "SAP.DE"), get = "stock.prices", from = "2017-12-01") %>%
group_by(symbol) %>%
tq_mutate(select = c("high", "low", "close"), n=14, mutate_fun = ATR) %>%
tq_mutate(select = c("high", "low"), mutate_fun = DonchianChannel) %>%
dplyr::rename(ATR_trueHigh = ATR,
ATR_trueLow = ATR.1,
DC_low = DonchianChannel,
DC_mid = mid,
DC_high = DonchianChannel.1)
同时检查 tq_mutate
的 col_rename
参数。