2 votos

Computar múltiples indicadores en tidyquant

Estoy tratando de obtener valores indicadores múltiples como RSI y EMA para las acciones usando el paquete tidyquant en R. Probé el ejemplo de la viñeta que es:

tq_get("AAPL", get = "stock.prices")%>% tq_transform_xy_(x_fun = 'close', transform_fun = 'periodReturn',period = 'weekly') %>% tq_mutate(x_fun = Cl, mutate_fun = RSI, n = 14, period = 'weekly') %>% tq_mutate(x_fun = Cl, mutate_fun = EMA, n = 14, period = 'weekly')

resultando en un error:

Error in match(x, table, nomatch = 0L) : argument ".x" is missing, with no default
  1. ¿Cómo transformo los precios de las acciones de cierre en semanales?; y
  2. ¿Cómo consigo el RSI y el EMA en una línea tq_mutate con los nombres de las columnas RSI y EMA? (Ambos resultan en nombres de columna EMA).

1voto

Ignacio Vazquez-Abrams Puntos 78635

Utilizaré tidyquant versión 0.3.0 para responder a esta pregunta, que cambia de x_fun a ohlc_fun en tq_mutate y tq_transform y añade el nuevo col_rename para resolver situaciones como la suya con nombres de columna no intuitivos.

Parte 1: ¿Cómo transformar las comillas de cierre en semanales?

Está utilizando el periodReturns función de quantmod y lo más probable es que quiera utilizar el to.period función de xts .

Hay un par de maneras de hacerlo. La primera versión es la que estás intentando. La segunda es una alternativa utilizando el quantmod Notación OHLC.

1A, Utilizando tq_transform_xy_ que devuelve sólo los precios de cierre:

tq_get("AAPL", get = "stock.prices") %>% 
    tq_transform_xy_(x = 'close', transform_fun = 'to.period', period = 'weeks')

1B, Utilizando tq_transform que devuelve los precios de apertura, alta, baja, cierre y volumen si se utiliza ohlc_fun = OHLCV :

tq_get("AAPL", get = "stock.prices") %>% 
    tq_transform(ohlc_fun = OHLCV, transform_fun = to.period, period = 'weeks')

Parte 2: ¿Cómo puedo obtener el RSI y la EMA en una línea tq_mutate con los nombres de las columnas RSI y EMA?

El fragmento de código que está utilizando tuberías ( %>% ) el período transformado vuelve a las mutaciones del RSI y la EMA. Esto no es probablemente lo que usted quiere hacer. Más bien, usted quiere primero transformar los datos a la periodicidad semanal utilizando el xts función to.period (ref. Parte 1). Una vez que tenga la periodicidad semanal, puede calcular el RSI y la EMA utilizando los precios de cierre semanales con el número de períodos, n = 14 (tenga en cuenta que este es un intervalo de 14 semanas debido al cambio de periodicidad, que puede no ser lo que usted desea). Así es como yo haría esto:

tq_get("AAPL", get = "stock.prices") %>% 
    tq_transform(ohlc_fun = OHLCV, transform_fun = to.period, period = "weeks") %>%
    tq_mutate(ohlc_fun = Cl, mutate_fun = RSI, n = 14, col_rename = "RSI.14") %>% 
    tq_mutate(ohlc_fun = Cl, mutate_fun = EMA, n = 14, col_rename = "EMA.14")

0 votos

Muy buena, Matt. Todavía estoy aprendiendo la sintaxis para tidyquant y puede ser bastante confuso.

0 votos

No hay problema. Estoy seguro de que no eres el único. Hazme saber si te encuentras con algo más.

0voto

scottishwildcat Puntos 146

Respuesta a 1):

library(tidyquant)
tq_get("AAPL", get = "stock.prices")%>%
  tq_transform_xy_(x = 'close', transform_fun = 'periodReturn',period = 'weekly')

esto le da

 A tibble: 525 × 2
         date weekly.returns
       <dttm>          <dbl>

Aparentemente la viñeta no está actualizada si se mira la ayuda de tq_transform_xy_ entonces se ve que el argumento debe ser x .

Haciendo esto te libras del error. Pero obtienes rendimientos. No soy un experto en trading técnico pero ¿tiene sentido calcular una EMA sobre los retornos? ¿No sería mejor hacerlo sobre los precios?

0 votos

Siento haber cometido un error. No me di cuenta de que he puesto en ' periodReturns ' en ' tranform_fun_xy ' . Eso debería haber sido 'EMA'. Con la segunda pregunta creo que sería imposible ponerlo en una línea.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X