%. Dynare Code for "Small Firms with banks".
%By Mario Gonzalez

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

close all;

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

var y c h k m lam rd rl R  l w pi z u Q d gamma prof_banks phi nu;
varexo e_z e_u;

parameters betti chi alpha delta sigma eta phid rho_z rhou sigma_z sigma_u mud theta psi xi kappa;

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

betti     = 0.989;
chi       = 5;
delta     = 0.019;
sigma     = 1;
eta       = 2;
alpha     = 0.36;
rho_z     = 0.95;
phid       = 0.0;
rhou      = 0.75;
theta     = 1.5;
mud       = theta/(theta-1);
psi       = 5;
xi        = 0.1;
kappa     =0.05;

sigma_z     = 0.02;
sigma_u     = 0.02;


%STEADY STATE

r_ss        = 1/betti-1;
rd_ss       = r_ss;
rl_ss       = rd_ss/(1-xi);

x0 = [0.35;0.35]
[x,fval] = fsolve(@solvesss,x0,[],betti,alpha,delta,mud,theta,kappa,rl_ss)

phi_ss      =x(1);
gamma_ss    =x(2);

Gamma       = ((1+rl_ss)*(1+phi_ss)*(1/betti+delta-1)/(alpha*gamma_ss)-kappa*phi_ss/(alpha*gamma_ss))^(1/(1-alpha));
h_ss        = ((1-alpha)/((1+phi_ss)*(1+rl_ss)*chi*(1-delta*Gamma^(-1+alpha))))^(1/(1+eta));
c_ss        = (1-alpha)*Gamma^(-alpha)*gamma_ss/((1+phi_ss)*(1+rl_ss)*chi*h_ss^eta) ;
w_ss        = (1-alpha)*Gamma^(-alpha)*gamma_ss/((1+phi_ss)*(1+rl_ss));
y_ss        = h_ss*Gamma^-alpha;
k_ss        = h_ss*Gamma^-1;
l_ss        = w_ss*h_ss+delta*k_ss;
d_ss        = l_ss/(1-xi);
m_ss        = c_ss+d_ss-w_ss*h_ss;
R_ss        = xi*d_ss;
prof_banks_ss  = 0;
z_ss        = 1;
u_ss        = 0;
thet_ss     = 0;
pi_ss       = 0;
lam_ss      = c_ss^(-sigma)/(1+rd_ss);








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

model; 
%Equilibrium Conditions
  y=c +k-(1-delta)*k(-1)+psi/2*pi^2;
  m=(1+u)*m(-1)/(1+pi);
  Q=betti*c(+1)^(-sigma)/c^(-sigma);
%Household Equations
 w=chi*h^eta/c^(-sigma);
 c^(-sigma)=(1+rd)*lam;
 lam=betti*(c(+1)^(-sigma))/(1+pi(+1));
 c+d=m(-1)/(1+pi)+w*h;


%Small Firms Equations
y=z*h^(1-alpha)*k(-1)^(alpha);
(1+pi(1))*Q*((1+rl(1))*(1-delta)*(1+max(0,nu(1)))+kappa*max(0,nu(1))+gamma(1)*alpha*z(1)*(h(1)/k)^(1-alpha))=(1+rl)*(1+max(0,nu));
gamma*(1-alpha)*z*(k(-1)/h)^alpha=w*(1+rl)*(1+max(0,nu));
y = ((1+max(0,nu))*(1+rl)*(k-(1-delta)*k(-1))-psi*(1+pi(1))^2*pi(1)*Q+psi*(1+pi)*pi-kappa*k*max(0,nu))/((1-theta)*(1-mud*gamma));
kappa*k(-1)-(1+rl)*l=max(0,-nu);
l = w*h+k-(1-delta)*k(-1);
phi=max(0,nu);


%Bank Equations

rl = rd/(1-xi);
prof_banks=(1+rl*(1-xi))*u*m(-1);
l + R= d+u*m(-1);
R = xi*(d+u*m(-1));

%Exogenous Variables Equations  

  log(z)  = rho_z*log(z(-1))+e_z;
  u       = rhou*u(-1)+phid*log(z(-1))+e_u; %
  






end;


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

initval;

y    = y_ss;
c    = c_ss;
h    = h_ss;
k    = k_ss;
w    = w_ss;
rd   = rd_ss;
z    = z_ss;
u    = u_ss;
e_z  = 0;
e_u  = 0;
m    = m_ss;
pi   = 0;
lam  =lam_ss;
gamma=gamma_ss;
Q    =betti;
prof_banks=prof_banks_ss;
l    = l_ss;
rl   = rl_ss;
R    = R_ss;
phi  = phi_ss;


end;












shocks;
var e_z  =sigma_z^2;     
var e_u  =sigma_u^2; 

end;

steady;

check;




stoch_simul(order=1,solve_algo=3,periods=10000);






























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