Simple Monetary Circuit Model

Simple Monetary Circuit Model preview image

1 collaborator

Default-person Per Hung Yap (Author)

Tags

(This model has yet to be categorized with any tags)
Visible to everyone | Changeable by everyone
Model was written in NetLogo 6.3.0 • Viewed 237 times • Downloaded 20 times • Run 0 times
Download the 'Simple Monetary Circuit Model' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


WHAT IS IT?

This simulation represents a monetary economy based on the monetary circuit framework. While it simplifies the involvement of key players like central banks, governments, and distinguishes less between households and firms, the model effectively illustrates how money circulates within an economy. It focuses on the interactions between economic agents, combining households and firms into one entity, to observe the impact of credit creation on money supply, investments, savings, and bank balance sheets.

HOW IT WORKS

  1. Money is assumed to be created during credit creation, influenced by a simplified bank lending rule based on deposits to total assets (reserves + loans). Loans are provided to households.

  2. Households receive loans to produce investment goods, spending them through transactions with other households. The model treats consumption and capital goods spending similarly, recognizing that the distinction depends on the mindset of capitalists.

  3. Households, upon receiving income, check if it covers their minimum spending rule (assuming households can be immortal). If it does, they save some income as deposits in banks and withdraw the rest in hard currency (bank reserves). The savings rate is determined by the marginal propensity to consume. If income doesn't cover the minimum spending, the savings rate is set to 0, and savings are withdrawn from the bank to cover the deficit.

HOW TO USE IT

liability-to-deposit-ratio influences the amount of loans and deposits created by banks.

CreateLoans? determines whether banks lend according to the bank lending rule.

endowment determines the starting deposits household has.

ConsumptionPropensity determines how much is used for savings given a unit of new income.

MinimumSpending determines how much households need to spend in a single tick.

THINGS TO NOTICE

In a closed economy, investments equal savings in economics. Observe household savings and loan creation levels to understand their interaction within the monetary circuit framework. If MinimumSpending is 0, loans created eventually equal new deposits after all savings are done.

Note: if minimum spending is above 0, savings actually is smaller than investment, but this is due to how the code works as the residual is made up for in currency held by households. In theory, investment should still equal savings, but the sequence of the model doesn't really allow for that - yet.

THINGS TO TRY

Try turning on CreateLoans in the middle of the model running (let MinimumSpending > 0). This simulates a lending boom of sorts and GDP shoots up and eventually comes down.

EXTENDING THE MODEL

I'll extend the model by adding in new agentsets - governments, central banks and firms.

Furthermore, new features such as interest and principal payment on loans would be the next obvious step. It's exclusion is due to the fact that outstandingloans rarely every go down in any significant strech of time for most economies (through paying the loans off).

Also, the agents in this model faces no restriction in output production and places a fixed price for its work (1 unit of money = 1 unit of output). This is clearly unrealistic and ignores supply constraints and inflationary effects. Future model can improve on this.

Comments and Questions

Please start the discussion about this model! (You'll first need to log in.)

Click to Run Model

breed [households household]
breed [banks bank]

banks-own [assets liabilities LoansCreated networth deposits reserves Total-Loans-Outstanding deposit-to-asset loans-to-reserve]
households-own [MPC ExpenditureLag Gestation origin
  deposits ;; by this we meant ready deposits
  RM ;; currency
  FixedDeposits ;; real savings kind of situation
  ExpenditurePlans ;; schedule for expenditure, list of list have 3 things (amount to be spent, how much to spend this time, and how many tick left to be spent)
  orders]
globals [
  transactions
  output
  New-Output
  New-Transactions
]

to setup
  clear-all
  create-households No.Households
  ask households [
    set color white
    set shape "person"
    setxy random-xcor random-ycor
    set MPC ConsumptionPropensity  ;; How much to spend given income
    set ExpenditureLag LagDenom   ;;A denominator on how to chop up planned expenditure
    set Gestation lagOutput   ;;Time taken for output to be produced
    set origin 0
    set deposits endowment     ; change this soon. Give endowment
    set RM 0
    set FixedDeposits 0
    set ExpenditurePlans []
    set orders []
  ]
  create-banks 1
  ask banks [
    set color green
    set shape "house"
    set reserves Initial-Reserves
    set assets reserves
    set deposits endowment * No.Households
    set liabilities deposits


    set deposit-to-asset (deposits + 0.001) / (assets + 0.001)
    set Total-Loans-Outstanding deposits
    set loans-to-reserve Total-Loans-Outstanding / reserves
  ]
  set transactions 0
  set output 0
  set New-Transactions 0
  set New-Output 0
  UpdateNetworth
  reset-ticks
end 

to step
  if CreateLoan?  [
  CreateTheLoan ;; banks create loans and same amount of deposit is created
  ]
  OrganiseSavings  ;; Decide how much of income to save in FD (determined by MPC), convert deposits to currency
  Expend  ;; spend money, get recievers to process orders
  ProcessOrder
  UpdateNetworth
  tick
end 

to CreateTheLoan
  ask banks [
    if reserves > 0 [
    if (liabilities + 0.01) / assets < liability-to-asset-ratio  [
      if reserves < 0 [ print "negative!"]
      set LoansCreated loan-creation
      set Total-Loans-Outstanding Total-Loans-Outstanding + LoansCreated
      set deposits deposits + loan-creation
      let random-household one-of households
      send-loan-to random-household LoansCreated]
    ]

  ]
end 

to send-loan-to [recipient transfer]
  ask recipient [
    set deposits deposits + transfer
    set color red
    set origin 1
  ]
end 

to OrganiseSavings
  ask households [
    ifelse origin = 0 [
      let SavingsRate 1 - ConsumptionPropensity
      let current-household who
      ifelse deposits * (1 - SavingsRate) > MinimumSpending [        ;; if your deposit (after savings) is already higher than minimum spending
        PlanExpendProcess current-household SavingsRate LagDenom
        ][         ;; if existing deposits alone can't cover it all
          set color yellow
          set SavingsRate 0
          ifelse FixedDeposits + deposits >= MinimumSpending [    ; if still have money in FD, just don't have enough existing deposits
              let ExistingDeposit deposits
              let shortfall (MinimumSpending - ExistingDeposit)
              AltPlanExpendProcess current-household shortfall LagDenom
              ] [   ; if don't even have enough savings
                  set color pink
                  set SavingsRate 0
                  ifelse FixedDeposits > 0 [     ; gather crumbs
                  let leftover FixedDeposits
                  AltPlanExpendProcess current-household leftover LagDenom
                    ] [
                        PlanExpendProcess current-household SavingsRate LagDenom
                    ]
                ]
        ]
      ]
    [
      let SavingsRate 0
      if deposits > 0 [
        let current-household who
        PlanExpendProcess current-household SavingsRate LagDenom

        set origin 0   ;; return back as normal spender
      ]
    ]
  ]
end 

to AltPlanExpendProcess [OwnHousehold FDWithdrawal OwnLagDenom]
  ask household OwnHousehold [

        set FixedDeposits FixedDeposits - FDwithdrawal  ;; Keep this in bank as permanent savings
        let SpendingAcc deposits + FDwithdrawal

        BankWithdrawal SpendingAcc  ;; Update bankside (reduce reserve and deposit)
        set deposits 0  ;; Update deposit depletion
        set RM RM + SpendingAcc   ;; Update currency accumulation
        let chunks OwnLagDenom
        let amount SpendingAcc ;; new amount planned to be spent
        let delay ownLagDenom
        PlanExpenditure OwnHousehold amount chunks delay
  ]
end 

to PlanExpendProcess [OwnHousehold OwnSavingsRate OwnLagDenom]
  ask household OwnHousehold [
        let savings deposits * OwnSavingsRate   ;; determine how much to save
        set FixedDeposits FixedDeposits + savings ;; Keep this in bank as permanent savings
        let SpendingAcc deposits - savings
        set savings 0
        let withdrawal SpendingAcc ;; Intend to withdraw this much from bank
        BankWithdrawal SpendingAcc  ;; Update bankside (reduce reserve and deposit)
        set deposits 0  ;; Update deposit depletion
        set RM RM + withdrawal   ;; Update currency accumulation
        let chunks OwnLagDenom
        let amount SpendingAcc ;; new amount planned to be spent
        let delay ownLagDenom
        PlanExpenditure OwnHousehold amount chunks delay
  ]
end 

to Expend
  ask households [
    let pending-chunks []
    foreach ExpenditurePlans [
      [x] ->
      set pending-chunks filter [y -> item 1 y <= ticks] ExpenditurePlans ;;go through EP to find list with tick <= current tick
    ]
    foreach pending-chunks[
      [z] ->
      let chunk-size item 0 z  ;;get the amount to be spent in this ExpenditurePlans list
      let target-household one-of other households
      if target-household != nobody [
        send-money chunk-size target-household   ;;send money to this household
        place-order chunk-size target-household  ;;place orders towards the targeted household
      ]
      UpdateTransactions chunk-size
      set RM RM - chunk-size  ;; once money is sent, deducted from own account
      banktransaction chunk-size ;; hard currency returns back to bank, and so does deposit
    ]
    foreach pending-chunks [
      [sub] ->
      set ExpenditurePlans remove sub ExpenditurePlans
    ]
  ]
end 

to ProcessOrder
  ask households [
    let pending-order []
    foreach orders [
      [x] ->
      set pending-order filter [y -> item 1 y <= ticks] orders
    ]
    foreach pending-order [
      [z] ->
      let EconActivity item 0 z
      UpdateGDP EconActivity

      ]
    foreach pending-order [
      [sub] ->
      set orders remove sub orders
    ]
  ]
end 

to UpdateGDP [amount]
  set output output + amount
  set New-Output amount
end 

to UpdateTransactions [amount]
  set transactions transactions + amount
  set New-Transactions amount
end 

to send-money [amount target]
  ask target [
    set deposits deposits + amount
    set color blue
  ]
end 

to banktransaction [amount]
  ask banks [
    set reserves reserves + amount
    set deposits deposits + amount
  ]
end 

to place-order [amount target]
  ask target [
    let current-tick ticks
    let scheduled-tick current-tick + Gestation
    let NewOrder (list amount scheduled-tick)
    set orders fput NewOrder orders
  ]
end 

to PlanExpenditure [current-household amount chunks delay]   ;;; determine your expenditure chunks
  let ExpendChunk amount / chunks   ;; calculate the size of chunks
  let current-tick ticks
  let ExpendDelay 1
  ask household current-household [
    repeat chunks [
      let scheduled-tick current-tick + ExpendDelay
      let new-chunk (list ExpendChunk scheduled-tick)
      set ExpenditurePlans fput new-chunk ExpenditurePlans
      if ExpendDelay != Delay [
        set ExpendDelay ExpendDelay + 1
      ]
      if ExpendDelay > Delay [
        print "error!"
      ]
    ]
  ]
end 

to FDPlacement [placement]   ;; Cement savings decision
  ask banks [
    set deposits deposits + placement
    set reserves reserves + placement
  ]
end 

to BankWithdrawal [withdrawal]  ;; Update bankside
  ask banks [
    set reserves reserves - withdrawal
    set deposits deposits - withdrawal
  ]
end 

to UpdateNetworth  ;;Update bank networth
  ask banks [
    set assets Total-Loans-Outstanding + reserves
    set liabilities deposits
    set networth assets - liabilities
    set deposit-to-asset liabilities / assets
    set loans-to-reserve Total-Loans-Outstanding / (reserves + 0.001)
  ]
end 

There is only one version of this model, created over 1 year ago by Per Hung Yap .

Attached files

File Type Description Last updated
Simple Monetary Circuit Model.png preview Preview for 'Simple Monetary Circuit Model' over 1 year ago, by Per Hung Yap Download

This model does not have any ancestors.

This model does not have any descendants.