//Dynare Code for CP
//"The Financial Accelerator in a Quantitative Business- Cycle Framework".
//CM
//2012 


//close all;


//DEFINING VARIABLES AND PARAMETERS

var pref c lambda lh w R pi rr ome x k q v Rk b we ce z i s y Rnot nw rk r gammat a M;

parameters csigma gammab omegaw f0 f1 f delta zbar rkbar n0 v0 v1 CebarK kappa beta alpha Omega CbarY IbarY muG YbarK muGp omebar rhoi ap ay gammap xip xbar rhoGam rhoPref rhoA kss SIG gamma varrho CebarY rbar rrbar tetap mup alphap sbar lhbar rhoM;

varexo eps_gam eps_pref eps_a eps_m;

//numerical values computed in a different mfile

//CI 
//EL 
//THETA 
csigma  = 1;        // Separable pref: Risk aversion coefficient
gammab  = 0.5;
omegaw  = 1;        // Separable pref: Frisch elasticity
f0      = 0.5;
f1      = 0.1708;
f       = 0.0804;      
delta   = 0.02;
zbar    = rkbar - (1-delta); // - delta*tauk)/(1-tauk) rental price of capital
beta    = 0.99;         // discount factor 
rbar    = 1/beta;
rkbar   = rrbar*rbar;       // risk free interest rate
rrbar   = 1.02^(1/4);   // External finance premium s.s. = rkbar/rbar 
n0      = 0.9981;
v0      = 1.9814;
v1      = 0.0182;
CebarK  = varrho*(1-gamma)*(rkbar - rbar*(1-1/xbar) - muG*rkbar);
kappa   = 5.86;
alpha   = 0.36;    // capital share
Omega   = 0.9846;
CbarY  = 1 - IbarY - CebarY - muG*rkbar*(1/YbarK); 
IbarY   = delta*(1/YbarK); 
muG     = 0.00083225;
muGp    = 0.0185;
omebar  = 1; // Mean of idiosyncratic shock, omegabar BGG
tetap   = 11;       // elasticity of subst demand
mup     = tetap/(tetap-1);  // mark up
sbar    = 1/mup;        // Real marginal cost
YbarK   = zbar/(sbar*alpha);  
rhoi    = 0.8;    //Inertia parameter
ap      = 1.5;    //Coef of inflation
ay      = 0.5/4;  // Coef of output growth
alphap  = 0.85;     // calvo price
gammap  = 0;       // indexation price
xip     = (1-alphap)*(1-alphap*beta)/alphap; // Slope of Phillips curve      
xbar    = 2;            // Leverage ratio = ktildebar/nbar 
rhoGam  = 0.95;
rhoPref = 0.95;
rhoA    = 0.95;
rhoM    = 0.95;
lhbar  = 1/3;                                 //  A third of HH time is devoted to labor
kss      = (lhbar)^Omega/YbarK^(1/(1-alpha));    // A third of HH time is devoted to labor
SIG     = 0.4957;
gamma   = 0.9749;
varrho  = 0.0001;      // (1-varrho) = tranfers from entrepreneur to HH
CebarY = CebarK/YbarK;


model(linear);

//Household Separable utility case

//FOC consumption
pref-csigma*c=lambda;
//Risk free bond
lambda-R=lambda(+1)-(1-gammab)*pi(+1);
//Labor supply
pref+omegaw*lh=lambda+w;


//Household Non-Separable utility case

//FOC consumption
//lambda=pref-CI*c+EL*lh;
//Risk free bond
//lambda-R=lambda(+1);
//Labor supply
//lambda+w=pref-CI*c+(EL+theta-1)*lh;


//Optimal Contract Equations

rr(-1)=f0*f1*ome+gammab*pi;
rr=f*x+gammab*pi(+1);


//General Equilibrium

//Returns to Capital
Rk=pi+(zbar/rkbar)*z+((1-delta)/rkbar)*q-q(-1);


//Aggregate Networth
nw=n0*v+(1-n0)*we+n0*gammat;
//Entrepreneurs Equity
v+pi= v0*Rk+v0*q(-1)+v0*k(-1)-v1*ome-(v0-1)*R(-1)-(v0-1)*b(-1)-(v0-1)*gammab*pi;


//Consumption of entrepreneur
CebarK*ce= CebarK*v- gamma*varrho*(1-SIG)*rkbar*kss*gammat;


//Capital Producer

//Capital Accumulation 
k=delta*i+(1-delta)*k(-1);
q= kappa*i-kappa*i(-1)-beta*i(+1)+beta*i;


//Intermediate good producers

y=a+(1-alpha)*Omega*lh+alpha*k(-1);
//Costr min, Households wage
w=s+y-lh;
//Costr min, Entrepreneurs wage
we=s+y;
//Costr min, Rental Rate of Capital
z=s+y-k(-1);


//Resource Constraint
y = CbarY*c + IbarY*i + CebarY*ce+ muG*rkbar/YbarK*rk+ muG*rkbar/YbarK*q(-1)+ muG*rkbar/YbarK*k(-1)+omebar*muGp*rkbar/YbarK*ome;


//Monetary policy rule
Rnot= rhoi*Rnot(-1)+(1-rhoi)*ap*pi+(1-rhoi)*ay*y+M;
R=Rnot;


//Extra

//Phillips curve
pi-gammap*pi(-1)=xip*s+beta*pi(+1)-beta*gammap*pi;

r=R(+1)-pi(+1);
rk=Rk(+1)-pi(+1);
//External finance premium
rr=Rk(+1)-R;
//Networth, capital and debt
nw= xbar*q+xbar*k-(xbar-1)*b;
//Leverage Ratio
x=q+k-nw;

//networth shock
gammat = rhoGam*gammat(-1)+ eps_gam;
//preference shock
pref = rhoPref*pref(-1)+ eps_pref;
//technology shock
a=rhoA*a(-1)+eps_a;
//money 
M = rhoM*M(-1) + eps_m;
end;

shocks;
var eps_gam; stderr 0.25;
var eps_pref; stderr 0.25;
var eps_a; stderr 0.25;
var eps_m;stderr 0.25;
end;

check;
stoch_simul(irf=30) pref c lambda lh R pi rr x k q v Rk b ce z i s y nw rk r gammat a;