Small Open Economy & the Exchange Rate

The small open economy

With perfect capital mobility, a small country takes the world interest rate as given: \(r = r^*\).

  • Net exports = net capital outflow: \(NX = S - I = NFI\). Saving not invested at home flows abroad.
  • \(r^*\) fixes investment \(I(r^*)\), so it fixes \(S - I\) — and therefore the trade balance.
  • The real exchange rate \(\varepsilon\) then adjusts so net exports hit that number: \(NX(\varepsilon) = S - I\).
  • FX view: supply of domestic currency \(= S-I\) (vertical); demand \(= NX(\varepsilon)\) (downward).

Shocks

  • Deficit (G↑ / T↓): saving falls → \(S-I\) falls → \(\varepsilon\) appreciates, NX toward deficit.
  • Investment demand↑ or \(r^*\)↓: \(I\) rises → \(S-I\) falls → \(\varepsilon\) appreciates.
  • Tariff: doesn’t touch \(S\) or \(I\) → \(S-I\) fixed → shifts \(NX(\varepsilon)\), so \(\varepsilon\) appreciates but NX is unchanged.

Try it. Left panel: \(r^*\) fixes investment, the gap to saving is net capital outflow. Right panel: the exchange rate slides so net exports equal that gap. A tariff moves \(\varepsilon\) but not NX.

#| standalone: true
#| viewerHeight: 560

library(shiny)
ui <- fluidPage(
  tags$head(tags$style(HTML("body{font-family:'Inter',system-ui,sans-serif;}
    .sb{background:#f0f4f8;border-radius:6px;padding:12px 14px;margin-top:10px;font-size:14px;line-height:1.8;} .sb b{color:#1f3b73;}"))),
  sidebarLayout(
    sidebarPanel(width=4,
      sliderInput("G","Government purchases  G:",min=800,max=2500,value=1500,step=50),
      sliderInput("T","Taxes  T:",min=800,max=2500,value=1500,step=50),
      sliderInput("dI0","Investment-demand shift:",min=-400,max=400,value=0,step=50),
      sliderInput("rstar","World rate  r* (%):",min=1,max=10,value=5,step=1),
      sliderInput("tar","Import tariff (shifts NX):",min=0,max=600,value=0,step=50),
      uiOutput("sb")),
    mainPanel(width=8, plotOutput("plot",height="470px"))))
server <- function(input,output,session){
  Y<-6000; C0<-600; mpc<-0.6; b<-100; I0<-1600; A<-1500; m<-250
  calc <- reactive({
    S <- Y - (C0+mpc*(Y-input$T)) - input$G
    I <- I0 + input$dI0 - b*input$rstar
    NFI <- S - I
    eps <- (A + input$tar - NFI)/m
    list(S=S,I=I,NFI=NFI,eps=eps)
  })
  output$plot <- renderPlot({
    v<-calc(); par(mfrow=c(1,2),mar=c(4.2,4.3,2.2,1))
    # panel 1: loanable funds
    rg<-seq(0,12,length.out=150); Ir<-I0+input$dI0-b*rg
    plot(NA,xlim=c(0,2500),ylim=c(0,12),xlab="S, I",ylab="r (%)",las=1,bty="l",main="Loanable funds")
    abline(v=v$S,col="#1f3b73",lwd=3)                 # vertical saving
    lines(Ir,rg,col="#b5462a",lwd=3)                  # investment
    abline(h=input$rstar,col="#1c6b4a",lwd=2,lty=2)   # world rate
    points(v$I,input$rstar,pch=19,col="#1c6b4a",cex=1.6)
    text(2300,input$rstar+0.6,"r*",col="#1c6b4a")
    # panel 2: exchange rate
    eg<-seq(0,12,length.out=150); NXe<-A+input$tar-m*eg
    plot(NA,xlim=c(-600,2000),ylim=c(0,12),xlab="Net exports  NX",ylab=expression(epsilon),las=1,bty="l",main="Real exchange rate")
    abline(v=v$NFI,col="#1f3b73",lwd=3)               # S - I (vertical)
    lines(NXe,eg,col="#b5462a",lwd=3)                 # NX(eps)
    points(v$NFI,v$eps,pch=19,col="#1c6b4a",cex=1.6)
    segments(-600,v$eps,v$NFI,v$eps,lty=3,col="#5a6472")
    abline(v=0,col="#9aa4b2",lty=3)
  })
  output$sb <- renderUI({ v<-calc()
    HTML(sprintf("<div class='sb'>National saving S = <b>%.0f</b><br>Investment I = <b>%.0f</b><br>Net capital outflow S-I = NX = <b>%.0f</b><br>Real exchange rate <b>eps = %.2f</b></div>",
      v$S,v$I,v$NFI,v$eps)) })
}
shinyApp(ui,server)

What to notice

  • Deficit (G above T): saving line slides left, NFI falls, \(\varepsilon\) rises (appreciates).
  • Lower \(r^*\): investment rises, NFI falls, currency appreciates, NX falls.
  • Tariff: only the right panel’s NX curve shifts — \(\varepsilon\) rises but the trade balance (NFI) is unchanged. Protectionism can’t fix a trade deficit.