The applet requires Java 1.4.1 or higher. It will not run on Windows 95 or Mac OS 8 or 9. Mac users must have OS X 10.2.6 or higher and use a browser that supports Java 1.4. (Safari works, IE does not. Mac OS X comes with Safari. Open Safari and set it as your default web browser under Safari/Preferences/General.) On other operating systems, you may obtain the latest Java plugin from Sun's Java site.
powered by NetLogo
view/download model file: deposit_multiplier_and_tax_havens.nlogo
The model represents the function of multiplication of deposits held by banks and the effects on movements of capital around the world due to the presence of tax havens. The simulation does not consider real countries: the variables used are merely indicative of the choices made by the parties regarding the allocation of financial resources and taking into account the level of taxation at the country where they reside. The NetLogo world is divided into four areas, which have been assigned a tax rate, in which agents move, create business relationships with each other and maintain contact with the banks. It is therefore possible to set the areas of taxation with the dual aim of investigating the process of money creation and the attraction of capital on the basis of special tax advantages.There are three possible business cycle: Recession, Neutrality and Expansion, where agents can receive loans for investment with a probability of 5%, 20% and 35% .
The model presents multiple switches to create different scenarios:
- LOAN LIQUIDITY CRISIS allows agents to receive loans from banks to solve liquidity crisis;
- CHOOSE ECONOMIC CYCLE FOR INVESTMENT LOAN allows agents to receive the loan to be allocated to investments with a probability that depends on economic cycles selected from the chooser named Economic cycle;
- NO LOAN CHANGE COUNTRY? allows agents to change their area and the reference bank, if they had not received the loan for investment.
Using the three possibilities, choosing the money supply function of banks, the amount of loan by the Central Bank and the possible presence of tax haven, you can get different effects directly analyzed by the monitor and graphics.
Agents pay the cost of their transfers in the NetLogo world and the taxes. When the level of bank deposit of each agent is able to generate a situation of liquidity crisis, agents borrow a loan from their reference bank. Also the banks can borrow a loan in the interbank market of loans or, at least, from the Central Bank.
The sliders in the interface allow the user to choose the data to be included in the simulation: the initial deposit for each bank, the maximum value of the loan granted by the Central Bank, the function of money supply for banks, the number of economic agents, the tax rate and the initial settings of the areas. Pressing the Setup button the world is created with the desired characteristics. The Go and Go once buttons determine the start of the simulation. The switchs Loan liquidity crisis, Choose economic cycle for investment loan, No loan change country? can be enabled / disabled during the simulation and it is possible to use monitors and graphs to analyze the outcomes of the scenarios created: the monitors describe the number of customers divided by area, the amount of cash held by banks, total deposits of their clients, the amount of reserves, the money created by each bank and the all financial system. There are also two plots with different curves about the trend of deposits and number of customers of each bank, a third graph describes the creation of money by the financial system over time.
The end user can choose the data to be used in the simulation with some sliders: the initial deposit for each bank (varying from 100 to 1000), the max amount of loan granted by the Central Bank (varying from 100 to 1000), the money supply of banks (80-100%), the number of economic agents (from 2 to 100), the tax rates of areas (varying from 0 and 3% for the tax haven and between 3% and 10% for the others), settings regarding to the possibility of receive a loan for consumption, loans for investment considering the type of economic cycle and the final chance of change country if the loans for investment is not given by banks. With sliders and switchs can be created many experiments and it is possible to analyze the effects that variables have on the amount of created money in the system and on the movement of capitals in the four areas. In fact the settings of the amount of Central bank, Loan liquidity crisis, Choose economic cycle for investment loan e No loan change country can be modified during the running of the program allowing to create situations of crisis/excess of liquidity in the system, amount of loan for investment, movement of capitals and creation of money of different level.
The model represents a simplified view of reality. More variables can be introduced to describe in detail the choice of agents in the allocation of money in tax havens, taking into account the level of economic welfare, the own economic activity, the accessibility to information and so on. It can also be introduced production activities in relation to investment during the different phases of the business cycle and identify new rating criteria of the banks for lending, both to solve liquidity crisis, and for the financing of investments.
CREDITS AND REFERENCES
www.giuriweb.unich.it
http://it.wikipedia.org/wiki/Riserva_frazionaria
Macroeconomia, Olivier Blanchard
Lo spazio geografico dell’economia finanziaria, Maria Giuseppina Lucia
;#####################KEYWORDS#############################################
globals [ transfer_cost ;price paid by agents to transfer
time ;simulation time
total_bank_cash_tax_haven ;total amount of money in the tax haven
total_bank_cash_countryA ;total amount of money in the country A
total_bank_cash_countryB ;total amount of money in the country B
total_bank_cash_countryC ;total amount of money in the country C
total_deposits_tax_haven ;total agents' deposits in the tax haven
total_deposits_countryA ;total agents' deposits in the country A
total_deposits_countryB ;total agents' deposits in the country B
total_deposits_countryC ;total agents' deposits in the country C
number_customers_tax_haven
number_customers_bank_countryA
number_customers_bank_countryB
number_customers_bank_countryC
total_money_created_by_financial_system ] ;total money created by all banks
breed [ banks bank ] ;turtles are divided into two types of subjects: banks and agents
breed [ agents agent ]
patches-own [ unitary_transfer_cost ;unitary price paid by agents to transfer
tax_rate_here ;tax_rate applied in the country
bank_here ] ;reference bank
turtles-own [ ]
banks-own [ money_created ;it's the money created by each bank
bank_cash ;cash is the real money owned by each bank
reserve ] ;it's the reserve bank
agents-own [ deposit ;it's the total amount of money owned by each agent
my_bank ;it's the reference bank for each agent
my_new_bank ;it's the new reference bank for each agent during transfer
my_tax ;it's the tax rate paid by each agent and it's a percentage of the deposit
buyer ] ;if the vaariable = 0 the agent is a buyer, if the variable = 1 the agent is a seller
;##############################SETUP#####################################
to setup
ca
setup-turtles
setup-patches
end
to setup-turtles
create-banks 4 ;There are four banks with different features about location and color
ask banks [ set shape "house" ;they have the same size and cash at time 0
ask bank 0 [ setxy 23.5 23.5 set color 15 ]
ask bank 1 [ setxy 23.5 7.5 set color 45 ]
ask bank 2 [ setxy 7.5 7.5 set color 35 ]
ask bank 3 [ setxy 7.5 23.5 set color 95 ]
set size 3
set bank_cash initial_deposit_for_each_bank * ( banks_loans/deposits / 100 )
set reserve ( 1 - banks_loans/deposits / 100 ) * initial_deposit_for_each_bank
set money_created ( banks_loans/deposits / 100 ) * initial_deposit_for_each_bank ]
create-agents number_of_economic_agents ;Agents have the same features about shape,size, location,color and deposit
ask agents [ set shape "person" ;at time 0
set size 1.5
setxy random-xcor random-ycor
set color 15
set deposit 0
if pxcor > 15 and pxcor <= 31 and pycor > 15 and pycor <= 31 ;Agents's tax rate depends on the country they are born
[ set my_tax tax_rate_tax_haven
set my_bank bank 0 ]
if pxcor > 15 and pxcor <= 31 and pycor >= 0 and pycor <= 15
[ set my_tax tax_rate_countryA
set my_bank bank 1 ]
if pxcor >= 0 and pxcor <= 15 and pycor >= 0 and pycor <= 15
[ set my_tax tax_rate_countryB
set my_bank bank 2 ]
if pxcor >= 0 and pxcor <= 15 and pycor > 15 and pycor <= 31
[ set my_tax tax_rate_countryC
set my_bank bank 3 ]]
end
to setup-patches
ask patches [ if pxcor > 15 and pxcor <= 31 and pycor > 15 and pycor <= 31 ;All patches contain information relating to tax rate, reference bank
[ set pcolor 19 ;and unitary transfer cost
set tax_rate_here tax_rate_tax_haven
set bank_here bank 0
set unitary_transfer_cost 2 ]
if pxcor > 15 and pxcor <= 31 and pycor >= 0 and pycor <= 15
[ set pcolor 29
set tax_rate_here tax_rate_countryA
set bank_here bank 1
set unitary_transfer_cost 2 ]
if pxcor >= 0 and pxcor <= 15 and pycor >= 0 and pycor <= 15
[ set pcolor 28
set tax_rate_here tax_rate_countryB
set bank_here bank 2
set unitary_transfer_cost 2 ]
if pxcor >= 0 and pxcor <= 15 and pycor > 15 and pycor <= 31
[ set pcolor 18
set tax_rate_here tax_rate_countryC
set bank_here bank 3
set unitary_transfer_cost 2 ]]
end
;################################GO###########################
to go
move_agents
choose_country/transfer_deposit
ask_loan
loan_to_investment
buy
tax
show_label
calculate
do-plot
tick
end
to move_agents
ask agents [ if [ tax_rate_here ] of patch-here <= 3
[ right random 360 forward ( random 5 ) + 1
set transfer_cost ( distancexy pxcor pycor * unitary_transfer_cost ) ]
if [ tax_rate_here ] of patch-here > 3 and [ tax_rate_here ] of patch-here <= 7
[ right random 360 forward ( random 5 ) + 2
set transfer_cost ( distancexy pxcor pycor * unitary_transfer_cost ) ]
if [ tax_rate_here ] of patch-here > 7
[ right random 360 forward ( random 5 ) + 4
set transfer_cost ( distancexy pxcor pycor * unitary_transfer_cost ) ]
if time > 0 [ set deposit deposit - transfer_cost ]
ask my_bank [ ifelse bank_cash > transfer_cost
[ set bank_cash bank_cash - transfer_cost ][ ask_loan_bank ]]]
end
to choose_country/transfer_deposit
ask agents [ let my_client_deposit [ deposit ] of agent who
if [ tax_rate_here ] of patch-here < my_tax
[ set my_new_bank bank_here
set my_tax tax_rate_here
while [ my_bank != my_new_bank ][ ask my_bank [ ifelse bank_cash >= ( my_client_deposit * banks_Loans/Deposits / 100 )
[ set bank_cash bank_cash - ( my_client_deposit * banks_Loans/Deposits / 100 )
ifelse reserve >= ( my_client_deposit * ( 1 - banks_Loans/Deposits / 100 ))
[ set reserve reserve - ( my_client_deposit * ( 1 - banks_Loans/Deposits / 100 )) ]
[ set bank_cash bank_cash - ( my_client_deposit * ( 1 - banks_Loans/Deposits / 100 )) ]]
[ask_loan_bank]]
ask my_new_bank [ set money_created money_created + ( my_client_deposit * banks_Loans/Deposits / 100 )
set bank_cash bank_cash + ( my_client_deposit * banks_Loans/Deposits / 100 )
set reserve reserve + ( my_client_deposit * ( 1 - banks_Loans/Deposits / 100 ))]
set my_bank my_new_bank ]]]
end
to ask_loan
ask agents [ if deposit <= 0 and time = 0
[ let loan ( [ bank_cash ] of my_bank / count agents with [ my_bank = [ my_bank ] of myself ])
set deposit deposit + loan ]]
ask agents [ if loan_liquidity_crisis [ if deposit <= 0 or deposit < transfer_cost and time > 0
[ let loan [ bank_cash ] of my_bank
set deposit deposit + loan
ask my_bank [ if bank_cash <= 0 [ ask_loan_bank ] ]]]]
end
to ask_loan_bank
ask banks [ let credit_institution bank who if ( count agents with [ my_bank = [ bank who ] of credit_institution ] > 0 )
[ let lender one-of banks
ifelse ( count agents with [ my_bank = [ bank who ] of lender ] = 0 )
[ set bank_cash bank_cash + [ bank_cash + reserve ] of lender
ask lender [ set bank_cash bank_cash - bank_cash
set reserve reserve - reserve ]]
[ set bank_cash bank_cash + max_loan_from_central_bank ]]
if [ reserve ] of bank who > 0
[ set bank_cash bank_cash + ( reserve - ( sum [ deposit ] of agents with [ my_bank = [ bank who ] of credit_institution ]) * ( 1 - banks_Loans/Deposits / 100 ))
set reserve reserve - ( reserve - ( sum [ deposit ] of agents with [ my_bank = [ bank who ] of credit_institution ]) * ( 1 - banks_Loans/Deposits / 100 )) ]]
end
to loan_to_investment
ask agents [ if choose_economic_cycle_for_investment_loan [ if ( remainder time 5 ) = 0
[ if economic_cycle = "Recession" [ if random ( 100 ) < 5 [ let loan [ bank_cash ] of my_bank
set deposit deposit + loan ]]
if economic_cycle = "Neutrality" [ if random (100) < 20 [ let loan [ bank_cash ] of my_bank
set deposit deposit + loan ]]
if economic_cycle = "Expansion" [ if random ( 100 ) < 35 [ let loan [ bank_cash ] of my_bank
set deposit deposit + loan ]]
if no_loan_change_country? [ set my_new_bank one-of banks
set my_tax [ tax_rate_here ] of [ patch-here ] of my_new_bank
let my_client_deposit [ deposit ] of agent who
while [ my_bank != my_new_bank ][ ask my_bank [ ifelse bank_cash >= ( my_client_deposit * banks_Loans/Deposits / 100 )
[ set bank_cash bank_cash - ( my_client_deposit * banks_Loans/Deposits / 100 )
ifelse reserve >= ( my_client_deposit * ( 1 - banks_Loans/Deposits / 100 ))
[ set reserve reserve - ( my_client_deposit * ( 1 - banks_Loans/Deposits / 100 )) ]
[ set bank_cash bank_cash - ( my_client_deposit * ( 1 - banks_Loans/Deposits / 100 )) ]]
[ ask_loan_bank ]]
ask my_new_bank [ set money_created money_created + ( my_client_deposit * banks_Loans/Deposits / 100 )
set bank_cash bank_cash + ( my_client_deposit * banks_Loans/Deposits / 100 )
set reserve reserve + ( my_client_deposit * ( 1 - banks_Loans/Deposits / 100 )) ]
set my_bank my_new_bank ]]]]]
end
to buy
ask agents [ set buyer ( random 2 )
if buyer = 0
[ if count agents with [ buyer = 1 ] in-radius 3 != 0
[ let consumer agent who
let partner one-of agents with [ buyer = 1] in-radius 3
ask consumer [ set deposit deposit - 1
if my_bank != [ my_bank ] of partner
[ ask my_bank [ ifelse bank_cash >= ( 1 * banks_Loans/Deposits / 100 )
[ set bank_cash bank_cash - ( 1 * banks_Loans/Deposits / 100 )
ifelse reserve >= ( 1 * ( 1 - banks_Loans/Deposits / 100 ))
[ set reserve reserve - ( 1 * ( 1 - banks_Loans/Deposits / 100 )) ]
[ set bank_cash bank_cash - ( 1 * ( 1 - banks_Loans/Deposits / 100 )) ]]
[ask_loan_bank]]]
ask partner [ set deposit deposit + 1
if [ my_bank ] of partner != [ my_bank ] of consumer
[ ask my_bank [ set money_created money_created + ( 1 * banks_Loans/Deposits / 100 )
set bank_cash bank_cash + ( 1 * banks_Loans/Deposits / 100 )
set reserve reserve + ( 1 * ( 1 - banks_Loans/Deposits / 100 )) ]]]]]]]
end
to tax
set time time + 1
ask agents
[ if ( remainder time 5 ) = 0
[ let tax_on_deposit ( my_tax / 100 * [ deposit ] of agent who )
set deposit deposit - tax_on_deposit
if deposit <= 0 [ set tax_on_deposit 0 ]
ask my_bank [ ifelse bank_cash >= tax_on_deposit
[ set bank_cash bank_cash - tax_on_deposit ][ ask_loan_bank ]]]]
end
to show_label
ask agents
[ ifelse show_individual_agent_deposit [ set label precision ( deposit ) 2 ][ set label "" ]]
ask banks
[ ifelse show_bank_cash_for_each_bank [ set label precision ( bank_cash ) 2 ][ set label "" ]]
end
;#########################CALCULATE & PLOTS########################################
to calculate
set total_bank_cash_tax_haven [ bank_cash ] of bank 0
set total_bank_cash_countryA [ bank_cash ] of bank 1
set total_bank_cash_countryB [ bank_cash ] of bank 2
set total_bank_cash_countryC [ bank_cash ] of bank 3
set total_deposits_tax_haven sum [ deposit ] of agents with [ my_bank = bank 0 ]
set total_deposits_countryA sum [ deposit ] of agents with [ my_bank = bank 1 ]
set total_deposits_countryB sum [ deposit ] of agents with [ my_bank = bank 2 ]
set total_deposits_countryC sum [ deposit ] of agents with [ my_bank = bank 3 ]
set number_customers_tax_haven count agents with [ my_bank = bank 0 ]
set number_customers_bank_countryA count agents with [ my_bank = bank 1 ]
set number_customers_bank_countryB count agents with [ my_bank = bank 2 ]
set number_customers_bank_countryC count agents with [ my_bank = bank 3 ]
set total_money_created_by_financial_system sum [ money_created ] of banks
end
to do-plot
set-current-plot "Total deposits of agents"
set-current-plot-pen "Total deposits Tax haven"
plot total_deposits_tax_haven
set-current-plot-pen "Total deposits country A"
plot total_deposits_countryA
set-current-plot-pen "Total deposits country B"
plot total_deposits_countryB
set-current-plot-pen "Total deposits country C"
plot total_deposits_countryC
set-current-plot "Total number customers of banks"
set-current-plot-pen "Number customers Tax haven"
plot number_customers_tax_haven
set-current-plot-pen "Number customers country A"
plot number_customers_bank_countryA
set-current-plot-pen "Number customers country B"
plot number_customers_bank_countryB
set-current-plot-pen "Number customers country C"
plot number_customers_bank_countryC
set-current-plot "Total money created by financial system"
set-current-plot-pen "Total_money_created_by_financial_system"
plot total_money_created_by_financial_system
end