Calcular la liquidez del USD de forma aproximada

Calcular la liquidez del USD de forma aproximada

Table of contents

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.

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()
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

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

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


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

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

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

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

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

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

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
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,
)

Jesús Cuesta

Odesa (Ucrania)
Inversor desde 2014. Research desde 2017. He trabjado en diferentes gestoras de capital, y Hedgefunds Crypto. Apasasionado en el codigo, los datos y las finanzas. Acualmente localizado en Ucrania.