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