External reserve ratios #
The category group contains real-time measures of currency reserves as a % of various bases, such as nominal GDP, imports and exports (goods and services), the local monetary base, concurrent international liabilities and short term debt.
External reserve ratios are often used as an indication of a central bank’s ability to sustain exchange rate targets or to stabilize the currency in the event of sizable adverse shocks.
Reserves-to-GDP ratios #
Ticker : CRESGDP_NSA / CRESFXGDP_NSA
Label : Currency reserves as % of GDP: all assets / FX only.
Definition : Currency reserves (latest released stock) as % of nominal GDP (1-year moving average): all assets / FX only.
Notes :
-
This indicator returns the total local currency reserves in the form of foreign exchange reserves plus assets, as a percentage of the 1-year moving average of nominal GDP (unadjusted for inflation).
-
FX reserves alone comprise foreign-currency denominated deposits, securities and cash. Overall currency reserves also include gold, special drawing rights, and IMF reserve positions.
-
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 the reserve data have been released.
-
The ultimate sources of the reserve data are the national central bank balance sheets.
Reserves-to-imports ratios #
Ticker : CRESIMPORTS_NSA / CRESFXIMPORTS_NSA
Label : Currency reserves as % of imports: all assets / FX only.
Definition : Currency reserves (latest released stock) as % of total imports (1-year moving average): all assets / FX only.
Notes :
-
This indicator returns the total local currency reserves in the form of foreign exchange reserves plus assets, as a percentage of the 1-year moving average of total imports.
-
FX reserves alone comprise foreign-currency denominated deposits, securities and cash. Overall currency reserves also include gold, special drawing rights, and IMF reserve positions.
-
Total imports have been taken from the national accounts. They include both goods and services.
-
The ultimate sources of the reserve data are the national central bank balance sheets.
Reserves-to-exports ratios #
Ticker : CRESEXPORTS_NSA / CRESFXEXPORTS_NSA
Label : Currency reserves as % of exports: all assets / FX only.
Definition : Currency reserves (latest released stock) as % of total exports (1-year moving average): all assets / FX only.
Notes :
-
This indicator returns the total local currency reserves in the form of foreign exchange reserves plus assets, as a percentage of the 1-year moving average of total exports.
-
FX reserves alone comprise foreign-currency denominated deposits, securities and cash. Overall currency reserves also include gold, special drawing rights, and IMF reserve positions.
-
Total exports have been taken from the national accounts. They include both goods and services.
-
The ultimate sources of the reserve data are the national central bank balance sheets.
Reserves-to-liabilities ratios #
Ticker : CRESIIPLIAB_NSA / CRESFXIIPLIAB_NSA
Label : Currency reserves as % of liabilities: all assets / FX only.
Definition : Currency reserves (latest released stock) as % of international liabilities (latest released stock): all assets / FX only.
Notes :
-
This indicator returns the total local currency reserves in the form of foreign exchange reserves plus assets, as a percentage of international liabilities.
-
FX reserves alone comprise foreign-currency denominated deposits, securities and cash. Overall currency reserves also include gold, special drawing rights, and IMF reserve positions.
-
International liabilities are computed as the stock of external financial liabilities of residents (to non-residents). See also notes for “International investment position”.
-
The ultimate sources of the reserve data are the national central bank balance sheets.
Reserve-to-short-term-debt ratios #
Ticker : CRESSTDEBT_NSA / CRESFXSTDEBT_NSA
Label : Currency reserves as % of short term external debt: all assets / FX only.
Definition : Currency reserves (latest released stock) as % of external short term debt (latest released stock): all assets / FX only.
Notes :
-
This indicator returns the total local currency reserves in the form of foreign exchange reserves plus assets, as a percentage of short term debt.
-
FX reserves alone comprise foreign-currency denominated deposits, securities and cash. Overall currency reserves also include gold, special drawing rights, and IMF reserve positions.
-
Short term debt is computed as the stock of debt of residents (to non-residents). With original maturity of less then twelve months.
-
The source of short term debt is the World Bank. Release dats for vintages were acquired from the archives of the World bank.
-
The ultimate sources of the reserve data are the national central bank balance sheets.
Reserves-to-base ratios #
Ticker : CRESMBASE_SA / CRESFXMBASE_SA
Label : Currency reserves as % of monetary base: all assets / FX only.
Definition : Currency reserves (latest released stock) as % of % of monetary base (latest released stock, seasonally adjusted): all assets / FX only.
Notes :
-
This indicator returns the total local currency reserves in the form of foreign exchange reserves plus assets, as a percentage of the percentage change in seasonally adjusted monetary base.
-
FX reserves alone comprise foreign-currency denominated deposits, securities and cash. Overall currency reserves also include gold, special drawing rights, and IMF reserve positions.
-
The monetary base is conceptually money that is directly created 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 are the national central bank balance sheets.
-
The ultimate sources of the reserve data are the national central bank balance sheets.
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 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",
# "HKD",
"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)
# Quantamental categories of interest
main = [
"CRESGDP_NSA",
"CRESFXGDP_NSA",
"CRESIMPORTS_NSA",
"CRESFXIMPORTS_NSA",
"CRESEXPORTS_NSA",
"CRESFXEXPORTS_NSA",
"CRESIIPLIAB_NSA",
"CRESFXIIPLIAB_NSA",
"CRESMBASE_SA",
"CRESFXMBASE_SA",
"CRESSTDEBT_NSA",
"CRESFXSTDEBT_NSA",
]
econ = ["REER_NSA_P1M60ML1", "SPACSGDP_NSA"]
mark = [
"FXCRR_NSA",
"FXXR_NSA",
"FXCRR_VT10",
"FXXR_VT10",
"DU05YXR_NSA",
"DU05YXR_VT10",
"FXXRxEASD_NSA",
"DU02YXRxEASD_NSA",
"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)))
print("Last updated:", date.today())
Maximum number of tickers is 768
Downloading data from JPMaQS.
Timestamp UTC: 2023-09-07 11:05:15
Connection successful!
Number of expressions requested: 3072
Requesting data: 100%|███████████████████████████████████████████████████████████████| 154/154 [00:48<00:00, 3.20it/s]
Downloading data: 100%|██████████████████████████████████████████████████████████████| 154/154 [01:44<00:00, 1.47it/s]
Download time from DQ: 0:03:40.247608
Last updated: 2023-09-07
Availability #
cids_exp = sorted(list(set(cids) - set(cids_dmec))) # cids expected in category panels
msm.missing_in_df(dfd, xcats=main, cids=cids_exp)
Missing xcats across df: []
Missing cids for CRESEXPORTS_NSA: ['CNY']
Missing cids for CRESFXEXPORTS_NSA: ['CNY']
Missing cids for CRESFXGDP_NSA: []
Missing cids for CRESFXIIPLIAB_NSA: []
Missing cids for CRESFXIMPORTS_NSA: ['CNY']
Missing cids for CRESFXMBASE_SA: []
Missing cids for CRESFXSTDEBT_NSA: []
Missing cids for CRESGDP_NSA: []
Missing cids for CRESIIPLIAB_NSA: []
Missing cids for CRESIMPORTS_NSA: ['CNY']
Missing cids for CRESMBASE_SA: []
Missing cids for CRESSTDEBT_NSA: []
Real-time quantamental indicators of external reserve ratios are available back to the 1990s for most developed countries and the early 2000s for most emerging economies. Reserve-import ratios are not available for China. Moreover, most countries only have pure vintages based only on unrevised data for recent years.
For the explanation of currency symbols, which correspond to currency areas or countries for which categories are available, please view Appendix 1 .
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())
Last updated: 2023-09-07
xcatx = main
cidx = cids_exp
plot = msm.check_availability(
dfd, xcats=xcatx, cids=cidx, start_size=(18, 8), start_years=False
)
Average grading has been on the low side, near 3, as original vintages of reserve data are not yet available for all of the 2000s and 2010s. However, FX reserve revisions are not usually significant.
plot = msp.heatmap_grades(
dfd,
xcats=main,
cids=cids_exp,
start=start_date,
size=(20, 4),
title=f"Average external reserve ratio vintage grades, from {start_date} onwards",
)
msp.view_ranges(
dfd,
xcats=main,
cids=cids_exp,
val="eop_lag",
title="End of observation period lags (ranges of time elapsed since end of observation period in days)",
start=start_date,
kind="box",
size=(16, 4),
)
msp.view_ranges(
dfd,
xcats=main,
cids=cids_exp,
val="mop_lag",
title="Median of observation period lags (ranges of time elapsed since end of observation period in days)",
start=start_date,
kind="box",
size=(16, 4),
)
History #
Reserves-to-GDP ratios #
There have been huge differences in the average reserve-to-GDP ratios since 2000. Large open economies tend to have very high ratios. Central banks whose currencies are themselves used prominently as reserve assets hold very few reserves.
xcatx = ["CRESGDP_NSA", "CRESFXGDP_NSA"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start=start_date,
title="Means and standard deviations of reserve-to-GDP ratios since 2000",
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
kind="bar",
size=(16, 8),
)
Reserve ratio differences have partly structural reasons and, hence, do not generally converge. However, there can be large and sudden changes depending on local and global financial-economic conditions. Emerging economies, in particular, can post significant declines in times of turmoil and steady large increases in times of stability.
xcatx = ["CRESGDP_NSA", "CRESFXGDP_NSA"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start=start_date,
title="Reserve ratios, % of GDP",
title_adj=1.02,
title_xadj=0.43,
title_fontsize=27,
legend_fontsize=17,
label_adj=0.075,
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
ncol=4,
same_y=False,
size=(16, 8),
aspect=1.7,
all_xticks=True,
)
Reserve ratios have not generally been positively corrrelated. However, groups of EM currencies have displayed positive correlation.
xcatx = ["CRESFXGDP_NSA"]
dfdx = dfd.loc[dfd["xcat"].isin(xcatx), :]
dfmx = (
dfdx.groupby(["cid", "xcat"])
.resample("M", on="real_date")
.last()["value"]
.reset_index()
) # downsample to quarter-end values
msp.correl_matrix(
dfmx, xcats="CRESFXGDP_NSA", cids=cids_exp, size=(20, 14), cluster=True
)
Reserves-to-imports/export ratios #
Similarly to reserve-to-GDP ratios, the differences in the long-run averages of reserves-to-import and reserves-to-export ratios have been vast, ranging from under 1% to over 1000%. Central banks with flexible currencies and lower shares of trade to GDP show particularly low ratios.
The ratios cannot be calculated for China, because the country does not publish official broad import data based on the national accounts.
xcatx = ["CRESIMPORTS_NSA", "CRESFXIMPORTS_NSA"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start=start_date,
title="Means and standard deviations of reserve-to-imports ratios since 2000",
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
kind="bar",
size=(16, 8),
)
xcatx = ["CRESEXPORTS_NSA", "CRESFXEXPORTS_NSA"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start=start_date,
title="Means and standard deviations of reserve-to-exports ratios since 2000",
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
kind="bar",
size=(16, 8),
)
xcatx = ["CRESIMPORTS_NSA", "CRESFXIMPORTS_NSA", "CRESEXPORTS_NSA", "CRESFXEXPORTS_NSA"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start=start_date,
title="External reserve ratios as % of total imports and exports",
title_adj=1.02,
title_fontsize=27,
legend_fontsize=17,
title_xadj=0.43,
label_adj=0.075,
xcat_labels=[
"Overall currency reserves - imports",
"Foreign currencies only - imports",
"Overall currency reserves - exports",
"Foreign currencies only - exports",
],
ncol=4,
same_y=False,
size=(16, 8),
aspect=1.7,
all_xticks=True,
)
xcatx = ["CRESIMPORTS_NSA", "CRESEXPORTS_NSA"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start=start_date,
title="Overall currency reserves ratios as % of total imports and exports",
title_adj=1.02,
title_fontsize=27,
legend_fontsize=17,
title_xadj=0.43,
label_adj=0.075,
xcat_labels=[
"Overall currency reserves - imports",
"Overall currency reserves - exports",
],
ncol=4,
same_y=False,
size=(16, 8),
aspect=1.7,
all_xticks=True,
)
xcatx = ["CRESFXIMPORTS_NSA", "CRESFXEXPORTS_NSA"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start=start_date,
title="FX currency reserves ratios as % of total imports and exports",
title_adj=1.02,
title_fontsize=27,
legend_fontsize=17,
title_xadj=0.43,
label_adj=0.075,
xcat_labels=["FX currency reserves - imports", "FX currency reserves - exports"],
ncol=4,
same_y=False,
size=(16, 8),
aspect=1.7,
all_xticks=True,
)
Reserves-to-liabilities ratios #
The average ratios in reserves-to-liability ratios have ranged from 0.2% in the UK to over 90% in Taiwan. By the 2020s, no country fully covers external liabilities with official reserves anymore (and only Taiwan and China did so in the 2000s). Note that unlike in the case of GDP-based or imports-based ratios, here the ratio compares two stocks of financial claims.
xcatx = ["CRESIIPLIAB_NSA", "CRESFXIIPLIAB_NSA"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start=start_date,
title="Means and standard deviations of reserve-to-liabilities ratios since 2000",
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
kind="bar",
size=(16, 8),
)
xcatx = ["CRESIIPLIAB_NSA", "CRESFXIIPLIAB_NSA"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start=start_date,
title="External reserve ratios as % of international liabilities",
title_adj=1.02,
title_fontsize=27,
legend_fontsize=17,
title_xadj=0.44,
label_adj=0.075,
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
ncol=4,
same_y=False,
size=(16, 8),
aspect=1.7,
all_xticks=True,
)
Reserve-to-short-term-debt ratios #
These ratios have been vastly different across countries. Generally emerging countries post a lot higher reserve relative to their short-term external debt, party because their borrowing is more restricted and partly as consequence of deliberate effors to provide coverage. Low ratios of reserves to short-term are not by themselves a major risk factor, but they can be if the credit standing of the country, particularly the sovereign, is unstable and the economy relies on some form of exchange rate management. In the worst case a country with an exchange rate peg and a low reserve-to-short term debt ratio may face a choice between a currency crisis and defaults of local obligors.
xcatx = ["CRESSTDEBT_NSA", "CRESFXSTDEBT_NSA"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start=start_date,
title="Means and standard deviations of reserve-to-short-term-debt ratios since 2000",
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
kind="bar",
size=(16, 8),
)
xcatx = ["CRESSTDEBT_NSA", "CRESFXSTDEBT_NSA"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start=start_date,
title="External reserve ratios as % of short term debt",
title_adj=1.02,
title_fontsize=27,
legend_fontsize=17,
title_xadj=0.44,
label_adj=0.075,
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
ncol=4,
same_y=False,
size=(16, 8),
aspect=1.7,
all_xticks=True,
)
Reserves-to-base ratios #
For most currency areas, the long-term average ratios of external reserves to the monetary base have been more similar than other ratios. The exceptions are Singapore (on the high side) and those traditional reserve currencies (on the low side).
Conceptually, the main function of reserves-to-base ratios is to gauge the potential impact of capital flows on local liquidity. Reserve currencies typically experience less violent swings of such flows and even when they do occur their central bank do not typically feel the need to intervene.
xcatx = ["CRESMBASE_SA", "CRESFXMBASE_SA"]
cidx = cids_exp
msp.view_ranges(
dfd,
xcats=xcatx,
cids=cidx,
sort_cids_by="mean",
start=start_date,
title="Means and standard deviations of reserve ratios to monetary base since 2000",
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
kind="bar",
size=(16, 8),
)
xcatx = ["CRESMBASE_SA", "CRESFXMBASE_SA"]
cidx = cids_exp
msp.view_timelines(
dfd,
xcats=xcatx,
cids=cidx,
start=start_date,
title="Movement of external reserve ratios, % of monetary base",
title_adj=1.02,
title_xadj=0.43,
title_fontsize=27,
legend_fontsize=17,
label_adj=0.075,
xcat_labels=["Overall currency reserves", "Foreign currencies only"],
ncol=4,
same_y=False,
size=(16, 8),
aspect=1.7,
all_xticks=True,
)
Importance #
Research links #
“Macro variables and policy variables (i.e., short-term rates, debt quantities, and foreign exchange reserves) account for 55% of the variation in exchange rates, 57% of long-term yields, and 69% of stock prices.” Koijen and Yogo
“By allowing the central bank to give some significantly positive weight to the level of precautionary foreign reserves as one of its targets, a currency crisis scenario can be avoided, while such a crisis is likely to occur when this weight is zero or sufficiently low.” Kato, Proaño and Semmler
Empirical clues #
There has been a clear negative relation between reserve-to-GDP ratios and real FX carry in the EM space . The relation seems to be related to diverging FX policies: some central banks seek to contain appreciation through intervention (reserve accumulation) and low local rates, while others effectively encourage inflows through higher local real interest rates. From a global investor perspective this points to a trade-off between carry and reserve buffers of currency areas and argues for the joint consideration of both in trading strategies.
# Prepare blacklist period for currencies and periods that were markeed by tight FX targets or lack of liquidity
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-09-06 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-09-06 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-09-06 00:00:00')),
'SGD': (Timestamp('2000-01-03 00:00:00'), Timestamp('2023-09-06 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-09-06 00:00:00'))}
cr = msp.CategoryRelations(
dfd,
xcats=["CRESGDP_NSA", "FXCRR_NSA"],
cids=cids_em,
blacklist=fxblack,
freq="A",
lag=0,
xcat_aggs=["mean", "mean"],
start=start_date,
years=3,
)
cr.reg_scatter(
title="External reserve-to-GDP ratios and real FX carry across all major EM currencies, 3-year periods since 2000",
labels=True,
coef_box="upper right",
ylab="Average real 1-month forward-implied FX carry",
xlab="Average currency reserve ratio as % of GDP",
)
There has been an even stronger relation between reserve ratios and FX volatility in the EM space. Reserve ratios are a plausible determinant and predictor of medium-term FX forward volatility.
cr = msp.CategoryRelations(
dfd,
xcats=["CRESGDP_NSA", "FXXRxEASD_NSA"],
cids=cids_em,
blacklist=fxblack,
freq="A",
lag=0,
xcat_aggs=["mean", "mean"],
start=start_date,
years=3,
)
cr.reg_scatter(
title="External reserve-to-GDP ratios and real FX volatility across all major EM currencies, 3-year periods since 2000",
labels=True,
coef_box="upper right",
ylab="Average annualized volatility of FX forward returns",
xlab="Average currency reserve ratio as % of GDP",
)
A similar analysis further reveals that currency reserve ratios have also been strongly negatively correlated with local interest rate swap return volatility.
cr = msp.CategoryRelations(
dfd,
xcats=["CRESGDP_NSA", "DU02YXRxEASD_NSA"],
cids=cids_em,
blacklist=fxblack,
freq="A",
lag=0,
xcat_aggs=["mean", "mean"],
start=start_date,
years=3,
)
DU02YXRxEASD_NSA misses: ['BRL', 'PEN', 'PHP', 'RON'].
cr.reg_scatter(
title="External reserve-to-GDP ratios and real FX volatility across all major EM currencies, 3-year periods since 1990",
labels=True,
coef_box="upper right",
ylab="Average annualized volatility of 2-year IRS receiver returns",
xlab="Average currency reserve ratio as % of GDP",
)
Appendices #
Appendix 1: 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).