es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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
Tags:  , , , ,

Answer

  1. Avatar for 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 paquete zoo, 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ón rollapply, y luego aplicamos esta función a la columna baja utilizando una ventana de 100 (que es lo mismo que la función DonchianChannel). Luego unimos los resultados con el conjunto de datos original utilizando la columna de fecha, y utilizamos unnest 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) utilizando geom_line, y aplicamos cierto formato utilizando scale_x_date y theme_economist.

Comments are closed.