%. Dynare Code for "Second Year Paper".
%By Mario Gonzalez

%----------------------------------------------------------------
% 0. Housekeeping (close all graphic windows)
%----------------------------------------------------------------

close all;

%----------------------------------------------------------------
% 1. Defining variables
%----------------------------------------------------------------

var ys cs hs ks is l d  w R_l R_d  x z r prof_s prof_bk m pi ; 
predetermined_variables m ks;
varexo e_z e_x;

parameters c_betti c_chi c_alpha c_delta c_sigma c_eta c_kappa rho_z rho_x sigma_z res;

%----------------------------------------------------------------
% 2. Calibration
%----------------------------------------------------------------

c_betti     = 0.9872;
c_chi       = 15;
c_delta     = 0.02;
c_sigma     = 1;
c_eta       = 2;
c_alpha     = 0.3;
c_kappa     = 0.1;
rho_x       = 0.95;
rho_z       = 0.95;
sigma_z     = 0.002;
sigma_x     = 0.002;
R_l_ss      = 1.06;
R_d_ss      = 1/c_betti;
res         = (R_l_ss-R_d_ss)/(R_l_ss-1);


%STEADY STATE

R_d_ss      = 1/c_betti;
Omega       = 1/(c_betti*c_kappa)*(1-c_betti*(1-c_delta)-c_alpha*c_betti/(1-c_alpha)*(c_kappa/R_l_ss-c_delta));
mu_ss       = Omega/(1-Omega*R_l_ss);
Gamma       = ((R_l_ss/(c_alpha*c_betti))*(1+mu_ss*R_l_ss -c_betti*(1-c_delta)*(1+mu_ss*R_l_ss)-c_kappa*c_betti*mu_ss))^(1/(1-c_alpha));
hs_ss       = ((1-c_alpha)*Gamma^(1-c_alpha)/((Gamma^(1-c_alpha)-c_delta)*c_chi*R_l_ss*c_betti*(1+mu_ss*R_l_ss)))^(1/(1+c_eta));
ks_ss       = Gamma^-1*hs_ss;
cs_ss       = (1-c_alpha)*Gamma^(-c_alpha)/(R_l_ss*c_betti*c_chi*hs_ss^c_eta*(1+mu_ss*R_l_ss));
is_ss        = c_delta*Gamma^-1*hs_ss;
w_ss        = c_betti*c_chi*cs_ss*hs_ss^c_eta;
l_ss        = w_ss*hs_ss+is_ss;
ys_ss       = cs_ss+is_ss;
d_ss        = c_kappa*(1-res)*ks_ss/R_l_ss;
z_ss        = 1;
x_ss        = 0;
m_ss        =cs_ss+d_ss-w_ss*hs_ss;






%----------------------------------------------------------------
% 3. Model
%----------------------------------------------------------------

model; 
%Equilibrium Conditions
  ks(+1)= (1-c_delta)*ks+is; 
  l     = w*hs+is; 
  m(+1)=(m+x)/(1+pi(+1)); 

%Household Equations
  %ys=cs+is;
  m(+1)*(1+pi(+1))=w*hs+R_d*d+prof_s+prof_bk;
  cs^-c_sigma = c_betti*R_d(+1)*cs(+1)^-c_sigma;
  w               = R_d*c_chi*hs^c_eta/(cs^-c_sigma);
  cs=m(-1)-d; 

%Small Firms Equations
  (1-c_alpha)*z*(ks/hs)^c_alpha            = w*R_l;%check
  c_alpha*c_betti*z(+1)*(hs(+1)/ks(+1))^(1-c_alpha)= R_l
                                                 -R_l(+1)*(1-c_delta)*c_betti;
                                                 
  ys    = z*hs^(1-c_alpha)*ks^(c_alpha); %check
  %R_l*l = c_kappa*ks(-1);
  prof_s=ys-w*hs-is+l-R_l*l;
%Bank Equations
  R_l-R_d=res*(R_l-1); %(21)
  d+x = l+r;
  r=res*(d+x);
  prof_bk=(R_l-res*(R_l-1))*x;
%Exogenous Variables Equations  
  log(z)       = rho_z*log(z(-1))+e_z;
  x            = rho_x*x(-1)+e_x;







end;


%----------------------------------------------------------------
% 4. Computation
%----------------------------------------------------------------

initval;

ys   = ys_ss;
cs   = cs_ss;
hs   = 0.33;
ks   = ks_ss;
is   = is_ss;
l    = l_ss;
d    = d_ss;
w    = w_ss;
R_l  = R_l_ss; 
R_d  = R_d_ss;
%mu   = 0;
x    = x_ss;
z    = z_ss;
e_z  = 0;
e_x  = 0;
m    = m_ss;
pi   = 0;

end;


steady_state_model ;
R_l      = 1.06;
R_d      = 1/c_betti;
Gamma    = ((R_l/(c_alpha*c_betti))*(1-c_betti*(1-c_delta)))^(1/(1-c_alpha));
hs       = ((1-c_alpha)*c_betti/((1-c_delta*Gamma^(-1+c_alpha))*c_chi*R_l))^(1/(1+c_eta));
cs       = ((1-c_alpha)*c_betti*Gamma^(-c_alpha)/(hs^(c_eta)*c_chi*R_l));
ks       = Gamma^(-1)*hs;
is       = c_delta*ks;
ys       = cs+is;
w        = c_chi*hs^(c_eta)*cs/c_betti;
l        = w*hs+is;
d        = l/(1-res);
m        = cs+d;
pi       = 0;
prof_s   = ys-w*hs-is-R_l*l+l;
prof_bk  = 0;
x        = 0;
r        = res*d;


end;










shocks;
%var e_z  =sigma_z^2;     
var e_x  =sigma_x^2; 

end;

steady;

check;



stoch_simul(solve_algo=3,periods=10000, irf=40);






























%----------------------------------------------------------------
% 6. Some Results
%----------------------------------------------------------------

%statistic1 = 100*sqrt(diag(oo_.var(1:6,1:6)))./oo_.mean(1:6);
%dyntable('Relative standard deviations in %',strvcat('VARIABLE','REL. S.D.'),M_.endo_names(1:6,:),statistic1,10,8,4);
