Currency compositions of international reserves – recent developments

The Bank of Finland just released a policy brief introducing a new database on the composition of international reserves:

https://publications.bof.fi/handle/10024/53793

The authors are Falk Laser, Alexander Mihailov, and Jan Weidner. I build on my previous blogs to make some heatplots for the major currencies:

https://www.jamelsaadaoui.com/tag/heatplot/

Let us start with the share of International Reserves in Chinese Yuan. Russia has increased its share of international reserves in CNY for geopolitical reasons. In Australia, New Zealand, Mongolia, Nepal, Mozambique, and South Africa, it is probably the mere result of trade forces.

Overall, the shares of international reserve in USD are pretty stable.

Some countries at the euro area periphery, like Bulgaria, Bosnia and Herzegovina, North Macedonia, and, Romania hold a large share of reserves in euro. The lack of financial depth may explain why they hold so much reserves, especially after the euro crisis, see this paper.

Full code for pedagogical purposes:



import excel "Data.xls", sheet("DATA") firstrow clear

encode country, gen(cn)

summ year
  local x1 = `r(min)'
  local x2 = `r(max)'
heatplot USD i.cn year if USD>0 , ///
 yscale(noline) ///
 ylabel(, nogrid labsize(*0.4)) ///
 xlabel(`x1'(5)`x2', labsize(*0.5) angle(vertical) ///
         nogrid) ///
 color(viridis, reverse) ///   
 cuts(0(10)100) ///
  ramp(right  space(14) label(0(10)100) format(%4.0f)) ///
  p(lcolor(black%10) lwidth(*0.1)) ///
  ytitle("") ///
  xtitle("", size(vsmall)) ///
  xdiscrete name(usd, replace) ///
 title("International Reserves in USD") ///
  note("Data source: Laser-Mihailov-Weidner-2024.", ///
  size(vsmall))
 
graph export usd.png, as(png) width(4000) replace

summ year
  local x1 = `r(min)'
  local x2 = `r(max)'
heatplot EUR i.cn year if EUR>0 , ///
 yscale(noline) ///
 ylabel(, nogrid labsize(*0.4)) ///
 xlabel(`x1'(5)`x2', labsize(*0.5) angle(vertical) ///
         nogrid) ///
 color(viridis, reverse) ///   
 cuts(0(10)100) ///
  ramp(right  space(14) label(0(10)100) format(%4.0f)) ///
  p(lcolor(black%10) lwidth(*0.1)) ///
  ytitle("") ///
  xtitle("", size(vsmall)) ///
  xdiscrete name(eur, replace) ///
 title("International Reserves in EUR") ///
  note("Data source: Laser-Mihailov-Weidner-2024.", ///
  size(vsmall))
  
graph export eur.png, as(png) width(4000) replace
  
xtset cn year
by cn: egen mean_EUR = mean(EUR)

summ year
  local x1 = `r(min)'
  local x2 = `r(max)'
heatplot EUR i.cn year if mean_EUR>50 , ///
 yscale(noline) ///
 ylabel(, nogrid labsize(*0.75)) ///
 xlabel(`x1'(5)`x2', labsize(*0.5) angle(vertical) ///
         nogrid) ///
 color(plasma) ///   
 cuts(0(10)100) ///
  ramp(right  space(14) label(0(10)100) format(%4.0f)) ///
  p(lcolor(black%10) lwidth(*0.1)) ///
  ytitle("") ///
  xtitle("", size(vsmall)) ///
  xdiscrete name(eur, replace) ///
 title("International Reserves in EUR for large holders") ///
  note("Data source: Laser-Mihailov-Weidner-2024.", ///
  size(vsmall))
  
graph export eurlarge.png, as(png) width(4000) replace

summ year
  local x1 = `r(min)'
  local x2 = `r(max)'
heatplot JPY i.cn year if JPY>0 , ///
 yscale(noline) ///
 ylabel(, nogrid labsize(*0.5)) ///
 xlabel(`x1'(5)`x2', labsize(*0.5) angle(vertical) ///
         nogrid) ///
 color(viridis, reverse) ///  
 cuts(0(5)60) ///
  ramp(right  space(14) label(0(5)60) format(%4.0f)) ///
  p(lcolor(black%10) lwidth(*0.1)) ///
  ytitle("") ///
  xtitle("", size(vsmall)) ///
  xdiscrete name(jpy, replace) ///
 title("International Reserves in JPY") ///
  note("Data source: Laser-Mihailov-Weidner-2024.", ///
  size(vsmall))
  
graph export jpy.png, as(png) width(4000) replace

summ year
  local x1 = `r(min)'
  local x2 = `r(max)'
heatplot CNY i.cn year if CNY>0 , ///
 yscale(noline) ///
 ylabel(, nogrid labsize(*0.5)) ///
 xlabel(`x1'(5)`x2', labsize(*0.5) angle(vertical) ///
         nogrid) ///
 color(viridis, reverse) ///  
 cuts(0(5)30) ///
  ramp(right  space(14) label(0(5)30) format(%4.0f)) ///
  p(lcolor(black%10) lwidth(*0.1)) ///
  ytitle("") ///
  xtitle("", size(vsmall)) ///
  xdiscrete name(cny, replace) ///
 title("International Reserves in CNY") ///
  note("Data source: Laser-Mihailov-Weidner-2024.", ///
  size(vsmall))
  
graph export cny.png, as(png) width(4000) replace

Leave a Reply

This site uses Akismet to reduce spam. Learn how your comment data is processed.