//--------------------------------------------------------------------
//   Comments: Simulated with Dynare version 4. Solves and simulates
//             the model in Andreasen, Ferman and Zabczyk (2001). This
//             code relates to the model in Section 3 of the paper.
//
//   By: Martin M. Andreasen, Marcelo Ferman and Pawel Zabczyk
//
//   January 2011
//
//**********  DO NOT SHARE WITHOUT AUTHORS' CONSENT ******************
//
//-------------------------------------------------------------------- 
                                 
//---------------------------------------------------------------------
// 1a. Variable declaration
//---------------------------------------------------------------------
var lambda,c,r,h,w,ktil,a,z1,z2,q,rk,k,lev,x1,x2,n,rev,
    iv,y,u,len,u1,pk,ext_prem,b,bankcost,rkpk,v,infl,det,p3,yi,num,den;
    

//---------------------------------------------------------------------
// 1b. Exogenous shocks
//---------------------------------------------------------------------
varexo  eps_a, eps_u;                          

//---------------------------------------------------------------------
// 2. Parameter declaration and calibration
//---------------------------------------------------------------------
parameters 

          //Structural parameters:
          BETA,B,PHI1,PHI2,THETA,ALFAK,GAMMA,LAMBDA,ALFAB,TAO,DELTA,KAPA,
          RHOA,A,SIGMAC,RHOU,INT_HAB,ETA,RHO,PHI3,PHI4,ALFAP,

          //Steady state declared as parameters
          RSS,U1SS,QSS,PKSS,X2SS,KTILSS_KSS,LENSS_KSS,REVSS_KSS,NSS_KSS,RKSS,X1SS,
          Z2SS,Z1SS,WSS,HSS_KSS,IVSS_KSS,YSS_KSS,YSS_HSS,CSS_HSS,HSS,KSS,CSS,YSS,
          LAMBDASS,KTILSS,IVSS,LENSS,NSS,REVSS,LEVSS,INFLSS,DETSS,DENSS,P3SS,NUMSS_DENSS,NUMSS,
         YISS;

          
//---------------------------------------------------------------------
//2.a Parameters governing household's behaviour
//---------------------------------------------------------------------
BETA      = 0.9926;              //TIME DISCOUNT
B         = 0.65;                //HABITS INTENSITY
INT_HAB   = 1;                   //INTERNAL HABITS = 1; EXTERNAL HABITS = 0
SIGMAC    = 1;                   //COEFFICIENT OF RELATIVE RISK AVERSION
PHI1      = 0.33;                 //INVERSE FRISCH ELASTICITY OF LABOR DEMAND

//---------------------------------------------------------------------
//2.b Parameters governing intermediate firms' behaviour
//---------------------------------------------------------------------
THETA     = 0.36;                //CAPITAL COEFFICIENT IN THE PRODUCTION FUNCTION
ALFAK     = 0*(1-1/8);           //CONTROLS AVERAGE DURATION OF LOAN CONTRACTS 
GAMMA     = 1;                   //FRACTION OF LENDING IN FIXED RATE

//---------------------------------------------------------------------
//2.c Parameters governing bank's behaviour
//---------------------------------------------------------------------
LAMBDA    = 0.2;                 //FRACTION OF ASSETS BANKS CAN DIVERT
ALFAB     = 0.972;               //CONTROLS AVERAGE LIFE OF BANKS
TAO       = 0.017;              //CONTROLS CONTRIBUTIONS TO INSURANCE AGENCY

//---------------------------------------------------------------------
//2.d Parameters governing capital accumulation
//---------------------------------------------------------------------
DELTA     = 0.025;               //DEPRECIATION RATE
KAPA      = 2.5;                 //INTENSITY OF INVESTMENT ADJUSTMENT COST
//-------------------------------------------------------------------
//2.e Parameters governing retail forms
//-------------------------------------------------------------------
ALFAP    =0.75;
ETA      =6;
PHI3     =2.37;
PHI4     =0.02;
RHO      =0.84;

//---------------------------------------------------------------------
//2.f Parameters governing shocks
//---------------------------------------------------------------------
RHOA      = 0.9;                 //PERSISTENCY OF TECHNOLOGICAL SHOCK
A         = 1;                   //STEADY STATE LEVEL OF TECHNOLOGY
RHOU      = 0.5;                 //PERSISTENCY OF PREFERENCES SHOCK

//---------------------------------------------------------------------
//2.d Parameters corresponding to SS values of variables
//---------------------------------------------------------------------
RSS        = 1/BETA;
U1SS       = DELTA/(1-BETA*ALFAK*(1-DELTA));
QSS        = 1;
PKSS       = (1-BETA*(1-DELTA))/(DELTA*BETA);
X2SS       = (1-ALFAB)*BETA*RSS/(1-ALFAB*BETA);
KTILSS_KSS = (1-ALFAK*(1-DELTA))/(1-ALFAK);
LENSS_KSS  = (1-ALFAK)/(1-ALFAK*(1-DELTA))*PKSS*KTILSS_KSS; 
REVSS_KSS  = ( LENSS_KSS*LAMBDA/(1-TAO)+(1-ALFAB)*BETA/(1-ALFAB*BETA)*RSS*LENSS_KSS + X2SS*(1-TAO)/(1-(1-TAO)*RSS)*RSS*LENSS_KSS ) / 
             ( X2SS*(1-TAO)/(1-(1-TAO)*RSS) + (1-ALFAB)*BETA/(1-ALFAB*BETA) );
NSS_KSS    = (1-TAO)/(1-(1-TAO)*RSS)*(REVSS_KSS-RSS*LENSS_KSS);
RKSS       = REVSS_KSS / (PKSS*KTILSS_KSS)*(1-ALFAK*(1-DELTA))/(1-ALFAK);
X1SS       = (1-ALFAB)*BETA/(1-ALFAB*BETA)*(REVSS_KSS/LENSS_KSS-RSS);
Z2SS       = 1/(1-(1-DELTA)*BETA*ALFAK);
Z1SS       = ((RKSS-1)+DELTA)*PKSS*Z2SS;
WSS        = A*(1-THETA)*(THETA*A/((1-(1-DELTA)*ALFAK*BETA)*Z1SS))^(THETA/(1-THETA));
HSS_KSS    = ( WSS / (A*(1-THETA)) )^(-1/THETA);
IVSS_KSS   = DELTA;
YSS_KSS    = A*HSS_KSS^(1-THETA);
YSS_HSS    = YSS_KSS/HSS_KSS;
CSS_HSS    = YSS_HSS - IVSS_KSS*HSS_KSS^-1;
PHI2       = CSS_HSS^-SIGMAC*(1-B)^-SIGMAC*(1-INT_HAB*BETA*B)*WSS*(1)^-(PHI1+SIGMAC);
HSS        = (CSS_HSS^-SIGMAC*(1-B)^-SIGMAC*(1-INT_HAB*BETA*B)*1/PHI2*WSS)^(1/(PHI1+SIGMAC));
KSS        = HSS_KSS^-1*HSS;
CSS        = CSS_HSS*HSS;
YSS        = YSS_HSS*HSS;
LAMBDASS   = CSS^-SIGMAC*(1-B)^-SIGMAC*(1-INT_HAB*BETA*B);
KTILSS     = KTILSS_KSS*KSS;
IVSS       = IVSS_KSS*KSS;
LENSS      = LENSS_KSS*KSS;
NSS        = NSS_KSS*KSS;
REVSS      = REVSS_KSS*KSS;
LEVSS      = LENSS/NSS;
INFLSS     =1;
DETSS      =1;
DENSS      =YSS/(1-ALFAP*BETA);
P3SS       =YSS*(ETA-1)/ETA;
NUMSS_DENSS=1;
//%P2SS_P1SS  =1;
YISS       =YSS;
NUMSS      = NUMSS_DENSS*DENSS;


//---------------------------------------------------------------------
// 3. Model declaration
//---------------------------------------------------------------------

model;  

// ************************** HOUSEHOLDS **********************************

//(1) Marginal Utility of Consumption:
exp(lambda) = (exp(c)-B*exp(c(-1)))^(-SIGMAC)*exp(u) - INT_HAB*BETA*B*(exp(c(+1))-B*exp(c))^(-SIGMAC)*exp(u(+1));

//(2) Euler equation for deposits:
//Note: r is the riskless rate from t to t+1 (and is known at time t)
BETA*exp(lambda(+1))*exp(r)/exp(infl)*exp(lambda) = 1;

//(3) Labor supply:
PHI2*exp(h)^PHI1*exp(u) = exp(lambda)*exp(w);


// ************************* FINAL GOODS **********************************

//(4) Law of motion of labor:
//    Note: k is the level of capital used in production at time t. Capital
//          accumulation equation will be written accordingly (i.e. with
//          lagged investment).
exp(h) = (exp(w)/exp(p3)*(exp(a)*(1-THETA)))^(-1/THETA)*exp(k);

//(5-7) Optimal choice of capital:
z1 = (exp(rk)-1+DELTA)*exp(pk)*z2;

z1 = exp(p3)*THETA*exp(a)*(exp(w)/(exp(p3)*exp(a)*(1-THETA)))^(-(1-THETA)/THETA) + exp(lambda(+1))/exp(lambda)*z1(+1)*((1-DELTA)*ALFAK*BETA);

z2 = 1 + exp(lambda(+1))/exp(lambda)*exp(infl(+1))^(-1)*(1-DELTA)*ALFAK*BETA*z2(+1);

//(8) Law of motion linking k and ktil:
exp(k) = (1-ALFAK)*exp(ktil) + ALFAK*(1-DELTA)*exp(k(-1));


// **************************** BANKS *************************************

//(9) Law of motion for aggregate net-worth of banks:
exp(n) = (1-TAO)*exp(infl(+1))^(-1)*(exp(rev(-1)) - exp(r(-1)))*exp(len(-1)) + exp((r(-1))*exp(n(-1)));

//(10) Aggregate revenues definition:
exp(rev) = (1-ALFAK)*exp(rk)*exp(pk)*exp(ktil) + ALFAK*(1-DELTA)*exp(rev(-1))*exp(infl)^(-1);

//(11) Aggregate loans definition:
exp(len) = (1-ALFAK)*exp(pk)*exp(ktil) + ALFAK*(1-DELTA)*exp(len(-1))*exp(infl)^(-1);

//(12) Leverage ratio definition:
exp(lev) = exp(len)/exp(n);

//(13-15) Solution for the leverage ratio incorporating incentive constraint:
exp(lev) = exp(x2)/(LAMBDA/(1-TAO)-exp(x1));
exp(x1) = (1-ALFAB)*BETA*exp(lambda(+1))/exp(lambda)*exp(infl(+1))^(-1)*(exp(rev)/exp(len)-exp(r)) 
          + exp(x1(+1))*ALFAB*BETA*exp(lambda(+1))/exp(lambda)*exp(infl(+1))^(-1)*exp(len(+1))/(exp(len));
exp(x2) = (1-ALFAB)*BETA*exp(lambda(+1))/exp(lambda)*exp(infl(+1))^(-1)*exp(r)
          + exp(x2(+1))*ALFAB*BETA*exp(lambda(+1))/exp(lambda)*exp(n(+1))/exp(n);


// ********************** CAPITAL PRODUCERS *******************************

//(16) Capital accumulation equation:
//Note: timing of investment assumes that it feeds into production with a
//      lag rather than contemporaneously.
exp(k) = (1-DELTA)*exp(k(-1)) + exp(iv(-1))*( 1 - KAPA/2*(exp(iv(-1))/exp(iv(-2))-1)^2 );

//(17-19) Equations pinning down the investment decision:
exp(q) = ( 1 - BETA*exp(lambda(+1))/exp(lambda)*exp(q(+1))*KAPA*(exp(iv(+1))/exp(iv)-1)*(exp(iv(+1))/exp(iv))^2 ) /
         ( 1 - KAPA/2*(exp(iv)/exp(iv(-1))-1)^2 - KAPA*(exp(iv)/exp(iv(-1))-1)*exp(iv)/exp(iv(-1)) );
exp(u1) = DELTA + BETA*exp(lambda(+1))/exp(lambda)*exp(infl(+1))^(-1)*exp(u1(+1))*ALFAK*(1-DELTA);
exp(q) = - BETA^2*exp(lambda(+2))/exp(lambda)*exp(u1(+2))*ALFAK*(1-DELTA)*exp(pk(+2))
         + BETA*exp(lambda(+1))/exp(lambda)*( exp(u1(+1))*exp(pk(+1)) + exp(q(+1))*(1-DELTA) );

//****************************RETAIL FIRMS********************************

//(20)
//%exp(p2)/exp(p1) = exp(num)/exp(den);

//(21)
exp(num) = (ETA/ETA-1)*exp(p3)*exp(y)+ALFAP*BETA*exp(lambda(+1))/exp(lambda)*exp(infl)^ETA*exp(num(+1));
//(22)
exp(den) =exp(y)+ALFAP*BETA*exp(lambda(+1))/exp(lambda)*exp(infl)^(ETA-1)*exp(den(+1));
//(23)
exp(infl) = ((1-ALFAP)*(exp(num)/exp(den)*exp(infl))^(1-ETA)+ALFAP)^(1/(1-ETA));
// *********************** MARKET CLEARING ********************************

//(24) Production function:
exp(yi) = exp(a) * exp(k)^THETA * exp(h)^(1-THETA);

//(25)
exp(y)=exp(det(-1))*exp(yi);
//(26)
exp(det)=(1-ALFAP)*(exp(num)/exp(den))^(-ETA)+ALFAP*exp(infl)^ETA*exp(det(-1));
//(27)
exp(y) = exp(c) + exp(iv);
//(28)
exp(rk)=RHO*exp(r(-1))+(1-RHO)*RKSS+PHI3*exp(infl)+PHI4*((log(exp(y)))-log(exp(YSS)));

// ********************* EXOGENOUS PROCESSES ******************************

//(29) Process for stationary labour productivity shocks:
log(exp(a)/A) = RHOA*log(exp(a(-1))/A) + eps_a;

//(30) Process for preferences shocks:
u = RHOU*u(-1) + eps_u ;

// ********************* REPORTING VARIABLES ******************************

exp(ext_prem) = exp(rk) - exp(r);

exp(b) = exp(len) - exp(n);

exp(bankcost) = exp(r)*exp(b);

exp(rkpk) = exp(rk)*exp(pk);

exp(v) = (1-TAO)*( exp(len)*exp(x1) + exp(n)*exp(x2) );

end;
//---------------------------------------------------------------------
// 4. Initial values and steady state
//---------------------------------------------------------------------
initval;

lambda = log(LAMBDASS);
c=log(CSS);
r=log(RSS);
h=log(HSS);
w=log(WSS);
ktil=log(KTILSS);
a=log(A);
z1=Z1SS;
z2=Z2SS;
q=log(QSS);
rk=log(RKSS);
k=log(KSS);
lev=log(LEVSS);
x1=log(X1SS);
x2=log(X2SS);
n=log(NSS);
rev=log(REVSS);
iv=log(IVSS);
y=log(YSS);
u=0;
len=log(LENSS);
u1=log(U1SS);
pk=log(PKSS);
ext_prem=log(RKSS - RSS);
b = log(LENSS - NSS);
bankcost = log(RSS*(LENSS - NSS));
rkpk = log(RKSS*PKSS);
v=log( (1-TAO)*( LENSS*X1SS + NSS*X2SS ) );
//%p1 = log(P1SS);
//%p2 = log(P2SS);
p3 = log(P3SS);
infl = log(INFLSS);
det = log(DETSS);
//num = log(NUMSS);
//den =log(DENSS);
num = log(NUMSS_DENSS *DENSS);
den = log(DENSS);
yi=log(YISS);


end;


//resid;

steady;

//Var in shock to technology

shocks;
var eps_a = 0.000049;
var eps_u = 0.000016;
end;

stoch_simul(order=1,irf=25);//,nomoments,nograph);
