Government borrowing requirements #

This category group focuses on real time metrics of government borrowing requirements as reported by official sources. They are ex-post records of net financing needs. Effectively, they measure the difference between cash arriving into government accounts and cash leaving, considering all financial activities, including acquisition of capital assets, loans, financial investments and advances. Thus, there is a relation to government budget deficits, but not necessarily a close one.

Government borrowing requirements are indicative of net public debt supply and the fiscal policy stance.

Net borrowing requirement ratios #

Ticker : GNBRGDP_NSA

Label : Government borrowing requirement, % of GDP

Definition : Government borrowing requirement, current period, official government estimate, as % of GDP

Notes :

  • Government borrowing requirements are generally defined as the financial needs of a government when calculated via a cash accounting basis. Unlike debt calculations, borrowing requirement figures are not harmonised at a European level. See here for more information.

  • A positive number indicates a net borrowing requirement, whilst a negative number indicates net lending.

  • In general, borrowing requirements are not equal to changes in public debt, because they can also be met by changing the cash balances with the treasury. Borrowing needs are obtained as the variation in debt, net of the use of liquidity by the government.

  • We calculate borrowing requirements as a ratio to nominal GDP. This means that the borrowing requirements are annualized for the reporting period and divided by the trailing one-year moving average of GDP.

  • Most countries report central government borrowing requirements. However, general government borrowing requirements are used when available in a timely fashion.

  • The central government is composed of the institutional units making up the central government plus those non-profit institutions that are controlled and mainly financed by the central government. The general government, on the other hand, is defined as the sum of central, state and local governments including the social security funds controlled by these units.

  • Sources for borrowing requirements are the government’s official publications. These come at different frequencies, mainly monthly. However, Australia, Malaysia and Singapore publish quarterly figures. Additionally, France and Taiwan publish yearly figures. Where explicit borrowing requirement data are missing, we use proxies. See Appendix 1 for country-specific information.

Ticker : GNBRGDP_NSA_3MMA / GNBRGDP_NSA_6MMA / GNBRGDP_NSA_12MMA / GNBRGDP_NSA_2QMA / GNBRGDP_NSA_4QMA

Label : Government borrowing requirement, % of GDP: 3-month moving average / 6-month moving average / 12-month moving average / 2-quarter moving average / 4-quarter moving average

Definition : Government borrowing requirement, current period, official government estimate, as % of GDP: 3-month moving average / 6-month moving average / 12-month moving average / 2-quarter moving average / 4-quarter moving average

Notes :

  • Whether quarterly or monthly averaging is chosen depends on the native frequency of the series.

  • See further the important notes above on GNBRGDP_NSA .

Government borrowing changes #

Ticker : GNBRGDP_NSA_D3M3ML12 / GNBRGDP_NSA_D6M6ML12 / GNBRGDP_NSA_D12M12ML12 / GNBRGDP_NSA_D1Q1QL4 / GNBRGDP_NSA_D2Q2QL4 / GNBRGDP_NSA_D4Q4QL4 / GNBRGDP_NSA_D1Y1YL1

Label : Government borrowing requirement, % of GDP, change: diff oya, 3mma / diff oya, 6mma / diff oya, 12mma / diff oya, quaterly / diff oya, 2qma / diff oya, 4qma / diff y/y

Definition : Government borrowing requirement, % of GDP, change: difference over a year ago, 3-month average / difference over a year ago, 6-month average / difference over a year ago, 12-month average / difference over a year ago, quarterly / difference over a year ago, 2-quarter moving average / difference over a year ago, 4-quarter moving average / difference year over previous year

Notes :

  • Whether annual, quarterly or monthly averaging is chosen depends on the native frequency of the series.

  • See further the important notes above on GNBRGDP_NSA .

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", "GBP", "SEK", "USD"]  # DM currency areas
cids_dmec = ["DEM", "ESP", "FRF", "ITL"]  # DM euro area countries
cids_latm = ["CLP", "MXN", "PEN"]  # Latam countries
cids_emea = ["TRY", "ILS", "PLN", "RUB", "ZAR"]  # EMEA countries
cids_emas = ["IDR", "INR", "SGD", "THB", "TWD", "HKD", "MYR"]  # EM Asia countries

cids_dm = cids_dmca + cids_dmec
cids_em = cids_latm + cids_emea + cids_emas
cids = sorted(cids_dm + cids_em)

cids_fx = set(cids) - set(cids_dmec + ["EUR", "USD", "CNY"])

# Organise as well by frequency
cids_m = [
    "CAD",
    "CHF",
    "CLP",
    "DEM",
    "ESP",
    # "HKD",
    "INR",
    "IDR",
    "ILS",
    "ITL",
    "MXN",
    "NZD",
    "PEN",
    "PLN",
    "RUB",
    "SEK",
    "THB",
    "TRY",
    "GBP",
    "USD",
    "ZAR",
]
cids_q = ["AUD", "MYR", "SGD"]
cids_y = ["FRF", "TWD"]
# Quantamental categories of interest

main = [
    "GNBRGDP_NSA",
    "GNBRGDP_NSA_3MMA",
    "GNBRGDP_NSA_6MMA",
    "GNBRGDP_NSA_12MMA",
    "GNBRGDP_NSA_D3M3ML12",
    "GNBRGDP_NSA_D6M6ML12",
    "GNBRGDP_NSA_D12M12ML12",
    "GNBRGDP_NSA_2QMA",
    "GNBRGDP_NSA_4QMA",
    "GNBRGDP_NSA_D1Q1QL4",
    "GNBRGDP_NSA_D2Q2QL4",
    "GNBRGDP_NSA_D4Q4QL4",
    "GNBRGDP_NSA_D1Y1YL1",
]

econ = []  # economic context
mark = [
    "EQXR_NSA",
    "EQXR_VT10",
    "DU05YXR_NSA",
    "DU05YXR_VT10",
    "GB01YXR_VT10",
    "GB05YXR_VT10",
]  # market links

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

start_date = "1990-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,
        show_progress=True,
        report_time_taken=True,
        metrics=["value", "eop_lag", "mop_lag", "grading"],
        suppress_warning=True,
    )
    end = timer()

dfd = df

print("Download time from DQ: " + str(timedelta(seconds=end - start)))
Maximum number of tickers is 475
Downloading data from JPMaQS.
Timestamp UTC:  2023-09-07 10:52:05
Connection successful!
Number of expressions requested: 1900
Requesting data: 100%|█████████████████████████████████████████████████████████████████| 95/95 [00:29<00:00,  3.17it/s]
Downloading data: 100%|████████████████████████████████████████████████████████████████| 95/95 [00:50<00:00,  1.89it/s]
Time taken to download data: 	81.39 seconds.
Time taken to convert to dataframe: 	20.33 seconds.
Download time from DQ: 0:01:41.724895

Availability #

cids_exp = sorted(list(set(cids)))  # cids expected in category panels
msm.missing_in_df(dfd, xcats=main, cids=cids_exp)
Missing xcats across df:  []
Missing cids for GNBRGDP_NSA:  []
Missing cids for GNBRGDP_NSA_12MMA:  ['FRF', 'TWD', 'AUD', 'MYR', 'SGD']
Missing cids for GNBRGDP_NSA_2QMA:  ['PLN', 'USD', 'DEM', 'ESP', 'ZAR', 'CAD', 'PEN', 'ITL', 'CLP', 'SEK', 'INR', 'RUB', 'GBP', 'IDR', 'FRF', 'HKD', 'MXN', 'THB', 'TWD', 'CHF', 'TRY', 'ILS']
Missing cids for GNBRGDP_NSA_3MMA:  ['FRF', 'TWD', 'AUD', 'MYR', 'SGD']
Missing cids for GNBRGDP_NSA_4QMA:  ['PLN', 'USD', 'DEM', 'ESP', 'ZAR', 'CAD', 'PEN', 'ITL', 'CLP', 'SEK', 'INR', 'RUB', 'GBP', 'IDR', 'FRF', 'HKD', 'MXN', 'THB', 'TWD', 'CHF', 'TRY', 'ILS']
Missing cids for GNBRGDP_NSA_6MMA:  ['FRF', 'TWD', 'AUD', 'MYR', 'SGD']
Missing cids for GNBRGDP_NSA_D12M12ML12:  ['FRF', 'TWD', 'AUD', 'MYR', 'SGD']
Missing cids for GNBRGDP_NSA_D1Q1QL4:  ['PLN', 'USD', 'DEM', 'ESP', 'ZAR', 'CAD', 'PEN', 'ITL', 'CLP', 'SEK', 'INR', 'RUB', 'GBP', 'IDR', 'FRF', 'HKD', 'MXN', 'THB', 'TWD', 'CHF', 'TRY', 'ILS']
Missing cids for GNBRGDP_NSA_D1Y1YL1:  ['PLN', 'USD', 'DEM', 'MYR', 'ESP', 'ZAR', 'CAD', 'PEN', 'ITL', 'CLP', 'SEK', 'INR', 'RUB', 'GBP', 'IDR', 'HKD', 'MXN', 'AUD', 'THB', 'SGD', 'CHF', 'TRY', 'ILS']
Missing cids for GNBRGDP_NSA_D2Q2QL4:  ['PLN', 'USD', 'DEM', 'ESP', 'ZAR', 'CAD', 'PEN', 'ITL', 'CLP', 'SEK', 'INR', 'RUB', 'GBP', 'IDR', 'FRF', 'HKD', 'MXN', 'THB', 'TWD', 'CHF', 'TRY', 'ILS']
Missing cids for GNBRGDP_NSA_D3M3ML12:  ['FRF', 'TWD', 'AUD', 'MYR', 'SGD']
Missing cids for GNBRGDP_NSA_D4Q4QL4:  ['PLN', 'USD', 'DEM', 'ESP', 'ZAR', 'CAD', 'PEN', 'ITL', 'CLP', 'SEK', 'INR', 'RUB', 'GBP', 'IDR', 'FRF', 'HKD', 'MXN', 'THB', 'TWD', 'CHF', 'TRY', 'ILS']
Missing cids for GNBRGDP_NSA_D6M6ML12:  ['FRF', 'TWD', 'AUD', 'MYR', 'SGD']

Real-time data of government borrowing requirements is available by the mid-2000s for most developed markets and some emerging market categories. France and Canada are notable developed market late-starters. Most data have a native monthly frequency.

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/macroeconomic-balance-sheets/_images/d1b9bd7428f3b272332a45a5eafff243716397f58b30e6d4096c1dc9f2d76008.png
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
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/3f429bb6a444285c5f182c1ebe3266564ce2ef6f41142ecf3db3d82ed0079e73.png

Average vintage grading is consistently low across indicator categories and cross-sections.

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/macroeconomic-balance-sheets/_images/4929bdf4407aa5e0c088ca07406836f55d5bd739d8b0ef234f4aed4750a7cea8.png
# Grouping indicators for ease in creating lag boxplots
ratios = [
    "GNBRGDP_NSA",
    "GNBRGDP_NSA_3MMA",
    "GNBRGDP_NSA_6MMA",
    "GNBRGDP_NSA_12MMA",
    "GNBRGDP_NSA_2QMA",
    "GNBRGDP_NSA_4QMA",
]
changes = [
    "GNBRGDP_NSA_D3M3ML12",
    "GNBRGDP_NSA_D6M6ML12",
    "GNBRGDP_NSA_D12M12ML12",
    "GNBRGDP_NSA_D1Q1QL4",
    "GNBRGDP_NSA_D2Q2QL4",
    "GNBRGDP_NSA_D4Q4QL4",
    "GNBRGDP_NSA_D1Y1YL1",
]
msp.view_ranges(
    dfd,
    xcats=ratios,
    cids=cids_dm,
    val="eop_lag",
    title="End of observation period lags (ranges of time elapsed since end of observation period in days), net borrowing requirement ratios, developed markets",
    start=start_date,
    kind="box",
    size=(16, 4),
)
msp.view_ranges(
    dfd,
    xcats=ratios,
    cids=cids_em,
    val="eop_lag",
    title="End of observation period lags (ranges of time elapsed since end of observation period in days), net borrowing requirement ratios, emerging markets",
    start=start_date,
    kind="box",
    size=(16, 4),
)

msp.view_ranges(
    dfd,
    xcats=ratios,
    cids=cids_dm,
    val="mop_lag",
    title="Median of observation period lags (ranges of time elapsed since end of observation period in days), net borrowing requirement ratios, developed markets",
    start=start_date,
    kind="box",
    size=(16, 4),
)
msp.view_ranges(
    dfd,
    xcats=ratios,
    cids=cids_em,
    val="mop_lag",
    title="Median of observation period lags (ranges of time elapsed since end of observation period in days), net borrowing requirement ratios, emerging markets",
    start=start_date,
    kind="box",
    size=(16, 4),
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/ac7bb952c14e2dbba69a6847cb461099ab5dd6998b48138defde37d26060d56c.png https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/4f38d53b767c381b6d2f24af78ca889aedfccdea584a676dafe303955900aa8d.png https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/adad35e0f9c81b34b645e008b85e54a5eab6e8705b35bc588320c967c142b5c9.png https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/bc9d32b49e230a449255d6cbc2e7b1b3e347f2a6cdf2893ec0ba53cdd6c56e55.png
msp.view_ranges(
    dfd,
    xcats=changes,
    cids=cids_dm,
    val="eop_lag",
    title="End of observation period lags (ranges of time elapsed since end of observation period in days), government borrowing changes, developed markets",
    start=start_date,
    kind="box",
    size=(16, 4),
)
msp.view_ranges(
    dfd,
    xcats=changes,
    cids=cids_em,
    val="eop_lag",
    title="End of observation period lags (ranges of time elapsed since end of observation period in days), government borrowing changes, emerging markets",
    start=start_date,
    kind="box",
    size=(16, 4),
)

msp.view_ranges(
    dfd,
    xcats=changes,
    cids=cids_dm,
    val="mop_lag",
    title="Median of observation period lags (ranges of time elapsed since end of observation period in days), government borrowing changes, developed markets",
    start=start_date,
    kind="box",
    size=(16, 4),
)
msp.view_ranges(
    dfd,
    xcats=changes,
    cids=cids_em,
    val="mop_lag",
    title="Median of observation period lags (ranges of time elapsed since end of observation period in days), government borrowing changes, emerging markets",
    start=start_date,
    kind="box",
    size=(16, 4),
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/0c8527d1ca2d878304239c50a85903f9dbd9b167934894bbb10f617a297e7a3e.png https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/37c7f6e1d4a45464aff6d1bc8f00b5a9fab5e70b5e95c2fce6d0eb62579562ac.png https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/9e104f0d6ba1bcad15485bbc22f3bd40512b87f1fc39abf400b50f0809d55d96.png https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/51acfe0e1e29491121a6a5c946286eed4b83c4251a8094d1be091c0a077347ea.png

History #

Government borrowing requirement ratios #

Whilst borrowing requirements have displayed much monthly volatility, multi-month trends, particularly 12-month ratios show clear interpretable phases, related to major economic and financial events.

xcatx = ["GNBRGDP_NSA_3MMA", "GNBRGDP_NSA_6MMA", "GNBRGDP_NSA_12MMA"]
cidx = cids_exp

msp.view_ranges(
    dfd,
    xcats=xcatx,
    cids=cidx,
    sort_cids_by="mean",
    start="2000-01-01",
    kind="bar",
    title="Means and standard deviations of government borrowing requirement ratios, % of GDP, since 2000",
    xcat_labels=[
        "3-month moving average",
        "6-month moving average",
        "12-month moving average",
    ],
    size=(16, 8),
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/992507efa9999342f2d88c2315756dc5e94549f7a87088ae7b57f2cf64f238f7.png
xcatx = ["GNBRGDP_NSA_3MMA", "GNBRGDP_NSA_6MMA", "GNBRGDP_NSA_12MMA"]
cidx = cids_exp

msp.view_timelines(
    dfd,
    xcats=xcatx,
    cids=cidx,
    start=start_date,
    title="Government borrowing requirements, % of GDP",
    title_adj=1.03,
    title_xadj=0.4425,
    title_fontsize=27,
    legend_fontsize=17,
    label_adj=0.15,
    xcat_labels=[
        "3-month moving average",
        "6-month moving average",
        "12-month moving average",
    ],
    ncol=4,
    same_y=False,
    size=(12, 7),
    aspect=1.7,
    all_xticks=True,
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/7879dc36c178796eedf09975405fd91e2e0f3a796bad6d34d671e42c2bf3c41d.png

Borrowing requirement information states have mostly been positively correlated, reflecting common factors such as business cycles, financial crises, and the 2020-21 pandemic.

xcatx = "GNBRGDP_NSA_12MMA"
cidx = cids_m

msp.correl_matrix(
    dfd,
    xcats=xcatx,
    cids=cidx,
    start="2000-01-01",
    title="Cross-sectional correlations of government borrowing requirements, 12-month moving averages, since 2000",
    size=(20, 14),
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/08f7c31621dbb1fdcf7f33b1282b53edcf363696e0027f7d432a9729c3b37210.png

Importance #

Empirical clues #

For the convenience of code and analysis we convert monthly-frequency ticker names to their counterparts.

olds = ["GNBRGDP_NSA_2QMA", "GNBRGDP_NSA_4QMA"]
news = ["GNBRGDP_NSA_6MMA", "GNBRGDP_NSA_12MMA"]
dfx = dfd.replace(to_replace=olds, value=news)
olds = ["GNBRGDP_NSA_D1Q1QL4", "GNBRGDP_NSA_D2Q2QL4", "GNBRGDP_NSA_D4Q4QL4"]
news = ["GNBRGDP_NSA_D3M3ML12", "GNBRGDP_NSA_D6M6ML12", "GNBRGDP_NSA_D12M12ML12"]
dfx.replace(to_replace=olds, value=news, inplace=True)

There is some evidence that reported borrowing trends have some forward predictive power for short-dated government bond returns at a monthly frequency. There has been a statistically significant, negative relation between government borrowing requirements (in 6-month and 112-month moving averagse) and subsequent excess bond returns for 1-year maturity. The relationship is dominated by the UK and, particualrly the U.S., which has the longest history.

xcatx = ["GNBRGDP_NSA_6MMA", "GB01YXR_VT10"]
cidx = list(
    set(cids_exp)
    - set(
        [
            "CAD",
            "CHF",
            "CLP",
            "FRF",
            "HKD",
            "IDR",
            "ILS",
            "INR",
            "MXN",
            "MYR",
            "PEN",
            "PLN",
            "RUB",
            "SEK",
            "SGD",
            "THB",
            "TRY",
            "TWD",
            "ZAR",
        ]
    )
)

cr = msp.CategoryRelations(
    dfx,
    xcats=xcatx,
    cids=cidx,
    freq="M",
    lag=1,
    xcat_aggs=["mean", "sum"],
    start="2000-01-01",
)

cr.reg_scatter(
    labels=False,
    title="Net borrowing requirement ratios and subsequent government bond returns since 2000",
    ylab="Generic government bond excess returns, 1-year maturity",
    xlab="Net borrowing requirement ratios, 6-month moving average,",
    coef_box="upper right",
    prob_est="map",
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/4868287e8bcd04352b841a3cfa190636b41ad51a1b2d4044ef72450b573b8278.png
xcatx = ["GNBRGDP_NSA_12MMA", "GB01YXR_VT10"]
cidx = list(
    set(cids_exp)
    - set(
        [
            "CAD",
            "CHF",
            "CLP",
            "FRF",
            "HKD",
            "IDR",
            "ILS",
            "INR",
            "MXN",
            "MYR",
            "PEN",
            "PLN",
            "RUB",
            "SEK",
            "SGD",
            "THB",
            "TRY",
            "TWD",
            "ZAR",
        ]
    )
)

cr = msp.CategoryRelations(
    dfx,
    xcats=xcatx,
    cids=cidx,
    freq="M",
    lag=1,
    xcat_aggs=["mean", "sum"],
    start="2000-01-01",
)

cr.reg_scatter(
    labels=False,
    coef_box="upper right",
    title="Net borrowing requirement ratios and subsequent monthly excess government bond returns, 10% vol-target, since 2000",
    xlab="Net borrowing requirement ratios",
    ylab="Govt. bond excess returns",
    separator="cids",
    title_adj=1.05,
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/06170c15bd3691b8a45bf2c2f11ddb5eba2b6f87ec7fd025ba5bf352b35d1761.png

Borrowing requirements have less predictive power with respect to 5-year bond returns, although there has been some negative correlation in the U.S.

xcatx = ["GNBRGDP_NSA_12MMA", "GB05YXR_VT10"]
cidx = cids_exp

cr = msp.CategoryRelations(
    dfx,
    xcats=xcatx,
    cids=["USD"],
    freq="M",
    lag=1,
    xcat_aggs=["mean", "sum"],
    start="2000-01-01",
    xcat_trims=[20, 20],
)

cr.reg_scatter(
    labels=False,
    title="Net borrowing requirement ratios and subsequent government bond returns since 2000",
    ylab="Generic government bond excess returns, 5-year maturity",
    xlab="Net borrowing requirement ratios, 12-month moving average,",
    coef_box="upper right",
    prob_est="map",
)
https://macrosynergy.com/notebooks.build/themes/macroeconomic-balance-sheets/_images/10da69e6a9950b4328c2ac6d44e69616440cab0b0982014a6d79a7e40a760f91.png

Appendices #

Appendix 1: Country-specific notes #

  • Australia publishes a quarterly update on general government statistics, which include general government net lending/borrowing, which we take as a proxy of their quarterly borrowing requirements.

  • Canada posts monthly borrowing requirement data for general government which they define as ‘net change in financing activities’ or ‘financial source/requirement’. They define this as ‘cash coming in to the government and cash coming out’. More information on their methology can be found here .

  • Chile posts monthly borrowing requirements for central government in line with our definition on their government website (financing needs after having considered treasury cash balance).

  • France doesn’t publish monthly borrowing requirements. They publish yearly borrowing requirements, which get updated throughout the year and these correspond to their yearly expected public debt issuance.

  • Germany publishes federal budget monthly statements which include net borrowing numbers in accordance with our general definition: net borrowing is what comes after use of their cash resources, seigniorage and movements in reserves.

  • Hong Kong publishes provisional deficit financing numbers for the Hong Kong Federal Special Administrative region, which agree with our general definition of borrowing requirements (financing after use of cash).

  • India does not publish monthly borrowing requirement numbers. As a proxy, we take the sum between domestic and external financing which they publish monthly in their government statistics bulletin. This data is for the Union Government.

  • Indonesia publishes central government monthly figures for net financing.

  • Israel does not publish net borrowing requirement figures so we use a proxy by summing net domestic financing and net foreign financing for the central government.

  • Italy has good central government borrowing requirement data which they publish each month.

  • Mexico does not publish borrowing requirements so we take a proxy: we use public debt for the federal government, which comes in stock form, and we convert it into a monthly flow figure.

  • Peru publishes central government net financing numbers on a monthly basis.

  • Poland does not publish borrowing requirements according to our definition so instead we use what they define as Net Cash Inflows from financing activities as a proxy (calculated as inflows from financing activities minus net liabilities).

  • Russia publishes a monthly record of ‘sources of financing the deficit’ which is in line with our definition (financing needs after having considered treasury cash balance).

  • Singapore does not publish borrowing requirements so we take quarterly government debt numbers as a proxy.

  • South Africa publishes monthly data fully in line with our definition of borrowing requirements on their treasury website (financing needs after having considered treasury cash balance).

  • Spain, Sweden and Switzerland publish monthly borrowing requirements in line with our definition (financing needs after having considered treasury cash balance). Spain’s figures are for the general state administration, while Sweden and Switzerland’s are for the central government.

  • Taiwan does not publish borrowing requirements, instead we use ‘financing net borrowing’ as a proxy, which they report annually for the central government.

  • Thailand publish monthly figures for central government ‘Net lending / Net borrowing’ which we take as a proxy for borrowing requirements. The figures are calculated as “revenues - expenditures - transactions in non financial assets”.

  • Turkey publishes monthly ‘net borrowing’ numbers for the central government which are in line with our definition of borrowing requirements (financing needs after having considered treasury cash balance).

  • The UK present ‘central government net cash requirements (CGNCR)’ on a monthly basis, defined as the cash needed immediately for the UK government to meet its obligations. This is fully in line with our definition of borrowing requirements. See here for further details.

  • The US doesn’t publish borrowing requirements in line with our definition, so we take the monthly figures they provide for ‘borrowing from the public’ for the federal government. See here for further details.

  • Colombia, Japan, Norway, Romania and South Korea do not publish borrowing requirements.

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