global modelnumber

var
a_j a_k a_me a_mh a_p a_z
acdb acdh acke ackh
acloeb acloee aclosb acloss
cb ce ch cs ctot
d
data_CC
data_II
data_LO
data_LOE
data_LOH
data_NN
data_QQ
data_TFP
data_YY
dke
dkh
he hh hs
itot
ke kh ktot
lambdab lambdae lambdas
loe los 
nh ns ntot
q
re rh rk rm rs rv
ucb uce uch ucs 
wh ws y zke zkh
pi ;          

varexo eps_j eps_k eps_me eps_mh eps_p eps_z eps_r;

parameters
ALPHA BETAB BETAE BETAH BETAS DELTA ECH 
FIDB FIDH FIKE FIKH FILOEB FILOEE FILOSB FILOSS GAMMAE GAMMAS JEI
MH MS MIU MK MN NU RHOD RHOE RHOS SIG_J SIG_K SIG_R
SIG_ME SIG_MH SIG_P SIG_Z SIGMA SIGMAB SIGMAE SIGMAH TAUH TAUS ZETAE ZETAH
ZRHO_AJ ZRHO_AK ZRHO_AME ZRHO_AMH ZRHO_AP ZRHO_AZ 
rR
rY
rpi ;  

ALPHA = 0.35;      //Total capital share in production
BETAB = 0.945;     //Bankers discount factor
BETAE = 0.94;     //Entrepreneurs discount factor
BETAH =  0.9925;  //Patient hh discount factor
BETAS = 0.94;    //Impatient hh discount factor
DELTA = 0.035;      //deprecitation rates deltake deltakh
%GAMMAE = 0.9;     //liabilities to assets ratio for Bankers
%GAMMAS = 0.9;     //liabilities to assets ratio for Bankers
GAMMAE = 0.5;    //%Not binding capital adequacy constraint?
GAMMAS = 0.5;
%JEI = 0.075;      //Housing preference share
JEI = 0.2; //iac2005
MH = 0.9;         //LTV on housing, E
MK = 0.9;         //LTV on capital, E
MS = 0.9;         //LTV on housing, H
MN = 1;           //Wage bill paid in advance
SIGMAB = 1; 
SIGMAE = 1; 
SIGMAH = 1; 
TAUH = 2;        //Labour supply parameter
TAUS = 2; 


SIG_J = 0.0348377631969606;           //st.dev., housing demand shock
SIG_K = 0.00726749042971863;           //investment shock
SIG_ME = 0.0180901014471815;          //LTV shock, E
SIG_MH = 0.0115559596659929;           //LTV shock, impatient hh
SIG_P = 0.0199390346980942;           //preference shock 
SIG_Z = 0.00701598674399746;          //technology shock

SIG_R = 0.013;                         //monetary policy shock 

ECH = 0.45550721335391;               //habit in consumption
FIDB = 0.134965498268201;            //D adj. cost, Banks
FIDH = 0.178577119853786;               //D adj. cost, patient hh
FIKE = 0.492786343143027;             //K adj. cost, E
FIKH = 1.79002530669715;              //K adj. cost, impatient hh
FILOEB = 0.0976660264503774;          //Loan to E adj. cost, B
FILOEE = 0.140767700365659;           //Loan to E adj. cost, E
FILOSB = 0.39701402874408;             //Loan to hh adj. cost, B
FILOSS = 0.341804130203978;           //Loan to hh adj. cost, hh

MIU = 0.480393235385172;              //capital share of E
NU = 0.0319371884502803;               //Housing share of E

RHOD = 0.233704970097865;              //inertia in capital adequacy constraint
RHOE = 0.630714695022202;              //inertia in E borrowing constraint
RHOS = 0.710795535781382;              //inertia in hh borrowing constraint

SIGMA = 0.327274221745279;             //wage share impatient hh
ZETAE = 0.380069681903693;             //curvature for utilization rate E
ZETAH = 0.374431387407989;             //curvature for utilization rate patient HH

ZRHO_AJ = 0.991154920014142;           //autocorr. housing demand shock
ZRHO_AK = 0.918228805520155;           //investment shock 
ZRHO_AME = 0.872348385798409;          //LTV shock, E
ZRHO_AMH = 0.84636409040358;           //LTV shcok, hh
ZRHO_AP = 0.995276908247411;           //preference shock
ZRHO_AZ = 0.990219844054634;           //technology shock
 
rR = 0.8;                              
rY = 0.5;
rpi = 1.5;
%rpi = 1.65;


model;

#   zzGAMMAE=GAMMAE;
#   zzGAMMAS=GAMMAS;
#	zzrh = 1/BETAH; 
#	zzrm = zzrh - (1-DELTA);
#	zzlambdab = (1-BETAB*zzrh)/(1-BETAB*RHOD);
#	zzre = (1/BETAB)*(1-((1-BETAB)*RHOD+(1-RHOD)*GAMMAE)*zzlambdab);
#	zzrs = (1/BETAB)*(1-((1-BETAB)*RHOD+(1-RHOD)*GAMMAS)*zzlambdab); 
#	zzlambdae = (1-BETAE*zzre)/(1-BETAE*RHOE) ;
#	zzlambdas = (1-BETAS*zzrs)/(1-BETAS*RHOS) ;
#	zzrk = 1/BETAE*(1-zzlambdae*(1-RHOE)*MK) - (1-DELTA) ;
#	zzrv = 1/BETAE*(1-zzlambdae*MH/zzre*(1-RHOE)) - 1  ;
#	oo1 = JEI/(1-BETAH) ;
#	oo2 = JEI/(1-BETAS-zzlambdas*(1-RHOS)*MS/zzrs);
#	oo3 = 1/(1+(1-1/zzrs)*MS*oo2);
#	oo4 = GAMMAE*(zzrh-1)*(MH*NU/(zzre*zzrv)+MK*ALPHA*MIU/(zzrk)-MN*(1-ALPHA-NU)/(1+MN*(1-RHOE)*zzlambdae)) ;
#	oo5 = GAMMAS*MS/zzrs*(oo2*(zzrh-1))*oo3 ;
#	oo7 = zzrm - DELTA ;
#	oo8 = (1-ALPHA-NU)*(1-SIGMA)/((1+MN*(1-RHOE)*zzlambdae)) ;
#	oo9 = (1-MIU)*ALPHA/(zzrm) ;
#	zzns = 1/(1+oo3*TAUS) ;
#	zzzeta1 = oo7*oo9/oo8 + 1 + oo4/oo8 + oo5*SIGMA/(1-SIGMA) ;
#	zznh = 1/(1+TAUH*zzzeta1) ;
#	zzctoys = oo3*(1-ALPHA-NU)/(1+MN*(1-RHOE)*zzlambdae)*SIGMA ;
#	zzctoyh = zzzeta1*oo8 ;
#	zziktoye = DELTA*ALPHA*MIU/(zzrk) ;
#	zziktoyh = DELTA*ALPHA*(1-MIU)/(zzrm) ;
#	zzdenh = oo1*zzctoyh + oo2*zzctoys + NU/(zzrv) ;
#	zzhh = oo1*zzctoyh / zzdenh ;
#	zzhs = oo2*zzctoys / zzdenh ;
#	zzhe = (NU/(zzrv)) / zzdenh ;
# zzy = (ALPHA*(1-MIU)/(zzrm))^(ALPHA*(1-MIU)/(1-ALPHA))*
 (ALPHA*MIU/(zzrk))^(ALPHA*MIU/(1-ALPHA))*
 zzhe^(NU/(1-ALPHA))*
 (zznh^(1-SIGMA)*zzns^SIGMA)^((1-ALPHA-NU)/(1-ALPHA)) ;
#	zzkh = ALPHA*(1-MIU)*zzy/(zzrm) ;
#	zzke = ALPHA*MIU*zzy/(zzrk) ;
#	zzq = NU*zzy/(zzrv)/zzhe ;
#	zzloe = MH*zzq/zzre*zzhe + MK*zzke - MN*(1-ALPHA-NU)/(1+MN*(1-RHOE)*zzlambdae)*zzy ;
#	zzwh = ((1-SIGMA)*(1-ALPHA-NU)/(1+MN*(1-RHOE)*zzlambdae))*zzy/zznh ;
#	zzws = (SIGMA*(1-ALPHA-NU)/(1+MN*(1-RHOE)*zzlambdae))*zzy/zzns;
#	zzlos = MS/zzrs*oo2*oo3*zzws*zzns ;
#	zzd = zzGAMMAE*zzloe + zzGAMMAS*zzlos ;
#	zzch = (zzrm-DELTA)*zzkh + (zzrh-1)*zzd + zzwh*zznh ;
#	zzcb = ((zzre-1)*zzloe + (zzrs-1)*zzlos - (zzrh-1)*zzd);
#	zzmu = zzcb^(-SIGMAB) ;
#	zzce = zzy - DELTA*zzke - (zzre-1)*zzloe - zzwh*zznh - zzws*zzns - zzrm*zzkh ;
#	zzcs = oo3*zzws*zzns ;
#	zzame = 0 ; 
#	zzamh = 0 ; 
#	zzab = 0 ;
#	zzas = 0 ;
#	zzak = 0 ;
#	zzcumloss = 0;
#	zzctot = zzch + zzcs + zzce + zzcb;
#	zzitot = DELTA*(zzkh+zzke) ;
#	zzkb = zzloe + zzlos - zzd;
#	zzspread_re_rh = 4*(zzre-zzrh);
#	zzspread_rs_rh = 4*(zzrs-zzrh);
#	zzktot = zzke+zzkh;
#	zzntot = zznh^(1-SIGMA)*zzns^SIGMA ;
#	zzytot = zzitot+zzctot;
#	Y_SS = (zzy);
#	ITOT_SS = (zzitot);
#	CTOT_SS = (zzctot);
#	Q_SS = (zzq);
#	LTOT_SS = zzloe+zzlos;
#	NTOT_SS = zzntot;
#	KE_SS = zzke;
#	KH_SS = zzkh;
#	RK_SS = zzrk;
#	D_SS = zzd;
#	LOE_SS = zzloe;
#	LOS_SS = zzlos;
#	zzloetoy=zzloe/4/zzy;
#	zzlostoy=zzlos/4/zzy;
#	zzlotoy=(zzloe+zzlos)/4/zzy;
#	zzcbtoy = zzcb/zzy ;
#	zzcetoy = zzce/zzy ;
#	zzchtoy = zzch/zzy ;
#	zzcstoy = zzcs/zzy ;
#	zzkab=1-(zzd/(zzloe+zzlos));
#	CE_SS = zzce;
#	RE_SS = zzre;
#	LE_SS = zzlambdae;
#	LB_SS = zzlambdab;
#	CB_SS = zzcb;
#     R_SS = zzrh;


% Household Savers 1-5

((ch) + kh/exp(a_k) + (q)*((hh)-(hh(-1))) + (d) - ((rh(-1))*(d(-1)))/(pi)
- (rm*zkh+(1-dkh)/exp(a_k))*kh(-1) - (wh)*(nh)  ) = 0 ;

(1+acdh)*(uch*exp(a_p)) - BETAH*(uch(+1)*exp(a_p(+1)))*(rh)/(pi(+1)) = 0 ;

(wh)*uch*exp(a_p) - TAUH/(1-(nh)) = 0 ;

(1/exp(a_k)+ackh)*(uch*exp(a_p)) = 
BETAH*(uch(+1)*exp(a_p(+1)))*((rm(+1)*zkh(+1)+(1-dkh(+1))/exp(a_k(+1)))) ;

(q)*uch*exp(a_p) =
JEI*exp(a_j)*exp(a_p)/hh + BETAH*(q(+1))*(uch(+1)*exp(a_p(+1))) ;


//% Household Borrowers 6-10

(cs) + ((rs(-1))*(los(-1)))/(pi) + (q)*((hs)-(hs(-1))) = (los) + (ws)*(ns) ;

(los) = RHOS*(los(-1)) + (1-RHOS)*MS*exp(a_mh)*((q(+1))*(hs)*(pi(+1))/(rs(+1))) ;

(1-acloss-(lambdas))*(ucs*exp(a_p)) =
BETAS*(rs-RHOS*(lambdas(+1)))*(ucs(+1)*exp(a_p(+1))) ;

(ws)*(ucs*exp(a_p)) - TAUS/(1-(ns)) = 0 ;

(q)*(ucs*exp(a_p))
= JEI*exp(a_j)*exp(a_p)/hs + BETAS*(q(+1))*(ucs(+1)*exp(a_p))
+ (lambdas)*(1-RHOS)*(ucs*exp(a_p))*MS*exp(a_mh)*(q(+1))*(pi(+1))/((rs(+1))) ;


//% BANK 11-15

(cb) + ((rh(-1))*(d(-1)))/(pi) + (loe) + (los)
- ((re)*(loe(-1)))/(pi)
- ((rs(-1))*(los(-1)))/(pi) - (d)  = 0 ;

(d)-RHOD*( d(-1)-(loe(-1))-(los(-1)) )
-(1-(1-RHOD)*(1-GAMMAE))*(loe)
-(1-(1-RHOD)*(1-GAMMAS))*(los) = 0;

 (1-acdb-(lambdab))*ucb -
BETAB*ucb(+1)*((rh)/(pi(+1))-RHOD*lambdab(+1))  = 0;

 (1+aclosb-(RHOD+(1-RHOD)*GAMMAS)*(lambdab))*ucb -
BETAB*ucb(+1)*((rs)/(pi(+1))-RHOD*lambdab(+1))  = 0;

(1+acloeb-(RHOD+(1-RHOD)*GAMMAE)*(lambdab))*ucb -
BETAB*ucb(+1)*((re(+1)/(pi(+1)))-RHOD*lambdab(+1))  = 0;



//% Entre 16-21

(ce) + (ke)/exp(a_k) + (q)*(he) 
+ ((re)*loe(-1))/(pi)  +
(wh)*(nh) + (ws)*(ns) + (rm)*zkh*kh(-1) =
(y) + (1-dke)*ke(-1)/exp(a_k) + (q)*(he(-1)) + (loe);

(y) = exp(a_z)*(zke*(ke(-1)))^(MIU*ALPHA)*(zkh*(kh(-1)))^((1-MIU)*ALPHA)*
(he(-1)^NU)*(ntot)^(1-ALPHA-NU) ;

(loe) = RHOE*(loe(-1))
+ (1-RHOE)*( MH*exp(a_me)*(q(+1))*(he)*(pi(+1))/(re(+1)) 
+ MK*exp(a_me)*(ke) - MN*((wh)*(nh) + (ws)*(ns)) ) ;

 (1-acloee-(lambdae))*uce =
 BETAE*((re(+1)/(pi(+1))-RHOE*lambdae(+1))*uce(+1)) ;


(1/exp(a_k)+acke-(lambdae)*(1-RHOE)*MK*exp(a_me))*uce
= BETAE*(rk(+1)*zke(+1)+(1-dke(+1))/exp(a_k(+1)))*uce(+1) ;

(q)*uce
= BETAE*(q(+1))*(1+rv(+1))*uce(+1)
+ (lambdae)*(1-RHOE)*uce*MH*exp(a_me)*(q(+1))*(pi(+1))/((re(+1))) ;


//% Factor demand 22-26

ALPHA*MIU*(y) = (rk)*zke*(ke(-1)) ;

ALPHA*(1-MIU)*(y) = (rm)*zkh*(kh(-1)) ;

NU*(y) = (rv)*(q)*(he(-1)) ;

(1-ALPHA-NU)*(1-SIGMA)*(y)/(1+MN*exp(a_me)*(1-RHOE)*lambdae) = (wh)*(nh) ;

(1-ALPHA-NU)*SIGMA*(y)/(1+MN*exp(a_me)*(1-RHOE)*lambdae) = (ws)*(ns) ;


//% Housing 27-27
(hh) + (hs) + (he) = 1;



//% Utilization rate 
dke = DELTA + (RK_SS)  * ( (ZETAE/(1-ZETAE)*zke^2)/2 + (1-ZETAE/(1-ZETAE))*zke + .5*ZETAE/(1-ZETAE) - 1 ) ;
dkh = DELTA + (1/BETAH-1+DELTA) * ( (ZETAH/(1-ZETAH)*zkh^2)/2 + (1-ZETAH/(1-ZETAH))*zkh + .5*ZETAH/(1-ZETAH) - 1 ) ;

rk = (RK_SS)*( ZETAE/(1-ZETAE)*zke + 1-ZETAE/(1-ZETAE) ) ;
rm = (1/BETAH-1+DELTA)*( ZETAH/(1-ZETAH)*zkh + 1-ZETAH/(1-ZETAH) ) ;

//%Monetary policy
%pi =1;
%rh = (rh(-1))^rR*((pi(-1))^(1-rpi)*(y(-1)/Y_SS)^rY*R_SS)^(1-rR)*exp(eps_r);    //iac2005
%rh/R_SS = (rh(-1)/R_SS)^rR*(pi^rpi*(y/Y_SS)^rY)^(1-rR)*exp(eps_r); 
%rh = ((pi(-1))^(1+rpi))*exp(eps_r);
rh = R_SS^(1-rR)*(rh(-1))^rR*(pi)^(rpi*(1-rR))*(y/y(-1))^(rY*(1-rR))*exp(eps_r);


//% Auxiliary vars 
(ktot) = (ke)+(kh) ;
ntot = nh^(1-SIGMA)*ns^SIGMA ;
(ctot) = (ce)+(ch)+(cb)+(cs) ;
(itot) = (ke)+(kh)-(1-dke)*(ke(-1))-(1-dkh)*(kh(-1)) ;

a_j = ZRHO_AJ*a_j(-1) + eps_j ;
a_k = ZRHO_AK*a_k(-1) + eps_k ;
a_me = ZRHO_AME*a_me(-1) + eps_me ;
a_mh = ZRHO_AMH*a_mh(-1) + eps_mh ;
a_p = ZRHO_AP*a_p(-1) + eps_p ;
a_z = ZRHO_AZ*a_z(-1) + eps_z ;


acdb  = FIDB*((d)-(d(-1)))/D_SS ;
acdh  = FIDH*((d)-(d(-1)))/D_SS ;
acke  = FIKE*((ke)-(ke(-1)))/KE_SS ;
ackh  = FIKH*((kh)-(kh(-1)))/KH_SS ;
acloeb = FILOEB*((loe)-(loe(-1)))/LOE_SS ;
aclosb = FILOSB*((los)-(los(-1)))/LOS_SS ;
acloee = FILOEE*((loe)-(loe(-1)))/LOE_SS ;
acloss = FILOSS*((los)-(los(-1)))/LOS_SS ;

data_TFP = a_z ;
data_YY = (ctot+itot)/Y_SS-1;
data_CC = (ctot/CTOT_SS-1) ;
data_II = (itot/ITOT_SS-1) ;
data_LO = ((loe+los)/LTOT_SS-1)  ;
data_LOE = ((loe)/LOE_SS-1)  ;
data_LOH = ((los)/LOS_SS-1)  ;
data_QQ = (q/Q_SS-1) ;
data_NN = ntot/NTOT_SS-1 ;

//% HABITS
//% 25
ucb = (1-ECH)*( cb - ECH*cb(-1))^(-SIGMAB) ;
uce = (1-ECH)*( ce - ECH*ce(-1))^(-SIGMAE) ;
uch = (1-ECH)*( ch - ECH*ch(-1))^(-SIGMAH) ;
ucs = (1-ECH)*( cs - ECH*cs(-1))^(-SIGMAH) ;

end;



shocks;
var eps_j; stderr 100*SIG_J ;
var eps_k; stderr 100*SIG_K ;
var eps_me; stderr 100*SIG_ME ;
var eps_mh; stderr 100*SIG_MH ;
var eps_p; stderr 100*SIG_P ;
var eps_z; stderr 100*SIG_Z ;
var eps_r; stderr 100*SIG_R ;
end;

//% Optimal policy

%optim_weights;  
%y 1;
%pi 1;
%end;

//% Initial values for parameters in Taylor rule
%rR = 0.1;                              //Monetary policy parameters taken from GNSS
%rY = 0.1;
%rpi = 1.2;

%osr_params rY;
%osr(order=1, irf=20) data_YY data_CC data_II data_LO data_QQ ; 

//% caluclulation of steady state
steady(nocheck);

%stoch_simul(order=1,irf=20) y cs los q pi rh  ; 
stoch_simul(order=1,irf=20) data_YY data_CC data_II data_LO data_QQ pi ; 
%model_diagnostics;