% This file contains the commands for solving the benchmark model for the 
% paper "Sticky Housing and the Long Lags of Monetary Policy"

% NOTE: YOU MUST HAVE INSTALLED DYNARE SOFTWARE PACKAGE TO USE THIS PROGRAM

% Declare the endogenous variables
var L1C L2C L3C L4C L1H L2H L3H L4H M1 M2 M3 M4 C1 C2 C3 C4 LC LH H1 C WC WH P PH R M;

% Variable definitions
% LjC = labour supplied by household j to nondurables' sector
% LjH = labour supplied by household j to housing sector
% Mj = money demand of household j
% Cj = nondurable consumption of household j
% LC = aggregate labour supply to nondurables' sector
% LH = aggregate labour supply to housing sector
% H1 = housing consumption by households of type 1
% C = aggregate consumption of nondurables
% WC = wage in nondurables sector
% WH = wage in housing sector
% P = price of nondurable good
% PH = price of housing
% R = nominal gross interest rate
% AC = TFP in nondurables sector
% AH = TFP in durables sector
% M = nominal money supply

% Declare the exogenous variables
varexo epsM;

% Declare the parameters
parameters J gamma chi theta rhoM sigM LC_plus_LH beta omega1 omega2 alpha KC KH;

% Parameters values and steady state ratios
J = 4;
gamma = 1;
chi = 2;
theta = -3;
rhoM = 0.8;
sigM = 0.0066;
LC_plus_LH = 0.2;
beta = 0.99;
omega1=0.0189392672321557;
omega2=189.477425562005;
alpha=0.36;
KC=1;
KH=KC/2.27;

% Declare the model
model;
# b1 = (1-chi-theta)/theta;
(gamma*H1^theta+C1^theta)^b1*C1^(theta-1)*WC=omega2/(1-L1C-L1H);
(gamma*H1^theta+C1^theta)^b1*C1^(theta-1)*WH=omega2/(1-L1C-L1H);
(gamma*H1^theta+C1^theta)^b1*C1^(theta-1)=omega1*P/M1 + beta*(gamma*H1^theta+C2(+1)^theta)^b1*C2(+1)^(theta-1)*P/P(+1);
(gamma*H1^theta+C1^theta)^b1*C1^(theta-1)=beta*(gamma*H1^theta+C2(+1)^theta)^b1*C2(+1)^(theta-1)*R*P/P(+1);
(gamma*H1(-1)^theta+C2^theta)^b1*C2^(theta-1)*WC=omega2/(1-L2C-L2H);
(gamma*H1(-1)^theta+C2^theta)^b1*C2^(theta-1)*WH=omega2/(1-L2C-L2H);
(gamma*H1(-1)^theta+C2^theta)^b1*C2^(theta-1)=omega1*P/M2 + beta*(gamma*H1(-1)^theta+C3(+1)^theta)^b1*C3(+1)^(theta-1)*P/P(+1);
(gamma*H1(-1)^theta+C2^theta)^b1*C2^(theta-1)=beta*(gamma*H1(-1)^theta+C3(+1)^theta)^b1*C3(+1)^(theta-1)*R*P/P(+1);
(gamma*H1(-2)^theta+C3^theta)^b1*C3^(theta-1)*WC=omega2/(1-L3C-L3H);
(gamma*H1(-2)^theta+C3^theta)^b1*C3^(theta-1)*WH=omega2/(1-L3C-L3H);
(gamma*H1(-2)^theta+C3^theta)^b1*C3^(theta-1)=omega1*P/M3 + beta*(gamma*H1(-2)^theta+C4(+1)^theta)^b1*C4(+1)^(theta-1)*P/P(+1);
(gamma*H1(-2)^theta+C3^theta)^b1*C3^(theta-1)=beta*(gamma*H1(-2)^theta+C4(+1)^theta)^b1*C4(+1)^(theta-1)*R*P/P(+1);
(gamma*H1(-3)^theta+C4^theta)^b1*C4^(theta-1)*WC=omega2/(1-L4C-L4H);
(gamma*H1(-3)^theta+C4^theta)^b1*C4^(theta-1)*WH=omega2/(1-L4C-L4H);
(gamma*H1(-3)^theta+C4^theta)^b1*C4^(theta-1)=omega1*P/M4 + beta*(gamma*H1(+1)^theta+C1(+1)^theta)^b1*C1(+1)^(theta-1)*P/P(+1);
(gamma*H1(-3)^theta+C4^theta)^b1*C4^(theta-1)=beta*(gamma*H1(+1)^theta+C1(+1)^theta)^b1*C1(+1)^(theta-1)*R*P/P(+1);
WC=(1-alpha)*KC^alpha*LC^(-alpha);
WH=WC;
C=KC^alpha*LC^(1-alpha);
H1=KH^alpha*LH^(1-alpha);
(L1C+L2C+L3C+L4C)/J=LC;
(L1H+L2H+L3H+L4H)/J=LH;
(C1+C2+C3+C4)/J=C;
(M1+M2+M3+M4)/J=M;
M = M(-1)^rhoM*exp(epsM);
(gamma*H1^theta+C1^theta)^b1*C1^(theta-1)=(P/PH)*gamma*H1^(theta-1)*((gamma*H1^theta+C1^theta)^b1 + beta*(gamma*H1^theta+C2(+1)^theta)^b1 + beta^2*(gamma*H1^theta+C3(+2)^theta)^b1 + beta^3*(gamma*H1^theta+C4(+3)^theta)^b1) +beta^J*(gamma*H1(+4)^theta+C1(+4)^theta)^b1*C1(+4)^(theta-1)*PH(+4)*P/(PH*P(+4));
end;

initval;
M=1;
M1=1;
M2=1;
M3=1;
M4=1;
P=52.85893;
PH=139.7231;
LC=0.02647;
L1C=LC;
L2C=LC;
L3C=LC;
L4C=LC;
LH=0.2-LC;
L1H=LH;
L2H=LH;
L3H=LH;
L4H=LH;
C=0.097851;
C1=C;
C2=C;
C3=C;
C4=C;
H1=0.242678;
WC=(1-alpha)*KC^alpha*LC^(-alpha);
WH=WC;
epsM=0;
R=1/beta;
end;

% Declare the variances of the shock processes
shocks;
var epsM; stderr sigM;
end;

steady(solve_algo=2);

stoch_simul;