global modelnumber

var
a_be
a_bh
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_LLE
data_LLH
data_LO
data_LOE
data_LOH
data_NN
data_QQ
data_TFP
data_YY
dke
dkh
e_a_be
e_a_bh
he
hh
hs
itot
ke
kh
ktot
lambdab
lambdae
lambdas
loe
los
nh
ns
ntot
q
re
rh
rk
rm
rs
rv
spread_long
spread_re_rh
spread_rs_rh
ucb
uce
uch
ucs
wh
ws
y 
zke
zkh ;

varexo eps_be eps_bh eps_j eps_k eps_me eps_mh eps_p eps_z ;

parameters
ALPHA BETAB BETAE BETAH BETAS BORRGAIN DELTA ECH 
FIDB FIDH FIKE FIKH FILOEB FILOEE FILOSB FILOSS GAMMAE GAMMAS IEAC JEI
LOSSCON LOSSCONB MH MIU MK MN MS NU RHOD RHOE RHOS SAVGAIN SIG_BE SIG_BH SIG_J SIG_K 
SIG_ME SIG_MH SIG_P SIG_Z SIGMA SIGMAB SIGMAE SIGMAH TAUH TAUS YESBANK ZETAE ZETAH
ZRHO_ABE ZRHO_ABH ZRHO_AJ ZRHO_AK ZRHO_AME ZRHO_AMH ZRHO_AP ZRHO_AZ;

ALPHA = 0.35; 
BETAB = 0.945; 
BETAE = 0.94; 
BETAH =  0.9925; 
BETAS = 0.94; 
DELTA = 0.035; 
GAMMAE = 0.9; 
GAMMAS = 0.9; 
JEI = 0.075; 
MH = 0.9; 
MK = 0.9; 
MN = 1; 
MS = 0.9; 
SIGMAB = 1; 
SIGMAE = 1; 
SIGMAH = 1; 
TAUH = 2; 
TAUS = 2; 
YESBANK = 1; 

BORRGAIN =  1; 
IEAC = 0; 
LOSSCON = 0; 
LOSSCONB = 1; 
SAVGAIN = 0; 


SIG_BE = 0.00105366310939923; 
SIG_BH = 0.00132513108400193; 
SIG_J = 0.0346933420950192; 
SIG_K = 0.00675523019012514; 
SIG_ME = 0.0209405169003728; 
SIG_MH = 0.0115100149923654; 
SIG_P = 0.0204415898447342; 
SIG_Z = 0.00699646242063357; 
ECH = 0.457371499418411; 
FIDB = 0.137646346329159; 
FIDH = 0.0994830705225513; 
FIKE = 0.477524996640234; 
FIKH = 1.55649679224095; 
FILOEB = 0.0699784020696283; 
FILOEE = 0.0584911612503868; 
FILOSB = 0.466665017329181; 
FILOSS = 0.368243502056968; 
MIU = 0.464053954028799; 
NU = 0.0378989733672577; 
RHOD = 0.233590326955833; 
RHOE = 0.650291811303701; 
RHOS = 0.700910340904156; 
SIGMA = 0.326564481162563; 
ZETAE = 0.417264168830014; 
ZETAH = 0.376780917346019; 
ZRHO_ABE = 0.930835177208793; 
ZRHO_ABH = 0.969199134850878; 
ZRHO_AJ = 0.992211497669937; 
ZRHO_AK = 0.907564408672319; 
ZRHO_AME = 0.840323071869589; 
ZRHO_AMH = 0.872798006280679; 
ZRHO_AP = 0.995109196172004; 
ZRHO_AZ = 0.990599723824274; 






model;

#   zzGAMMAE=YESBANK*GAMMAE+(1-YESBANK);
#   zzGAMMAS=YESBANK*GAMMAS+(1-YESBANK);
#	zzrh = 1/BETAH; 
#	zzrm = zzrh - (1-DELTA);
#	zzlambdab = YESBANK*(1-BETAB*zzrh)/(1-BETAB*RHOD) + (1-YESBANK)*1e-20;
#	zzre = YESBANK*(1/BETAB)*(1-((1-BETAB)*RHOD+(1-RHOD)*GAMMAE)*zzlambdab)
    +(1-YESBANK)*zzrh; 
#	zzrs = YESBANK*(1/BETAB)*(1-((1-BETAB)*RHOD+(1-RHOD)*GAMMAS)*zzlambdab) 
    + (1-YESBANK)*zzrh; 
#	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*zzlambdae)) ;
#	oo5 = GAMMAS*MS/zzrs*(oo2*(zzrh-1))*oo3 ;
#	oo7 = zzrm - DELTA ;
#	oo8 = (1-ALPHA-NU)*(1-SIGMA)/((1+MN*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*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*zzlambdae)*zzy ;
#	zzwh = ((1-SIGMA)*(1-ALPHA-NU)/(1+MN*zzlambdae))*zzy/zznh ;
#	zzws = (SIGMA*(1-ALPHA-NU)/(1+MN*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 = YESBANK*((zzre-1)*zzloe + (zzrs-1)*zzlos - (zzrh-1)*zzd)+(1-YESBANK)*1e-10;
#	zzmu = YESBANK*zzcb^(-SIGMAB) + (1-YESBANK)*zzch^(-SIGMAH) ;
#	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;
#  zzYESBANK = abs(YESBANK-1e-12);


% Household Savers 1-5

(1-YESBANK)*((ch) + kh/exp(a_k) + (q)*((hh)-(hh(-1))) + (loe) - (re(-1))*(loe(-1))
+ (los)-(rh(-1))*(los(-1)) + a_bh*Y_SS + a_be*Y_SS
- (rm*zkh+(1-dkh)/exp(a_k))*(kh(-1)) - (wh)*(nh) ) +
YESBANK*((ch) + kh/exp(a_k) + (q)*((hh)-(hh(-1))) + (d) - (rh(-1))*(d(-1))
- (rm*zkh+(1-dkh)/exp(a_k))*kh(-1) - (wh)*(nh)  - SAVGAIN*a_bh*(Y_SS) ) = 0 ;

(1+acdh)*(uch*exp(a_p)) - BETAH*(uch(+1)*exp(a_p(+1)))*((rh)+IEAC*acdh(+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)))+IEAC*ackh(+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)) + (q)*((hs)-(hs(-1))) =
BORRGAIN*a_bh*(Y_SS) + (los) + (ws)*(ns) ;

(los) = RHOS*(los(-1)) + (1-RHOS)*MS*exp(a_mh)*((q(+1))*(hs)/(rs(+1))-BORRGAIN*LOSSCON*a_bh*(Y_SS)) ;

(1-acloss-(lambdas))*(ucs*exp(a_p)) =
BETAS*(rs-IEAC*acloss(+1)-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))/((rs(+1))) ;


//% BANK 11-15

(1-YESBANK) * ( (cb)-1e-10 ) +
YESBANK* ( (cb) + (rh(-1))*(d(-1)) + (loe) + (los)
- (re)*(loe(-1))
- (rs(-1))*(los(-1)) - (d) + (a_be+a_bh)*(Y_SS) ) = 0 ;

(1-YESBANK)*((d)-(loe)-(los))
+ YESBANK*(
(d)-RHOD*( d(-1)-(loe(-1)-LOSSCONB*e_a_be(-1)*Y_SS)-(los(-1)-LOSSCONB*e_a_bh(-1)*Y_SS) )
-(1-(1-RHOD)*(1-GAMMAE))*(loe-LOSSCONB*e_a_be*Y_SS)
-(1-(1-RHOD)*(1-GAMMAS))*(los-LOSSCONB*e_a_bh*Y_SS) ) = 0;

(1-YESBANK)*((lambdab)-1e-10) +
YESBANK*( (1-acdb-(lambdab))*ucb -
BETAB*ucb(+1)*((rh)-RHOD*lambdab(+1)-IEAC*acdb(+1)) ) = 0;

(1-YESBANK)*((rs)-(rh)) +
YESBANK*( (1+aclosb-(RHOD+(1-RHOD)*GAMMAS)*(lambdab))*ucb -
BETAB*ucb(+1)*((rs)-RHOD*lambdab(+1)+IEAC*aclosb(+1)) ) = 0;

(1-YESBANK)*((re)-(rh)) +
YESBANK*( (1+acloeb-(RHOD+(1-RHOD)*GAMMAE)*(lambdab))*ucb -
BETAB*ucb(+1)*((re(+1))-RHOD*lambdab(+1)+IEAC*acloeb(+1)) ) = 0;



//% Entre 16-21

(ce) + (ke)/exp(a_k) + (q)*(he) 
+ YESBANK*(re)*loe(-1) + (1-YESBANK)*re(-1)*loe(-1) +
(wh)*(nh) + (ws)*(ns) + (rm)*zkh*kh(-1) =
(y) + (1-dke)*ke(-1)/exp(a_k) + (q)*(he(-1)) + (loe) + a_be*(Y_SS);

(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)/(re(+1)) 
+ MK*exp(a_me)*(ke) - MN*((wh)*(nh) + (ws)*(ns)) - LOSSCON*a_be*(Y_SS) ) ;

 (1-acloee-(lambdae))*uce =
 YESBANK*BETAE*((re(+1))-IEAC*acloee(+1)-RHOE*lambdae(+1))*uce(+1) +
 (1-YESBANK)*BETAE*((re)-IEAC*acloee(+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))+IEAC*acke(+1))*uce(+1) ;

(q)*uce
= BETAE*(q(+1))*(1+rv(+1))*uce(+1)
+ (lambdae)*(1-RHOE)*uce*MH*exp(a_me)*(q(+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*(lambdae)) = (wh)*(nh) ;

(1-ALPHA-NU)*SIGMA*(y)/(1+MN*(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) ) ;



//% 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)) ;

spread_re_rh = 4*(1-YESBANK)*((re)-(rh))+4*YESBANK*((re)-(rh));
spread_rs_rh = 4*(rs)-4*(rh);
spread_long = 0.125*spread_re_rh + 0.875*spread_long(+1);


a_be = ZRHO_ABE*(a_be(-1)) + eps_be ; //% Shock to repayment of subprime guy
a_bh = ZRHO_ABH*(a_bh(-1)) + eps_bh ; //% Shock to repayment of subprime guy
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 ;

e_a_be = a_be(+1);
e_a_bh = a_bh(+1);


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_LLE = a_be ;
data_LLH = a_bh ;
data_NN = ntot/NTOT_SS-1 ;


//% HABITS
//% 25
ucb = YESBANK*(1-ECH)*( cb - ECH*cb(-1))^(-SIGMAB) + 0*(1-YESBANK)*0.01 ;
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_be; stderr 100*SIG_BE ;
var eps_bh; stderr 100*SIG_BH ;
%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 ;
end;

steady(nocheck);

check;

stoch_simul(order=1,irf=20,nomoments,noprint) data_YY data_CC data_II data_LO data_QQ ; 