Intervention liquidity #

This category group contains real-time measures of central bank interventions and liquidity expansion. The main composite indicator measures the estimated growth of the monetary base related to central bank interventions in FX and security markets. The data series’ measure recorded changes, not announcements.

Currency reserve expansion as % of GDP #

Ticker : CRESFXGDP_NSA_D1M1ML1 / _D1M1ML3 / _D1M1ML6

Label : FX reserves expansion as % of GDP, difference: over the last month / over 3 months / over 6 months

Definition : Change of FX reserves as % of nominal GDP, difference: over the last month / over 3 months / over 6 months

Notes :

  • FX reserves comprise foreign-currency denominated deposits, securities and cash. They do not include gold, special drawing rights, and IMF reserve positions, which would be included in broader currency reserve concepts.

  • The ultimate sources of the reserve data are the national central bank balance sheets.

  • The 1-year moving average of the nominal GDP is based on published quarterly national accounts with extrapolation up to the latest month for which reserve data has been released.

Domestic securities purchase expansion as % of GDP #

Ticker : SPACSGDP_NSA_D1M1ML1 / _D1M1ML3 / _D1M1ML6

Label : Security purchase account expansion as % of GDP, difference: over the last month / over 3 months / over 6 months

Definition : Change of security purchase account as % of nominal GDP, difference: over the last month / over 3 months / over 6 months

Notes :

  • Security purchase account series are available for those countries which have been conducting quantitative easing / asset purchase programmes: Australia, Canada, the Eurozone, Great Britain, Japan, New Zealand, Sweden, the United States.

  • From January 2019 onwards, the Term Funding Scheme (TFS) drawings were moved to the Bank of England’s balance sheet and therefore no longer reported as part of the ‘Asset Purchase Facility’. To ensure consistency, the definition of ‘Asset Purchase Facility’ was narrowed down to exclude TFS drawings from the beginning.

  • For Japan, the indicator also includes pecuniary trusts (stocks, index-linked ETFs and REITs held as trust property).

  • For New Zealand, the indicator only includes the ‘Large Scale Asset Purchase’ (LSAP). It does not include ‘Bond Market Liquidity Support’ or early repurchases.

  • The 1-year moving average of the nominal GDP is based on published quarterly national accounts with extrapolation up to the latest month for which security purchase data has been released.

Monetary base expansion as % of GDP #

Ticker : MBASEGDP_SA_D1M1ML1 / _D1M1ML3 / _D1M1ML6

Label : Monetary base expansion as % of GDP, difference: over the last month / over 3 months / over 6 months

Definition : Change in monetary base as % of nominal GDP, difference: over the last month / over 3 months / over 6 months

Notes :

  • The monetary base is conceptually money that is directly created by the monetary authority and consists mostly of cash in circulation and deposits held with the central bank. Due to its pronounced seasonality in some countries, the monetary base has been seasonally adjusted on a real-time vintage basis.

  • The ultimate source of the monetary base data are the national central bank balance sheets.

Intervention-driven liquidity expansion as % of GDP #

Ticker : INTLIQGDP_NSA_D1M1ML1 / _D1M1ML3 / _D1M1ML6

Label : Intervention-driven liquidity expansion as % of GDP, difference: over the last month / over 3 months / over 6 months

Definition : Change in intervention-driven liquidity as % of nominal GDP, difference: over the last month / over 3 months / over 6 months

Notes :

  • Intervention-driven liquidity expansion is an estimate of how much central bank liquidity has been added as a consequence of central bank interventions. Two types of central bank interventions are considered: unsterilized FX interventions and domestic security purchases. Intervention-driven expansion is assumed to have occured if the sum of the intervention accounts (FX reserves and special purchase accounts) and the monetary base have both increased over a specific observation period. If both are negative, the expansion is assumed to have been negative. If intervention accounts and monetary base have moved in opposite directions, intervention liquidity expansion is estimated to be zero. The estimated amount of intervention is the smaller of the absolute change in the intervention accounts and the monetary base.

  • See Appendix 1 for the formula.

Imports #

Only the standard Python data science packages and the specialized macrosynergy package are needed.

import os
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import math

import json
import yaml

import macrosynergy.management as msm
import macrosynergy.panel as msp
import macrosynergy.signal as mss
import macrosynergy.pnl as msn

from macrosynergy.download import JPMaQSDownload

from timeit import default_timer as timer
from datetime import timedelta, date, datetime

import warnings

warnings.simplefilter("ignore")

The JPMaQS indicators we consider are downloaded using the J.P. Morgan Dataquery API interface within the macrosynergy package. This is done by specifying ticker strings , formed by appending an indicator category code <category> to a currency area code <cross_section> . These constitute the main part of a full quantamental indicator ticker, taking the form DB(JPMAQS,<cross_section>_<category>,<info>) , where <info> denotes the time series of information for the given cross-section and category. The following types of information are available:

  • value giving the latest available values for the indicator

  • eop_lag referring to days elapsed since the end of the observation period

  • mop_lag referring to the number of days elapsed since the mean observation period

  • grade denoting a grade of the observation, giving a metric of real time information quality.

After instantiating the JPMaQSDownload class within the macrosynergy.download module, one can use the download(tickers,start_date,metrics) method to easily download the necessary data, where tickers is an array of ticker strings, start_date is the first collection date to be considered and metrics is an array comprising the times series information to be downloaded.

# Cross-sections of interest

cids_dmca = [
    "AUD",
    "CAD",
    "CHF",
    "EUR",
    "GBP",
    "JPY",
    "NOK",
    "NZD",
    "SEK",
    "USD",
]  # DM currency areas
cids_dmec = ["DEM", "ESP", "FRF", "ITL", "NLG"]  # DM euro area countries
cids_latm = ["BRL", "COP", "CLP", "MXN", "PEN"]  # Latam countries
cids_emea = ["CZK", "HUF", "ILS", "PLN", "RON", "RUB", "TRY", "ZAR"]  # EMEA countries
cids_emas = [
    "CNY",
    "IDR",
    "INR",
    "KRW",
    "MYR",
    "PHP",
    "SGD",
    "THB",
    "TWD",
]  # EM Asia countries

cids_dm = cids_dmca + cids_dmec
cids_em = cids_latm + cids_emea + cids_emas

cids = sorted(cids_dm + cids_em)
main = [
    "CRESFXGDP_NSA_D1M1ML1",
    "CRESFXGDP_NSA_D1M1ML3",
    "CRESFXGDP_NSA_D1M1ML6",
    "SPACSGDP_NSA_D1M1ML1",
    "SPACSGDP_NSA_D1M1ML3",
    "SPACSGDP_NSA_D1M1ML6",
    "MBASEGDP_SA_D1M1ML1",
    "MBASEGDP_SA_D1M1ML3",
    "MBASEGDP_SA_D1M1ML6",
    "INTLIQGDP_NSA_D1M1ML1",
    "INTLIQGDP_NSA_D1M1ML3",
    "INTLIQGDP_NSA_D1M1ML6",
]

econ = ["REER_NSA_P1M60ML1"]  # economic context

mark = [
    "FXXR_NSA",
    "FXXR_VT10",
    "FXXRHvGDRB_NSA",
    "EQXR_NSA",
    "EQXR_VT10",
    "FXTARGETED_NSA",
    "FXUNTRADABLE_NSA",
]  # market links

mark = [
    "FXCRR_NSA",
    "FXXR_NSA",
    "FXXRHvGDRB_NSA",
    "FXXR_VT10",
    "EQXR_VT10",
    "EQXR_NSA",
    "DU05YXR_NSA",
    "DU05YXR_VT10",
    "FXTARGETED_NSA",
    "FXUNTRADABLE_NSA",
]  # market links


xcats = main + econ + mark
# Download series from J.P. Morgan DataQuery by tickers

start_date = "2000-01-01"
tickers = [cid + "_" + xcat for cid in cids for xcat in xcats]
print(f"Maximum number of tickers is {len(tickers)}")

# Retrieve credentials

client_id: str = os.getenv("DQ_CLIENT_ID")
client_secret: str = os.getenv("DQ_CLIENT_SECRET")

# Download from DataQuery

with JPMaQSDownload(client_id=client_id, client_secret=client_secret) as downloader:
    start = timer()
    df = downloader.download(
        tickers=tickers,
        start_date=start_date,
        metrics=["value", "eop_lag", "mop_lag", "grading"],
        suppress_warning=True,
        show_progress=True,
    )
    end = timer()

dfd = df

print("Download time from DQ: " + str(timedelta(seconds=end - start)))
Maximum number of tickers is 851
Downloading data from JPMaQS.
Timestamp UTC:  2023-07-19 14:42:35
Connection successful!
Number of expressions requested: 3404
Requesting data: 100%|███████████████████████████████████████████████████████████████| 171/171 [00:54<00:00,  3.12it/s]
Downloading data: 100%|██████████████████████████████████████████████████████████████| 171/171 [01:08<00:00,  2.50it/s]
Download time from DQ: 0:02:42.445682

Availability #

cids_exp = sorted(
    list(set(cids) - set(cids_dmec + ["HKD"]))
)  # cids expected in category panels
cats = list(
    set(main)
    - set(["SPACSGDP_NSA_D1M1ML1", "SPACSGDP_NSA_D1M1ML3", "SPACSGDP_NSA_D1M1ML6"])
)
msm.missing_in_df(dfd, xcats=cats, cids=cids_exp)

cids_spacs = ["EUR", "AUD", "CAD", "GBP", "JPY", "NZD", "SEK", "USD"]
msm.missing_in_df(
    dfd,
    xcats=["SPACSGDP_NSA_D1M1ML1", "SPACSGDP_NSA_D1M1ML3", "SPACSGDP_NSA_D1M1ML6"],
    cids=cids_spacs,
)
Missing xcats across df:  []
Missing cids for CRESFXGDP_NSA_D1M1ML1:  []
Missing cids for CRESFXGDP_NSA_D1M1ML3:  []
Missing cids for CRESFXGDP_NSA_D1M1ML6:  []
Missing cids for INTLIQGDP_NSA_D1M1ML1:  []
Missing cids for INTLIQGDP_NSA_D1M1ML3:  []
Missing cids for INTLIQGDP_NSA_D1M1ML6:  []
Missing cids for MBASEGDP_SA_D1M1ML1:  []
Missing cids for MBASEGDP_SA_D1M1ML3:  []
Missing cids for MBASEGDP_SA_D1M1ML6:  []
Missing xcats across df:  []
Missing cids for SPACSGDP_NSA_D1M1ML1:  []
Missing cids for SPACSGDP_NSA_D1M1ML3:  []
Missing cids for SPACSGDP_NSA_D1M1ML6:  []

Quantamental indicators of intervention liquidity are typically available by 2000, with exception of ‘domestic securities purchase expansion as % of GDP’ ( SPACSGDP_NSA_D1M1ML1 / _D1M1ML3 / _D1M1ML6 ). This is the case for all developed markets and most emerging markets.

‘Domestic securities purchase expansion as % of GDP’ is only available for Australia, Canada, the Eurozone, Great Britain, Japan, New Zealand, Sweden and the United States. Data is available from 2000 for only the United States and Canada. History for all other available cross-sections begins after 2010.

For the explanation of currency symbols, which are related to currency areas or countries for which categories are available, please view Appendix 2 .

xcatx = main
cidx = cids_exp

dfx = msm.reduce_df(dfd, xcats=xcatx, cids=cidx)
dfs = msm.check_startyears(
    dfx,
)
msm.visual_paneldates(dfs, size=(18, 8))

print("Last updated:", date.today())
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/239f1395ec32ec2e5732e11858a13284571c8fc9d5c02adc9cc5b5bf86461aaa.png
Last updated: 2023-07-19
xcatx = main
cidx = cids_exp

plot = msm.check_availability(
    dfd, xcats=xcatx, cids=cidx, start_size=(18, 4), start_years=False
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/faf9aaf5efb16a967f102d45fbfeda9fa3da61563c4e27bf75ed8113eafd69a9.png

Average vintage grading is consistent within the category groups: currency reserve expansion, monetary base expansion and intervention-driven liquidity expansion. Whilst the currency reserve expansion indicators comprise a substantial proportion of Grade 3 data, the monetary base and intervention-driven liquidity indicator categories are, on average, higher-graded.

Amongst domestic securities purchase expansion indicators, only data for New Zealand attains the highest (or close to the highest) grades.

xcatx = main
cidx = cids_exp

plot = msp.heatmap_grades(
    dfd,
    xcats=xcatx,
    cids=cidx,
    size=(18, 8),
    title=f"Average vintage grades from {start_date} onwards",
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/8483d0ba2be5987234fb2fc97929dfecebfbcad199495e52bf819a65224f2a9b.png
msp.view_ranges(
    dfd,
    xcats=["CRESFXGDP_NSA_D1M1ML3", "MBASEGDP_SA_D1M1ML3", "INTLIQGDP_NSA_D1M1ML3"],
    cids=cidx,
    val="eop_lag",
    title="End of observation period lags (ranges of time elapsed since end of observation period in days)",
    start="2002-01-01",
    kind="box",
    size=(16, 4),
)


msp.view_ranges(
    dfd,
    xcats=["SPACSGDP_NSA_D1M1ML3"],
    cids=cidx,
    val="eop_lag",
    title="End of observation period lags (ranges of time elapsed since end of observation period in days)",
    start="2002-01-01",
    kind="box",
    size=(16, 4),
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/4a9f4e263d946c2ca64029ab8fda270c97683c58efba19293de4e6e2c539efeb.png https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/37250526adb1c98aa7f0de2da5b653b8e0c2411f962a1907d018a0ffd41be82d.png

History #

FX reserve expansion as % of GDP #

Most currency areas have experienced positive long-term FX reserve expansion since 2000. The large reserve currencies have been notable exceptions.

xcatx = ["CRESFXGDP_NSA_D1M1ML1"]
cidx = cids_exp

msp.view_ranges(
    dfd,
    xcats=xcatx,
    cids=cidx,
    sort_cids_by="mean",
    start=start_date,
    title="Means and standard deviations of FX reserve expansions, % of GDP, since 2000",
    kind="bar",
    size=(16, 8),
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/6290c36ed8ad663f99abc404a9e80f25b21f978ee0451cec70a1a908a79c73f4.png
xcatx = ["CRESFXGDP_NSA_D1M1ML1", "CRESFXGDP_NSA_D1M1ML6"]
cidx = cids_exp

msp.view_timelines(
    dfd,
    xcats=xcatx,
    cids=cidx,
    start=start_date,
    title="FX reserve expansion, % of GDP",
    title_adj=1.03,
    title_fontsize=27,
    legend_fontsize=17,
    title_xadj=0.455,
    label_adj=0.075,
    xcat_labels=["over 1 month", "over 6 months"],
    ncol=4,
    same_y=False,
    size=(12, 7),
    aspect=1.7,
    all_xticks=True,
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/a38cade60428a5d13c642a90ddb61e2183ac77c86b149021172e2641fc78954c.png

Observed monthly FX reserve expansion has been mostly positively correlated across currency areas, particularly among EM and Asian countries.

xcatx = "CRESFXGDP_NSA_D1M1ML1"
cidx = cids_exp

msp.correl_matrix(
    dfd,
    xcats=xcatx,
    cids=cidx,
    size=(20, 14),
    title="Cross-sectional correlations for FX reserve expansions, % of GDP, since 2000",
    cluster=True,
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/ad813d7ebd6bdaaeb501e94825c107795b46ec5c5feefeb7ac743a6b5b924462.png

Domestic securities purchase expansion as % of GDP #

Security purchases have so far been positive across developed countries with official programs.

xcatx = ["SPACSGDP_NSA_D1M1ML1"]
cidx = cids_spacs

msp.view_ranges(
    dfd,
    xcats=xcatx,
    cids=cidx,
    sort_cids_by="mean",
    start="2010-01-01",
    title="Means and standard deviations of domestic securities purchase expansion, % of GDP, since 2010",
    kind="bar",
    size=(16, 8),
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/a3bc3abc0db5f78457c686f3adc895d8b6fc79ba5277fe93796aea5b810373d6.png
xcatx = ["SPACSGDP_NSA_D1M1ML1", "SPACSGDP_NSA_D1M1ML6"]
cidx = cids_spacs

msp.view_timelines(
    dfd,
    xcats=xcatx,
    cids=cidx,
    start="2010-01-01",
    title="Domestic security purchase expansion, % of annual GDP",
    title_adj=1.05,
    title_xadj=0.45,
    title_fontsize=27,
    legend_fontsize=17,
    xcat_labels=["over 1 month", "over 6 months"],
    label_adj=0.2,
    ncol=3,
    same_y=False,
    size=(12, 7),
    aspect=1.7,
    all_xticks=False,
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/9670b22a522c86d5951e6453a8cc146bdc7915fa63f43cdc922e6fd88bb3dd80.png

Monetary base expansion as % of GDP #

Mean monetary base expansion has been positive across all countries since 2000. There have been large variations across time, in some countries clearly related to security purchase programs.

xcatx = ["MBASEGDP_SA_D1M1ML1"]
cidx = cids_exp

msp.view_ranges(
    dfd,
    xcats=xcatx,
    cids=cidx,
    sort_cids_by="mean",
    start=start_date,
    title="Means and standard deviations of monetary base expansions, % of GDP, since 2000",
    kind="bar",
    size=(16, 8),
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/3bb031c171b76dd07fe01e7032e104b2b73137551a416ee08292adce16c0693f.png
xcatx = ["MBASEGDP_SA_D1M1ML1", "MBASEGDP_SA_D1M1ML6"]
cidx = cids_exp

msp.view_timelines(
    dfd,
    xcats=xcatx,
    cids=cidx,
    start="2000-01-01",
    title="Monetary base expansion, % of GDP",
    title_adj=1.03,
    title_xadj=0.455,
    title_fontsize=27,
    legend_fontsize=17,
    label_adj=0.075,
    xcat_labels=["over 1 month", "over 6 months"],
    ncol=4,
    same_y=False,
    size=(12, 7),
    aspect=1.7,
    all_xticks=True,
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/8b91f6306e42f6e520a3893083de2644e60db1def4351694f3f5fa99f69ebe3c.png

Observed monetary base expansions have been mostly positively correlated across currency areas.

xcatx = "MBASEGDP_SA_D1M1ML1"
cidx = cids_exp

msp.correl_matrix(
    dfd,
    xcats=xcatx,
    cids=cidx,
    title="Cross-sectional correlations for monetary base expansion, % of GDP, since 2000",
    size=(20, 14),
    cluster=True,
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/32f20158a3e909cdb7af3d03a2d46dc567114c89d427d77cffea42e4bc60acc0.png

Intervention-driven liquidity expansion as % of GDP #

The intervention-driven liquidity expansions have been positive over the long-term across all countries. The low interest-rate countries in Japan and Switzerland have experienced the largest long-term expansions, evidently related to their central banks’ struggle against deflation.

xcatx = ["INTLIQGDP_NSA_D1M1ML1"]
cidx = cids_exp

msp.view_ranges(
    dfd,
    xcats=xcatx,
    cids=cidx,
    sort_cids_by="mean",
    start="2000-01-01",
    title="Means and standard deviations of intervention-driven liquidity expansion, % of GDP, since 2000",
    kind="bar",
    size=(16, 8),
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/522e4d33b60136e1a7925e98e370a13ef2e8a3f35cfd250e4a307af03cb891a3.png
xcatx = ["INTLIQGDP_NSA_D1M1ML1", "INTLIQGDP_NSA_D1M1ML6"]
cidx = cids_exp

msp.view_timelines(
    dfd,
    xcats=xcatx,
    cids=cidx,
    start="2000-01-01",
    title="Intervention-driven liquidity expansion, % of GDP",
    title_adj=1.03,
    title_xadj=0.45,
    title_fontsize=27,
    legend_fontsize=17,
    label_adj=0.075,
    xcat_labels=["over 1 month", "over 6 months"],
    ncol=4,
    same_y=False,
    size=(12, 7),
    aspect=1.7,
    all_xticks=True,
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/0c7db33ef5382fe84933cd1f680bd1ee33dd34227e13b6de86f149cce9c26d06.png

Importance #

Empirical clues #

FX reserves and monetary base expansions have posted a positive correlation across the emerging and developed world. This suggests that, at least in part, FX interventions have been unsterilized, causing direct liquidity effects on local markets.

dfb = dfd[dfd["xcat"].isin(["FXTARGETED_NSA", "FXUNTRADABLE_NSA"])].loc[
    :, ["cid", "xcat", "real_date", "value"]
]
dfba = (
    dfb.groupby(["cid", "real_date"])
    .aggregate(value=pd.NamedAgg(column="value", aggfunc="max"))
    .reset_index()
)
dfba["xcat"] = "FXBLACK"
fxblack = msp.make_blacklist(dfba, "FXBLACK")
fxblack
{'BRL': (Timestamp('2012-12-03 00:00:00'), Timestamp('2013-09-30 00:00:00')),
 'CHF': (Timestamp('2011-05-02 00:00:00'), Timestamp('2016-06-30 00:00:00')),
 'CNY': (Timestamp('2000-01-03 00:00:00'), Timestamp('2023-07-18 00:00:00')),
 'CZK': (Timestamp('2014-01-01 00:00:00'), Timestamp('2017-07-31 00:00:00')),
 'ILS': (Timestamp('2000-01-03 00:00:00'), Timestamp('2005-12-30 00:00:00')),
 'INR': (Timestamp('2000-01-03 00:00:00'), Timestamp('2004-12-31 00:00:00')),
 'MYR_1': (Timestamp('2000-01-03 00:00:00'), Timestamp('2007-11-30 00:00:00')),
 'MYR_2': (Timestamp('2018-07-02 00:00:00'), Timestamp('2023-07-18 00:00:00')),
 'PEN': (Timestamp('2021-07-01 00:00:00'), Timestamp('2021-07-30 00:00:00')),
 'RON': (Timestamp('2000-01-03 00:00:00'), Timestamp('2005-11-30 00:00:00')),
 'RUB_1': (Timestamp('2000-01-03 00:00:00'), Timestamp('2005-11-30 00:00:00')),
 'RUB_2': (Timestamp('2022-02-01 00:00:00'), Timestamp('2023-07-18 00:00:00')),
 'SGD': (Timestamp('2000-01-03 00:00:00'), Timestamp('2023-07-18 00:00:00')),
 'THB': (Timestamp('2007-01-01 00:00:00'), Timestamp('2008-11-28 00:00:00')),
 'TRY_1': (Timestamp('2000-01-03 00:00:00'), Timestamp('2003-09-30 00:00:00')),
 'TRY_2': (Timestamp('2020-01-01 00:00:00'), Timestamp('2023-07-18 00:00:00'))}
xcatx = ["CRESFXGDP_NSA_D1M1ML1", "MBASEGDP_SA_D1M1ML1"]
cidx = cids_exp

cr = msp.CategoryRelations(
    dfd,
    xcats=xcatx,
    cids=cidx,
    blacklist=fxblack,
    freq="Q",
    lag=0,
    xcat_aggs=["mean", "mean"],
    xcat_trims=[2, 2],
    start="2000-01-01",
    years=None,
)

cr.reg_scatter(
    coef_box="lower right",
    title="Concurrent FX reserve and monetary base expansions, % of GDP, since 2000",
    xlab="FX reserve expansion",
    ylab="Monetary base expansion",
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/84dc04e76a680d4a09c41249e7d4914f04aba7a6b2ff9cc31199047e99d9957d.png

There has also been a clear and positive correlation between real exchange rate strength and subsequent FX interventions. Stronger currencies tend to trigger more FX interventions.

xcatx = ["REER_NSA_P1M60ML1", "CRESFXGDP_NSA_D1M1ML3"]
cidx = cids_exp

cr = msp.CategoryRelations(
    dfd,
    xcats=xcatx,
    cids=cidx,  # blacklist=black,
    freq="M",
    lag=1,
    xcat_aggs=["last", "mean"],
    xcat_trims=[30, 10],
    start="2000-01-01",
    years=None,
)

cr.reg_scatter(
    coef_box="lower left",
    reg_robust=True,
    title="Real effective exchange rates and subsequent FX reserve expansion, monthly frequency, since 2000",
    xlab="Real effective exchange rates",
    ylab="FX reserve expansion",
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/447edb78c69431c22d246d859243262a53afaafeac38d1fc579916f60af5c8d1.png

Historically, there has been a slight negative correlation between reported base money expansion and subsequent FX forward returns. Plausibly, the information value of liquidity creation trends is contingent on both stable market and economic conditions between the latest observed period and the current date.

xcatx = ["MBASEGDP_SA_D1M1ML6", "FXXR_NSA"]
cidx = list(set(cids_exp) - set(["USD"]))

cr = msp.CategoryRelations(
    dfd,
    xcats=xcatx,
    cids=cidx,
    blacklist=fxblack,
    freq="Q",
    lag=1,
    xcat_aggs=["last", "sum"],
    # xcat1_chg="diff",
    xcat_trims=[5, 10],
    start="2000-01-01",
    years=None,
)

cr.reg_scatter(
    title="Monetary base expansion and subsequent quarterly FX forward returns since 2000",
    labels=False,
    coef_box="upper right",
    xlab="Reported monetary base expansion, change over last 6 months, as % of GDP, end of quarter",
    ylab="Next quarter FX forward return, % quaterly rate",
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/823f0cd20c82164fb447dce66774053028d09c71dc285f14348a23e9202aae54.png

Similarly, reported intervention liquidity has been slightly negatively related to subsequent FX forward returns. Yet the metric would plausibly be a more accurate predictor of subsequent returns if it was adjusted for changes in market conditions between the latest observed period and the current date.

dfdx = dfd[~((dfd["xcat"] == "INTLIQGDP_NSA_D1M1ML6") & (abs(dfd["value"]) < 0.00001))]
xcatx = ["INTLIQGDP_NSA_D1M1ML6", "FXXR_NSA"]
cidx = list(set(cids_exp) - set(["USD"]))

cr = msp.CategoryRelations(
    dfdx,
    xcats=xcatx,
    cids=cidx,
    blacklist=fxblack,
    freq="Q",
    lag=1,
    xcat_trims=[10, 10],
    xcat_aggs=["last", "sum"],
    start="2000-01-01",
    years=None,
)

cr.reg_scatter(
    title="Intervention liquidity expansion and subsequent quarterly FX forward returns since 2000 for all countries",
    labels=False,
    coef_box="upper right",
    xlab="Reported intervention liquidity expansion, % of GDP, over last 6 months",
    ylab="Next month FX forward return",
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/0afba3a21ca7396f774149b29faadc21149a14f4a2000bbc69c061b824354c29.png

However, the relation between intervention liquidity and subsequent equity returns has been positive.

dfdx = dfd[~((dfd["xcat"] == "INTLIQGDP_NSA_D1M1ML1") & (abs(dfd["value"]) < 0.00001))]
xcatx = ["INTLIQGDP_NSA_D1M1ML1", "EQXR_NSA"]
cidx = list(
    set(cids_exp)
    - set(
        [
            "CLP",
            "COP",
            "CZK",
            "HUF",
            "IDR",
            "ILS",
            "NOK",
            "NZD",
            "PEN",
            "PHP",
            "RON",
            "RUB",
        ]
    )
)

cr = msp.CategoryRelations(
    dfdx,
    xcats=xcatx,
    cids=cidx,
    freq="Q",
    lag=1,
    xcat_trims=[2, 20],
    xcat_aggs=["last", "sum"],
    start="2000-01-01",
    years=None,
)

cr.reg_scatter(
    title="Intervention liquidity expansion over a month and subsequent quarterly equity index returns since 2000 for all countries",
    labels=False,
    coef_box="upper left",
    xlab="Reported intervention liquidity expansion, % of GDP, over last month",
    ylab="Next quarter equity index future return, % quarterly rate",
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/373b158c5ae502292e291207f5d841935872b0327983ce272acf79b63ca411bb.png
dfdx = dfd[~((dfd["xcat"] == "INTLIQGDP_NSA_D1M1ML6") & (abs(dfd["value"]) < 0.00001))]
xcatx = ["INTLIQGDP_NSA_D1M1ML6", "EQXR_NSA"]
cidx = list(
    set(cids_exp)
    - set(
        [
            "CLP",
            "COP",
            "CZK",
            "HUF",
            "IDR",
            "ILS",
            "NOK",
            "NZD",
            "PEN",
            "PHP",
            "RON",
            "RUB",
        ]
    )
)

cr = msp.CategoryRelations(
    dfdx,
    xcats=xcatx,
    cids=cidx,
    freq="Q",
    lag=1,
    xcat_trims=[10, 10],
    xcat_aggs=["last", "sum"],
    start="2000-01-01",
    years=None,
)

cr.reg_scatter(
    title="Intervention liquidity expansion over last 6 months and subsequent monthly equity index returns since 2000 for all countries",
    labels=False,
    coef_box="lower right",
    xlab="Reported intervention liquidity expansion, % of GDP, over last 6 months",
    ylab="Next quarter equity index future return, % quarterly rate",
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/61aa902b254efda5a33afe3f184a0ab0b8fa943ce9cc82f956fee402d78cd4d5.png

Interestingly, there has been some evidence of modest negative correlation between reported intervention liquidity expansion and subsequent duration returns.

dfdx = dfd[~((dfd["xcat"] == "INTLIQGDP_NSA_D1M1ML6") & (abs(dfd["value"]) < 0.00001))]
cr = msp.CategoryRelations(
    dfdx,
    xcats=["INTLIQGDP_NSA_D1M1ML6", "DU05YXR_NSA"],
    cids=list(set(cids_exp) - set(["BRL", "PEN", "PHP", "RON"])),  # blacklist=black,
    freq="Q",
    lag=1,
    xcat_aggs=["last", "sum"],
    xcat_trims=[3, 10],
    start="2000-01-01",
    years=None,
)

cr.reg_scatter(
    title="Intervention liquidity expansion and subsequent IRS monthly returns since 2000 for all countries",
    labels=False,
    coef_box="upper right",
    xlab="Reported intervention liquidity expansion, % of GDP, over last 6 months",
    ylab="Next quarter IRS return, % quarterly rate",
)
https://macrosynergy.com/notebooks.build/themes/financial-conditions/_images/0fa9a5a4302bdc800b12f9a510a5040d16b600a05842acd157d5fe8e9e9286fc.png

Appendices #

Appendix 1: Intervention-driven liquidity expansion formula #

In the below, \(\mathbb{1}\{\cdot\}\) denotes an indicator function. All indicators are expressed over the same time period.

\[\begin{split} \begin{align*} &\text{Intervention-driven liquidity expansion} \\ &= \text{sign}(\text{monetary base expansion}) \times \left[ \min(\left\lVert \text{monetary base expansion} \right\rVert,\left\lVert\text{securities purchase account expansion} + \text{FX reserve expansion}\right\rVert) \right] \\ &\times \mathbb{1}\left\{\text{sign}(\text{monetary base expansion}) == \text{sign}(\text{securities purchase account expansion} + \text{FX reserve expansion})\right\} \end{align*} \end{split}\]

Appendix 2: Currency symbols #

The word ‘cross-section’ refers to currencies, currency areas or economic areas. In alphabetical order, these are AUD (Australian dollar), BRL (Brazilian real), CAD (Canadian dollar), CHF (Swiss franc), CLP (Chilean peso), CNY (Chinese yuan renminbi), COP (Colombian peso), CZK (Czech Republic koruna), DEM (German mark), ESP (Spanish peseta), EUR (Euro), FRF (French franc), GBP (British pound), HKD (Hong Kong dollar), HUF (Hungarian forint), IDR (Indonesian rupiah), ITL (Italian lira), JPY (Japanese yen), KRW (Korean won), MXN (Mexican peso), MYR (Malaysian ringgit), NLG (Dutch guilder), NOK (Norwegian krone), NZD (New Zealand dollar), PEN (Peruvian sol), PHP (Phillipine peso), PLN (Polish zloty), RON (Romanian leu), RUB (Russian ruble), SEK (Swedish krona), SGD (Singaporean dollar), THB (Thai baht), TRY (Turkish lira), TWD (Taiwanese dollar), USD (U.S. dollar), ZAR (South African rand).