---
title: "Calcular la liquidez del USD de forma aproximada"
description: "Como calcular el indice de liquidez del dolar estadounidense en Python usando datos de la Reserva Federal (FRED) y OpenBB."
url: "https://pythonparatrading.com/liquidez-usd/"
lang: "es"
date: "2024-10-02"
updated: "2026-09-04"
image: "https://pythonparatrading.com/content/images/2024/10/mmm.jpg"
tags: ["Liquidez"]
authors: ["Jesús Cuesta"]
---

# Calcular la liquidez del USD de forma aproximada

> Índice aproximado de liquidez del dólar (WALCL − RRP − TGA) con series de FRED descargadas vía OpenBB y comparado con el S&P 500.

- Idioma: es (español)
- Publicado: 2024-10-02
- Actualizado: 2026-09-04
- Temas: Liquidez
- Requisitos: openbb (extensión openbb-fred) · pandas · plotly
- Dataset: https://fred.stlouisfed.org/
- Resumen: En este articulo, calculamos el indice de liquidez del dolar estadounidense en Python, utilizando datos de la api de la reserva federal FRED y openBB

Puntos clave:

- Fórmula del índice: WALCL menos reverse repo (WLRRAL) y cuenta del Tesoro (WDTGAL).
- Búsqueda de series y metadatos de FRED con obb.economy.fred_search y fred_series.
- Construcción del índice semanal y alineación con el S&P 500.
- Tres normalizaciones (z-score, min-max, máximo absoluto) y gráfico comparativo en Plotly.

---

## Que es el USD Liquidity Index

El **USD Liquidity Index** es una medida que indica los dolares disponibles en el mercado. Este indice indica la facilidad de los bancos y las empresas de acceder a dolares para sus actividades.

Cuando existe una alta disponibilidad de dolares, usualmente los tipos de interes suelen ser bajos, y en contra cuando la liquidez es baja,aumenta las tasas de interes, dificultado el acceso a la financiacion.

Los factores implicados en este indice son las politicas monetarias de la Reserva Federal de los Estados Unidos, las condiciones economicas globales, y la demanda global de dolares

La formula la definicmos como:

> WALCL (All Liabilities) – WLRRAL (RRP) – WDTGAL (TGA)  

Siendo:

1.  **WALCL** representa la cantidad total de pasivos de la Reserva Federal, que incluye reservas bancarias y otros factores que ponen liquidez en el sistema.
2.  **WLRRAL** (RRP) y **WDTGAL** (TGA) son mecanismos que drenan o retiran liquidez del sistema. Al restarlos, estás eliminando las operaciones que disminuyen la cantidad de dólares disponibles en el sistema financiero.

**Resultado**: La diferencia neta te proporciona una medida de la **liquidez disponible** en el sistema financiero de EE.UU. Cuanto mayor sea el número, mayor es la cantidad de dinero que circula en el sistema.

## Calculando el Usd Liquidity Index en Python

Para obetener estas series, utilizaremos openbb, en especial la extension openbb-fred y la extension openbb-economy. El primer paso es importar todas las librerias necesarias.

```python
from openbb import obb
from pandas import DataFrame
```

Como hemos mencionado, necesitamos dos modulos dentro de la libreria openbb, que llamaremos de la siguiente forma

-   `obb.economy.fred_search()`
-   `obb.economy.fred_series()`

```python
data = obb.economy.fred_series(["WALCL", "WLRRAL", "WDTGAL", "SP500"])
data
```

OBBject  

*id: 066c7874-2012-7189-8000-1e79898a8a3c  
results: \[{'date': datetime.date(2002, 12, 18), 'WALCL': 719542.0, 'WLRRAL': 21905....  
provider: fred  
warnings: None  
chart: None  
extra: {'results\_metadata': {'WALCL': {'title': 'Assets: Total Assets: Total Assets...*

### *Para acceder a los metadatos*

```python
metadata = data.extra["results_metadata"]

metadata.keys()
metadata["WALCL"].get("title") 
metadata["WALCL"].get("units")
```

*dict\_keys(\['WALCL', 'WLRRAL', 'WDTGAL', 'SP500'\])'Assets: Total Assets: Total Assets (Less Eliminations from Consolidation): Wednesday Level''Millions of U.S. Dollars'*

## *Buscando y obteniendo indices desde FRED*

*Primero, vamos a buscar los indices de los niveles de los miercoles*

```python
obb.economy.fred_search("Wednesday Levels").to_df().head(3)

```

|  | series\_id | title | observation\_start | observation\_end | frequency | frequency\_short | units | units\_short | seasonal\_adjustment | seasonal\_adjustment\_short | last\_updated | popularity | group\_popularity | notes |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | WALCL | Assets: Total Assets: Total Assets (Less Elimi... | 2002-12-18 | 2024-08-14 | Weekly, As of Wednesday | W | Millions of U.S. Dollars | Mil. of U.S. \$ | Not Seasonally Adjusted | NSA | 2024-08-15 15:37:22-05:00 | 94 | 94 | NaN |
| 1 | H41RESPPALDKNWW | Assets: Liquidity and Credit Facilities: Loans... | 2002-12-18 | 2024-08-14 | Weekly | W | Millions of U.S. Dollars | Mil. of U.S. \$ | Not Seasonally Adjusted | NSA | 2024-08-15 15:37:01-05:00 | 76 | 76 | NaN |
| 2 | TREAST | Assets: Securities Held Outright: U.S. Treasur... | 2002-12-18 | 2024-08-14 | Weekly, As of Wednesday | W | Millions of U.S. Dollars | Mil. of U.S. \$ |

Posteriormente, buscaremos las reverse repo leveles de los miercoles

```python

obb.economy.fred_search("Wednesday Levels Reverse Repo").to_df().head(3)
```

|  | series\_id | title | observation\_start | observation\_end | frequency | frequency\_short | units | units\_short | seasonal\_adjustment | seasonal\_adjustment\_short | last\_updated | notes | popularity | group\_popularity |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | WLRRAL | Liabilities and Capital: Liabilities: Reverse ... | 2002-12-18 | 2024-08-14 | Weekly, As of Wednesday | W | Millions of U.S. Dollars | Mil. of U.S. \$ | Not Seasonally Adjusted | NSA | 2024-08-15 15:37:49-05:00 | Reverse repurchase agreements are transactions... | 63 | 63 |
| 1 | WLRRAFOIAL | Liabilities and Capital: Liabilities: Reverse ... | 2002-12-18 | 2024-08-14 | Weekly, As of Wednesday | W | Millions of U.S. Dollars | Mil. of U.S. \$ | Not Seasonally Adjusted | NSA | 2024-08-15 15:37:36-05:00 | Reverse repurchase agreements are transactions... | 40 | 40 |
| 2 | WLRRAOL | Liabilities and Capital: Liabilities: Reverse ... | 2002-12-18 | 2024-08-14 | Weekly, As of Wednesday | W | Millions of U.S. Dollars | Mil. of U.S. \$ |

Y los niveles del Tesoro General de los miercoles

```python
obb.economy.fred_search("Wednesday Levels Treasury General").to_df().head(3)
```

|  | series\_id | title | observation\_start | observation\_end | frequency | frequency\_short | units | units\_short | seasonal\_adjustment | seasonal\_adjustment\_short | last\_updated | notes | popularity | group\_popularity |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | WDTGAL | Liabilities and Capital: Liabilities: Deposits... | 2002-12-18 | 2024-08-14 | Weekly, As of Wednesday | W | Millions of U.S. Dollars | Mil. of U.S. \$ | Not Seasonally Adjusted | NSA | 2024-08-15 15:38:33-05:00 | This account is the primary operational accoun... | 64 | 64 |
| 1 | D2WLTGAL | Liabilities and Capital: Liabilities: Deposits... | 2002-12-18 | 2024-08-14 | Weekly, As of Wednesday | W | Millions of U.S. Dollars | Mil. of U.S. \$ | Not Seasonally Adjusted | NSA | 2024-08-15 15:38:37-05:00 | NaN | 60 | 60 |
| 2 | WLDLCL | Liabilities and Capital: Liabilities: Deposits... | 2002-12-18 | 2024-08-14 | Weekly, As of Wednesday | W | Millions of U.S. Dollars | Mil. of U.S. \$ | Not Seasonally Adjusted |

Y el precio del S&P500

```python
obb.economy.fred_search("SP500").to_df().head(2)
```

|  | series\_id | title | observation\_start | observation\_end | frequency | frequency\_short | units | units\_short | seasonal\_adjustment | seasonal\_adjustment\_short | last\_updated | notes | popularity | group\_popularity |
| --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- | --- |
| 0 | SP500 | S&P 500 | 2014-08-22 | 2024-08-21 | Daily, Close | D | Index | Index | Not Seasonally Adjusted |

Printeamos los metadatos

```python
for id in metadata:
    display(f"{id}: {metadata[id]['units']}")
```

*'WALCL: Millions of U.S. Dollars''WLRRAL: Millions of U.S. Dollars''WDTGAL: Millions of U.S. Dollars''SP500: Index'*

*Y generamos el Liquidity Index*

```python
data.to_df().head(4)
data.to_df().dropna().head(4)
liquidity_index = DataFrame(data.to_df().dropna())
```

|  | WALCL | WLRRAL | WDTGAL | SP500 |
| --- | --- | --- | --- | --- |
| date |  |  |  |  |
| --- | --- | --- | --- | --- |
| 2002-12-18 | 719542.0 | 21905.0 | 6595.0 | NaN |
| 2002-12-25 | 732059.0 | 20396.0 | 4662.0 | NaN |
| 2003-01-01 | 730994.0 | 21091.0 | 4420.0 | NaN |
| 2003-01-08 | 723762.0 | 18709.0 | 5490.0 | NaN |

|  | WALCL | WLRRAL | WDTGAL | SP500 |
| --- | --- | --- | --- | --- |
| date |  |  |  |  |
| --- | --- | --- | --- | --- |
| 2014-08-27 | 4413736.0 | 282002.0 | 29547.0 | 2000.12 |
| 2014-09-03 | 4415587.0 | 250306.0 | 21036.0 | 2000.72 |
| 2014-09-10 | 4421408.0 | 267602.0 | 31872.0 | 1995.69 |
| 2014-09-17 | 4449588.0 | 252224.0 | 123965.0 | 2001.57 |

## Organizamos el Dataframe Final

```python
liquidity_index["USD Liquidity Index"] = (
    liquidity_index["WALCL"] - liquidity_index["WLRRAL"] - liquidity_index["WDTGAL"]
)
liquidity_index.tail(4)
```

|  | WALCL | WLRRAL | WDTGAL | SP500 | USD Liquidity Index |
| --- | --- | --- | --- | --- | --- |
| date |  |  |  |  |  |
| --- | --- | --- | --- | --- | --- |
| 2024-07-24 | 7205455.0 | 805967.0 | 767419.0 | 5427.13 | 5632069.0 |
| 2024-07-31 | 7178391.0 | 813261.0 | 854001.0 | 5522.30 | 5511129.0 |
| 2024-08-07 | 7175256.0 | 681881.0 | 785233.0 | 5199.50 | 5708142.0 |
| 2024-08-14 | 7177688.0 | 722198.0 | 788823.0 | 5455.21 | 5666667.0 |

## Ploteamos usando Plotly y normalizando los datos para que puedan ser comparables

```python
y_axis = liquidity_index[["USD Liquidity Index", "SP500"]]


def absolute_maximum_scale(series):
    return series / series.abs().max()


def min_max_scaling(series):
    return (series - series.min()) / (series.max() - series.min())


def z_score_standardization(series):
    return (series - series.mean()) / series.std()


methods = {
    "z": z_score_standardization,
    "m": min_max_scaling,
    "a": absolute_maximum_scale,
}


def normalize(data: DataFrame, method: str = "z") -> DataFrame:
    for col in data.columns:
        data.loc[:, col] = methods[f"{method}"](data.loc[:, col])

    return data


normalized = normalize(y_axis, method="m")

normalized.tail(3)
```

|  | USD Liquidity Index | SP500 |
| --- | --- | --- |
| date |  |  |
| --- | --- | --- |
| 2024-07-31 | 0.643578 | 0.970490 |
| 2024-08-07 | 0.698835 | 0.885139 |
| 2024-08-14 | 0.687202 | 0.952750 |

```python
import pandas as pd

pd.options.plotting.backend = "plotly"
normalized.plot()



fig = go.Figure()

fig.add_scatter(
    x=normalized.index, y=normalized["USD Liquidity Index"], name="USD Liquidity Index"
)

fig.add_scatter(x=normalized.index, y=normalized["SP500"], name="S&P 500 Index")

fig.update_layout(
    title="USD Liquidity Index vs. S&P 500 Index (Normalized)",
    title_y=0.90,
    title_x=0.5,
    autosize=True,
)

```

**Related posts:** [Liquidez Order Book: Trading Liquidez Agregada](https://pythonparatrading.com/limit-order-book-y-liquidez-de-mercado/) · [Bancos Centrales y Politica Monetaria en Python](https://pythonparatrading.com/politica-monetaria-en-python/).
