El donchian low en el TTR presenta un gráfico incorrecto.
Estoy trazando el máximo y mínimo de Donchian utilizando paquetes tidy. El valor mínimo no parece correcto. Probablemente no estoy llamando correctamente a la función donchian, ya que el donchian100low es el valor más alto de la fila. No sé cómo solucionarlo.
library(tidyverse)
library(tidyquant)
library(ggthemes)
startdt <- "2021-02-01"
AMC <- tq_get(
"AMC",
get = "stock.prices",
from = startdt
)
AMC_values <- AMC %>%
mutate(
# EMA_20 = EMA(close, n = 20),
# EMA_50 = EMA(close, n = 50),
Don_100=DonchianChannel(high,low)
) %>%
na.omit()
head(AMC_values)
Resultados:
head(AMC_values)
# A tibble: 6 x 9
symbol date open high low close volume adjusted Don_100[,"high"] [, "mid"] [, "low"]
1 AMC 2021-02-17 5.58 5.62 5.32 5.55 38849000 5.55 17.2 11.4 5.62
2 AMC 2021-02-18 5.84 6.25 5.46 5.51 130540800 5.51 10.1 7.86 5.62
3 AMC 2021-02-19 5.54 5.77 5.51 5.7 40249100 5.7 9.77 7.70 5.62
4 AMC 2021-02-22 5.93 6.68 5.75 6.55 173409000 6.55 8.74 7.18 5.62
5 AMC 2021-02-23 6.97 7.86 6.01 7.7 264876400 7.7 8.27 6.94 5.62
6 AMC 2021-02-24 7.23 9.83 6.99 9.09 376881800 9.09 9.83 7.72 5.62
davy.ai
Parece que la función del canal Donchian está devolviendo el valor más alto para la columna baja en lugar del valor más bajo, lo cual está causando el problema con la representación gráfica. Una forma de solucionar esto es calcular el canal Donchian manualmente utilizando la función
rollapply
del paquetezoo
, y luego unir los resultados con el conjunto de datos original utilizando la columna de fecha:“`{r}
library(zoo)
donchian <- function(x, n){
high <- rollapply(x, n, max, align = “right”, partial = TRUE)
low <- rollapply(x, n, min, align = “right”, partial = TRUE)
mid <- (high + low) / 2
return(cbind(high = high, mid = mid, low = low))
}
AMC_values <- AMC_values %>%
mutate(
Don_100_manual = rollapply(low, 100, donchian, fill = NA)
) %>%
unnest(cols = c(Don_100_manual)) %>%
mutate(
Date = as.Date(date)
) %>%
select(Date, Don_100_manual)
AMC_values <- AMC %>%
select(date, low) %>%
left_join(AMC_values, by = c(“date” = “Date”)) %>%
select(date, low, Don_100_manual)
ggplot(AMC_values) +
geom_line(aes(x = date, y = low)) +
geom_line(aes(x = date, y =
Don_100_manual[, "low"]
), color = “red”) +geom_line(aes(x = date, y =
Don_100_manual[, "high"]
), color = “red”) +scale_x_date() +
theme_economist() +
labs(
x = “Fecha”,
y = “Precio”
)
“`
En este código, hemos definido una función
donchian
que calcula el canal Donchian manualmente utilizando la funciónrollapply
, y luego aplicamos esta función a la columna baja utilizando una ventana de 100 (que es lo mismo que la funciónDonchianChannel
). Luego unimos los resultados con el conjunto de datos original utilizando la columna de fecha, y utilizamosunnest
para convertir la matriz del canal Donchian en columnas individuales. Finalmente, graficamos la columna baja y el canal Donchian calculado manualmente (utilizando las columnas baja y alta) utilizandogeom_line
, y aplicamos cierto formato utilizandoscale_x_date
ytheme_economist
.