in

La API (no oficial) de Yahoo Finance

0taWnk8HMnoN2WY7q

La API (no oficial) de Yahoo Finance

Una interfaz de Python para cantidades infinitas de datos

Doug Guthrie

12 de mayo de 2020·6 min de lectura

Foto de Sean Pollock en Unsplash

Fondo

Trabajo en la industria de servicios financieros como gerente de análisis de datos. Mi función es apoyar a mi organización en cualquier necesidad relacionada con los datos. Un proyecto en el que estamos trabajando es una aplicación interna que se basa en gran medida en datos financieros; mi trabajo consistía en encontrar una manera de proporcionar los datos relevantes.

Tener suerte

Si buscas en Internet el tiempo suficiente,lSeré capaz de encontrar soluciones que lo llevarán allí (o parcialmente). Jugué con IEX Cloud, Quandl y otros, que son excelentes servicios pero no son gratuitos. Entonces, como cualquier desarrollador que busca una solución, comencé a buscar StackOverflow. Con frecuencia me encontré con Yahoo Finance como una posible solución, a pesar de que la nota a continuación se encuentra en la parte superior de la página de resultados de búsqueda de yahoo-finance:

TENGA EN CUENTA: ESTA API HA SIDO DESCATALOGADA POR YAHOO. Yahoo! Finance es un servicio de Yahoo! que proporciona información financiera. Es el sitio web de investigación y noticias financieras más importante de los Estados Unidos.

Sin embargo, parecía que la gente todavía estaba utilizando el servicio, ya sea mediante raspado web o mediante URL que solo podía encontrar buscando a través de solicitudes XHR. Sabía que no quería una solución de raspado web, así que comencé a buscar en la pestaña de red en las herramientas de desarrollo de Chrome cualquier cosa que se pareciera a datos. Afortunadamente, me topé con algunos.

El paquete: YahooQuery

pip install yahooquery

El paquete proporciona tres clases diferentes que permiten una recuperación rápida y eficiente de los datos que puede ver a través del front-end. La clase principal, donde se pueden recuperar la mayoría de los datos, es la Ticker clase.

Corazón

Bastante fácil, ¿verdad? Simplemente pase un símbolo o una lista de símbolos y estará listo para recuperar la mayoría de los datos disponibles a través de Yahoo Finance. Sin embargo, antes de seguir adelante, es importante saber que hay argumentos de palabras clave adicionales que puede proporcionar para modificar cierto comportamiento:

  • asynchronous, default False, optional: Cuando se establece en True, las solicitudes realizadas a Yahoo Finance se realizarán de forma asincrónica. Solo es necesario cuando se utiliza más de un símbolo.
  • backoff_factor, default 0.3, optional: Un factor, en segundos, que se aplicará entre intentos después del segundo intento. Por ejemplo, si el factor de retroceso es 0,1, entonces sleep() dormirá por [0.0s, 0.2s, 0.4s, …] entre reintentos
  • country, default United States, optional: Modifica el idioma, la región y el dominio cors que cada solicitud utiliza como parámetro de consulta. Esta funcionalidad no se ha probado a fondo, pero verá diferencias al utilizar la news método. Los datos se devolverán para el idioma específico de ese país.
  • formatted, default False, optional: Cuando formatted=True, la mayoría de los datos numéricos de la API se devolverán como un diccionario:
"totalCash": {
"raw": 94051000320,
"fmt": "94.05B",
"longFmt": "94,051,000,320"
}
  • max_workers, default 8, optional: Define la cantidad de trabajadores que se utilizan para realizar solicitudes asincrónicas. Esto solo es relevante cuando asynchronous=True
  • proxies, default None, optional: Realice cada solicitud con un proxy. Simplemente pase un diccionario, mapeando esquemas de URL a la URL del proxy. También puede configurar proxies configurando las variables de entorno HTTP_PROXY y HTTPS_PROXY.
  • retry, default 5, optional: Número de veces que se debe reintentar una solicitud fallida.
  • status_forcelist, default [429, 500, 502, 503, 504], optional: Un conjunto de códigos de estado HTTP enteros que deberíamos forzar a reintentar.
  • timeout, default 5, optional: Deje de esperar una respuesta después de un número determinado de segundos.
  • user_agent, random selection, optional: Una cadena de agente de usuario del navegador que se envía en los encabezados con cada solicitud.
  • validate, default False, optional: Valida la existencia de símbolos durante la instanciación. Los símbolos no válidos se eliminarán, pero puede verlos a través de la invalid_symbols propiedad.
  • verify, default True, optional: Ya sea un booleano, en cuyo caso controla si verificamos el certificado TLS del servidor, o una cadena, en cuyo caso debe ser una ruta a un paquete de CA para usar.
  • username y password: Si se suscribe a Yahoo Finance Premium, pase su username y password. Iniciará sesión y ahora podrá acceder a propiedades / métodos premium. Todas las propiedades / métodos premium comienzan con p_. Deshabilite la autenticación de dos factores para que esto funcione.

La clase Ticker se puede dividir en algunas categorías diferentes: módulos, opciones, precios históricos y datos premium.

Módulos

Los módulos corresponden (generalmente) a una pestaña o datos dentro de pestañas individuales del front-end de Yahoo Finance. Por ejemplo, para recuperar datos de la pestaña ‘Resumen’, usaría la summary_detail propiedad en el Ticker clase.

1*D8LvAgYepPO9PplidzrOuw

O para buscar datos dentro de la pestaña ‘Estadísticas’, usaría las propiedades valuation_measures y key_stats.

Opciones

Todas las fechas de vencimiento de las opciones se pueden recuperar con una simple línea:

faang = Ticker('fb aapl amzn nflx goog', asynchronous=True)
options = faang.option_chain

La variable options será un DataFrame de pandas. El DataFrame contendrá un MultiIndex compuesto por el símbolo, la fecha de vencimiento y el tipo de opción (put o call).

Precios históricos

Foto de MBM en Unsplash

Este es bastante sencillo: recupere datos históricos de OHLC para un símbolo o lista de símbolos:

faang = Ticker('fb aapl amzn nflx goog', asynchronous=True)
history = faang.history()

El código anterior devolverá datos diarios del año hasta la fecha. Sin embargo, se pueden proporcionar argumentos adicionales al método:

yahooquery.ticker.history(self, period='ytd', interval='1d', start=None, end=None)Historical pricing dataPulls historical pricing data for a given symbol(s)Parameters 
----------
period: str, default ytd, optional
Length of time
interval: str, default 1d, optional
Time between data points
start: str or datetime.datetime, default None, optional
Specify a starting point to pull data from. Can be expressed as a string with the format YYYY-MM-DD or as a datetime object
end: str of datetime.datetime, default None, optional
Specify a ending point to pull data from. Can be expressed as a string with the format YYYY-MM-DD or as a datetime object.
adj_timezone: bool, default True, optional
Specify whether or not to apply the GMT offset to the timestamp received from the API. If True, the datetimeindex will be adjusted to the specified ticker's timezone.
adj_ohlc: bool, default False, optional
Calculates an adjusted open, high, low and close prices according to split and dividend information
Returns
-------
pandas.DataFrame
historical pricing data

Datos premium

La funcionalidad también está disponible para recuperar datos para los suscriptores de Yahoo Finance Premium. El paquete utiliza Selenium y chromedriver específicamente para iniciar sesión en Yahoo Finance. Una vez que haya iniciado sesión, el usuario podrá utilizar métodos y propiedades premium para recuperar datos.

Comparación con yfinance

Una alternativa a yahooquery es yfinance. Es un paquete que ofrece una funcionalidad similar para recuperar datos de Yahoo Finance. Actualmente, tiene casi 2.500 estrellas en GitHub, la cantidad más alta cuando se buscan paquetes de Python que ofrecen recuperación de datos de Yahoo Finance. Entonces, ¿por qué debería usar yahooquery en lugar de yfinance?

  • Mantenimiento: yfinance no parece mantenerse fuera de los desarrolladores externos que crean bifurcaciones.
  • Dogmático: En yfinance, cada llamada de propiedad, fuera de una pareja, llamará al mismo método privado, _get_fundamentals. Esto significa que el usuario tiene que recuperar todos los datos posibles, incluso si solo está interesado en una cosa. Sin embargo, la otra cara de la moneda es que cada llamada posterior que utiliza ese método privado casi no lleva tiempo porque esos datos ya se han almacenado en la instancia de Ticker.
  • Fuente de datos: yfinance recupera la mayoría de los datos (fuera de los precios y las opciones históricas) al extraer una variable de JavaScript en cada página de Ticker. Yahooquery utiliza puntos finales de API para cada propiedad / método disponible para el usuario.
  • Precisión: El estado de resultados, el balance general y los métodos de flujo de efectivo utilizan diferentes puntos finales. El que se usa en yahooquery recupera más datos y es preciso cuando se buscan empresas fuera de EE. UU.
  • Sencillo: El marco de datos que se devuelve al recuperar el precio histórico de varios símbolos está en un formato largo en yahooquery en lugar de un formato amplio en yfinance.
  • Configuración: Los argumentos de palabras clave permiten muchas configuraciones diferentes. Además, las solicitudes asincrónicas están disponibles en toda la biblioteca, no solo para precios históricos como yfinance.
  • Más rápido: Consulte el cuaderno de Jupyter a continuación para ver diferentes ejemplos.

Más información

  • Ver la documentación para un uso detallado del paquete

yahooquery

Envoltorio de Python para una documentación no oficial de la API de Yahoo Finance: https://yahooquery.dpguthrie.com Demostración interactiva…

yahooquery.dpguthrie.com

  • Ver el código fuente en GitHub

dpguthrie / yahooquery

Envoltorio de Python para una documentación no oficial de la API de Yahoo Finance: https://yahooquery.dpguthrie.com Demostración interactiva…

github.com

  • Ver una demostración interactiva alojada en Heroku
  • Comuníquese si tiene preguntas, comentarios o formas de mejorar el paquete.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

M3kwPyqeXhAE6szWiqiM6a 1200 80

Precio máximo de HBO: cuánto cuesta y las mejores ofertas de hoy

Uso de SQL * Plus con oracleDatabase Exadata Express Cloud Service