---
title: "Big Data Management 3 - Creando un Datalake sobre el Nasdaq con ArcticDB."
description: "Creacion de un datalake sobre el Nasdaq usando ArcticDB y EODH. Algoritmo para gestionar datos financieros en Python."
url: "https://pythonparatrading.com/big-data-con-arcticdb/"
lang: "es"
date: "2025-04-02"
updated: "2026-09-21"
image: "https://pythonparatrading.com/content/images/2025/04/articdb3.jpg"
tags: ["Big Data", "ArcticDB"]
series: "Big Data Management"
series_url: "https://pythonparatrading.com/series/big-data-management/"
authors: ["Jesús Cuesta"]
---

# Big Data Management 3 - Creando un Datalake sobre el Nasdaq con ArcticDB.

> Un algoritmo que descarga precios, dividendos, splits y metadatos de acciones del Nasdaq desde EODHD y los guarda en ArcticDB.

- Idioma: es (español)
- Publicado: 2025-04-02
- Actualizado: 2026-09-21
- Temas: Big Data, ArcticDB
- Serie: Big Data Management (parte 3/4)
- Requisitos: Parte 02 (Primeras líneas) · arcticdb · pandas · API de EODHD
- Código: https://github.com/quantarmyz/datalake
- Dataset: https://eodhd.com/
- Resumen: En este artículo, exploraremos la creación de un algoritmo para gestionar datos financieros en nuestro datalake, utilizando ArcticDB como backend y el proveedor de datos End Of Day Historical (EODH).

Puntos clave:

- Tipos de datos del proveedor: descriptivos, precio, eventos corporativos, fundamentales y alternativos.
- Por qué guardar datos sin ajustar y dejar el ajuste al backtester.
- Creación automática de las librerías prices, divs, splits y meta.
- Filtro de acciones comunes del Nasdaq y descarte de tickers ya presentes en el datalake.

---

En este artículo, exploraremos la creación de un algoritmo para gestionar datos financieros en nuestro datalake, utilizando ArcticDB como backend y el proveedor de datos End Of Day Historical (EODH). Este algoritmo cumplirá con los siguientes requisitos:

## Requisitos

1.  Formato universal estilo Pandas.
2.  ArcticDB como backend.
3.  Gestión automática de bases de datos dentro del datalake.
4.  Gestión de metadatos.

## Datos Utilizados

La información almacenada en el datalake se utilizará como fuente de datos para el motor de backtesting. Utilizaremos EODH como nuestra data bróker debido a su asequibilidad y atención al cliente. Sus fuentes de datos de calidad y la variedad de información que proporcionan lo hacen una elección sólida.

EODHD, compra packs de datos a mercados, y los redistribuye entre sus clientes, no se dedica al 100% a la recolección de datos, pero esto es una ventaja, dado que es más fácil que un data-bróker pequeño tenga un fallo en la recolección de datos, pero que NASDAQ lo haga es más difícil, porque en caso de que ocurriera, más gente está utilizando estos datos de forma profesional, y solucionarían el error.

### ¿De dónde obtiene EODHD los datos?

Pues citando lo que comentan en su website:

> For end-of-day (EOD) and delayed data, we have direct contracts with several exchanges for their corresponding data streams. We get USA data from [Nasdaq Cloud API](https://www.nasdaq.com/solutions/cloud-data-service).

> The UK data is derived directly from the London Stock Exchange Group ([LSE](https://www.londonstockexchange.com/)), with more than 22,000 tickers in total.

> We get European markets’ data from Cboe Europe Equities ([Cboe](https://markets.cboe.com/europe/equities/overview/)) which covers more than 60 exchanges from Western and Eastern European markets.

> For Australian feeds, we have a direct agreement with the Australian Stock Exchange ([ASX](https://www.asx.com.au/)). Delayed and End of Day NEO Exchange Data for NEO and TSX/TSXV powered by [Quotemedia.com](http://quotemedia.com/).

## Tipos de Datos

Dentro de los datos que nos ofrece él data-bróker, encontramos una infinidad de categorías, pero básicamente los podríamos clasificar en estos grandes grupos.

### Datos descriptivos

Los datos descriptivos, es un subconjunto de datos fundamentales, donde se consideran los más relevantes, para poder establecer las características de la compañía con la que se está tratando.

Estos datos incluyen, el exchange, la divisa, la fecha de la IPO, su sector, subsector, número de trabajadores, market cap etc.

Se utiliza para crear universos desde metadata de los tickers. Como, por ejemplo, crear un universo con las acciones con una IPO superior a 1960 y del sector financiero. O cualquier otra combinación de características.

![Datos Descriptivos (Subconjunto datos fundamentales)](https://pythonparatrading.com/content/images/external/quantarmy.com/content/images/2024/01/image-7.png)

*Datos Descriptivos (Subconjunto datos fundamentales)*

### Datos de Precio

Los datos de OHLCV (Open, High, Low, Close, Volume) serán fundamentales para nuestro análisis. Es la forma básica en el cual se distribuye la información de precio, y la más cotidiana

![Lectura de ArcticDB de la librería prices.stocks.us.stable: OHLCV diario de JPM.US de 1984 a 2023, 9786 filas](https://pythonparatrading.com/content/images/external/quantarmy.com/content/images/2024/01/image-8.png)

### Datos de Eventos Corporativos

Los eventos corporativos incluyen información exógena al precio, pero necesaria para entender los datos no ajustados. Se recomienda realizar el ajuste de los datos en el propio backtester, y no utilizar jamás datos ajustados.

En el primer caso, vemos los splits, y en el segundo los dividendos.

![Lectura de splits.stocks.us.stable: splits de JPM.US entre 1982 y 2000 (1,5 y 2,0)](https://pythonparatrading.com/content/images/external/quantarmy.com/content/images/2024/01/image-9.png)

![Lectura de divs.stocks.us.stable: 156 dividendos de JPM.US desde 1984, con fechas, valor ajustado y sin ajustar](https://pythonparatrading.com/content/images/external/quantarmy.com/content/images/2024/01/image-10.png)

Dentro de los dividendos, vemos que hay diferentes fechas, pero en la siguiente imagen se representa el ciclo de dividendo.

![Record Date](https://pythonparatrading.com/content/images/external/imgs.search.brave.com/G1zVuvvSoRZgkiRhWLW3kQdY26sFNno6ljR3t6cHQlg/rs_fit_860_0_0/g_ce/aHR0cHM6Ly93d3cu/aW52ZXN0b3BlZGlh/LmNvbS90aG1iLzFW/VktWUTludUNDQ2k1/XzN6TzYwVU1tbFgw/WT0vMTUwMHgwL2Zp/bHRlcnM6bm9fdXBz/Y2FsZSgpOm1heF9i/eXRlcygxNTAwMDAp/OnN0cmlwX2ljYygp/L3JlY29yZGRhdGUu/YXNwLWZpbmFsLTZh/MjE3N2Y2YzBkYTQy/Mjc5YTIwMmI2YjMw/YTE3ZDUyLnBuZw.png)

### Datos Fundamentales

Información obtenida de los estados contables de las compañías, que incluyen ratios contables, sectores y competidores, etc. En este caso la información es una snapshot actual. Pero se podría ajustar la base de datos, para que guardara estos valores por cada dia, para poder realizar modelos en función de datos fundamentales.

![Lectura de fundamental.stocks.us.stable: datos fundamentales de JPM.US como capitalización, PER, BPA y márgenes](https://pythonparatrading.com/content/images/external/quantarmy.com/content/images/2024/01/image-11.png)

### Datos Alternativos

Los datos alternativos incluye información como noticias, sentimiento de mercado, relaciones en la cadena de suministro, entre otros, datos de los cuales se puede descubrir alpha, dados que es la tendencia actual el incluirlos, tradicionalmente no se han utilizado.

Los datos alternativos hacen referencia a toda la información, correlacionada en algún sentido con objeto de estudio actual, y que mediante su inclusión en los modelos, se obtienen nuevas formas de extraer alpha del activo. Podríamos hablar de noticias, como de pronósticos de ventas, o cualquier tipo de información que, modelizada, puede crear o añadir alpha a un modelo concreto.

![Lectura de us.stocks.news.stable: noticias de JPM.US de Yahoo Finance con título, enlace, etiquetas y sentimiento](https://pythonparatrading.com/content/images/external/quantarmy.com/content/images/2024/01/image-12.png)

## Algoritmo para Alimentar el Datalake

Vamos a diseñar un algoritmo para gestionar nuestras bases de datos en el datalake y transformar los datos del bróker a nuestro formato de datalake, generando precios y metadatos. La estructura del algoritmo será similar a la siguiente:

-   Recopilar símbolos
-   Recopilar datos de esos símbolos en el data-broker
-   Transformar esa información a un formato Pandas-Like
-   Enviar esa información a nuestro datalake mediante arcticdb

```python
all_tickers = recopile_symbols_by_filter_results
for each symbol in all_tickers:
    download, transform, and send price data to datalake
    download, transform, and send dividend and split data to datalake
    download, transform, and send metadata to datalake
```

## Gestionando las Bases de Datos dentro del Datalake

Un datalake está compuesto por muchas librerías (databases). Para trabajar en nuestro datalake, necesitamos tener unas databases para creadas, para poder poner un orden, dentro de toda la información volcada en el datatake

Implementaremos un mecanismo simple para gestionar las bases de datos en el datalake usando ArcticDB. El siguiente código verifica la consistencia del datalake:

```python
dataz = ['prices.stocks.us.stable', 'divs.stocks.us.stable', 'splits.stocks.us.stable', 'meta.stable']

for d in dataz:
    if d not in ac.list_libraries():
        ac.create_library(d)
        print('[DATA CHECK]:', d.upper(), 'CREATING NEW DATASTORAGE')
        print('DATA STORAGE CREATED!')
    else:
        print('[DATA CHECK]:', d.upper(), 'IS IN THE DATALAKE')
        print('Listing Symbols:', ac.get_library(d).list_symbols())

print('[QA] - DATALAKE v2 carnivore READY :) :) :)')
```

Este código asegura que las bases de datos necesarias existan en el datalake y las crea si no existen.

## Filtrado de Tickers

El filtrado de tickers se puede realizar de varias maneras, ya sea consultando metadatos o manualmente. En este ejemplo, filtramos acciones pertenecientes al Nasdaq Stock Exchange:

```python
# Pseudocódigo
ts = pd.DataFrame(call.get_exchange_symbols('US'))
ts = ts[ts['Exchange'] == 'NASDAQ']
ts = ts[ts['Type'] == 'Common Stock']
all_tickers = ts['Code'].tolist()
tickers_in_lake = prices.list_symbols()
all_tickers = [valor + ".US" for valor in all_tickers]
tickers = [ticker for ticker in all_tickers if ticker not in tickers_in_lake]
```

Este proceso evita la descarga de tickers duplicados y ahorra tiempo y consultas API.

## Conclusiones Finales

Una vez que tenemos algunos tickers en nuestro datalake, el siguiente paso es construir un entorno de trabajo profesional basado en tecnologías como Docker, JupyterLab, Zipline y Linux para realizar tareas de investigación y backtesting.

¡La cantidad de información disponible hoy en día es invaluable! ArcticDB resuelve todos los problemas relacionados con la infraestructura para almacenar y consultar dataframes de gran escala con una latencia insignificante, permitiendo trabajar incluso en timeframes muy pequeños. Este artículo proporciona una base sólida para implementar un datalake compatible con herramientas como Zipline en el futuro.

El archivo con el código completo ya no está disponible para descarga.

## Código Completo

Proximamente organizaremos un git, prometido!

**Related posts:** [Big Data Management 1: Introduccion al Big Data para trading con ArcticDB](https://pythonparatrading.com/big-data-para-trading/) · [Big Data Management 2: Primeras lineas de codigo](https://pythonparatrading.com/big-data-para-trading-con-articdb/) · [Big Data Management 4: Utilizando el datalake en Zipline](https://pythonparatrading.com/backtesting-con-zipline-y-articdb/).
