Skip to content

Commit

Permalink
Implement delayed Central Bank policy application
Browse files Browse the repository at this point in the history
  • Loading branch information
adrian-carro committed May 2, 2022
1 parent ce0bfaf commit afe1c37
Show file tree
Hide file tree
Showing 4 changed files with 22 additions and 7 deletions.
24 changes: 18 additions & 6 deletions src/main/java/housing/CentralBank.java
Original file line number Diff line number Diff line change
Expand Up @@ -47,13 +47,13 @@ void init() {
// Set initial monetary policy
baseRate = config.CENTRAL_BANK_INITIAL_BASE_RATE;
// Set initial LTV mandatory policy thresholds
firstTimeBuyerHardMaxLTV = config.CENTRAL_BANK_LTV_HARD_MAX_FTB;
homeMoverHardMaxLTV = config.CENTRAL_BANK_LTV_HARD_MAX_HM;
buyToLetHardMaxLTV = config.CENTRAL_BANK_LTV_HARD_MAX_BTL;
firstTimeBuyerHardMaxLTV = 0.9999; // TODO: Set these as non-binding initial parameters in config file
homeMoverHardMaxLTV = 0.9999; // TODO: Set these as non-binding initial parameters in config file
buyToLetHardMaxLTV = 0.9999; // TODO: Set these as non-binding initial parameters in config file
// Set initial LTI mandatory policy thresholds
firstTimeBuyerSoftMaxLTI = config.CENTRAL_BANK_LTI_SOFT_MAX_FTB;
firstTimeBuyerSoftMaxLTI = 15.0; // TODO: Set these as non-binding initial parameters in config file
firstTimeBuyerMaxFracOverSoftMaxLTI = config.CENTRAL_BANK_LTI_MAX_FRAC_OVER_SOFT_MAX_FTB;
homeMoverSoftMaxLTI = config.CENTRAL_BANK_LTI_SOFT_MAX_HM;
homeMoverSoftMaxLTI = 15.0; // TODO: Set these as non-binding initial parameters in config file
homeMoverMaxFracOverSoftMaxLTI = config.CENTRAL_BANK_LTI_MAX_FRAC_OVER_SOFT_MAX_HM;
monthsToCheckLTI = config.CENTRAL_BANK_LTI_MONTHS_TO_CHECK;
// Set initial affordability mandatory policy thresholds
Expand All @@ -66,8 +66,20 @@ void init() {
* This method implements the policy strategy of the Central Bank
*
* @param coreIndicators The current value of the core indicators
* @param time The current model time
*/
public void step(collectors.CoreIndicators coreIndicators) {
public void step(collectors.CoreIndicators coreIndicators, int time) {

if (time >= config.CENTRAL_BANK_POLICY_APPLICATION_TIME) {
// Update LTV mandatory policy thresholds
firstTimeBuyerHardMaxLTV = config.CENTRAL_BANK_LTV_HARD_MAX_FTB;
homeMoverHardMaxLTV = config.CENTRAL_BANK_LTV_HARD_MAX_HM;
buyToLetHardMaxLTV = config.CENTRAL_BANK_LTV_HARD_MAX_BTL;
// Update LTI mandatory policy thresholds
firstTimeBuyerSoftMaxLTI = config.CENTRAL_BANK_LTI_SOFT_MAX_FTB;
homeMoverSoftMaxLTI = config.CENTRAL_BANK_LTI_SOFT_MAX_HM;
}

/* Use this method to express the policy strategy of the central bank by setting the value of the various limits
in response to the current value of the core indicators.
Expand Down
1 change: 1 addition & 0 deletions src/main/java/housing/Config.java
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,7 @@ public class Config {

// Central Bank policy
double CENTRAL_BANK_INITIAL_BASE_RATE; // Central Bank initial base rate
int CENTRAL_BANK_POLICY_APPLICATION_TIME; // Time step from which any (potentially binding) Central Bank policy is applied
double CENTRAL_BANK_LTV_HARD_MAX_FTB; // Mandatory Central Bank policy: Hard maximum LTV ratio for first-time buyers
double CENTRAL_BANK_LTV_HARD_MAX_HM; // Mandatory Central Bank policy: Hard maximum LTV ratio for home movers
double CENTRAL_BANK_LTV_HARD_MAX_BTL; // Mandatory Central Bank policy: Hard maximum LTV ratio for BTL investors
Expand Down
2 changes: 1 addition & 1 deletion src/main/java/housing/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,7 @@ private static void modelStep() {
// Update bank and interest rate for new mortgages
bank.step(Model.households.size());
// Update central bank policies (currently empty!)
centralBank.step(coreIndicators);
centralBank.step(coreIndicators, t);
}

/**
Expand Down
2 changes: 2 additions & 0 deletions src/main/resources/config.properties
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,8 @@ recordSavingRate = false
# most of 2016 (since 16/03/2016 till present)
# Note this parameter does not affect the dynamics of the model, only how the mortgage spread is reported
CENTRAL_BANK_INITIAL_BASE_RATE = 0.0
# Time step from which any (potentially binding) Central Bank policy is applied (int)
CENTRAL_BANK_POLICY_APPLICATION_TIME = 500
# Default value (0.000102459) is empirically input calibrated to the Main Refinancing Operations (MRO) rate set by the
# ECB as an average over 2016 (0.0005 until 15/03/2016, that is, for 75 days, 0 from 16/03/2016, that is, for 291 days)
#CENTRAL_BANK_INITIAL_BASE_RATE = 0.000102459
Expand Down

0 comments on commit afe1c37

Please sign in to comment.