%----------------------------------------------------------------
% 0. Housekeeping (close all graphic windows)
%----------------------------------------------------------------
close all;

%----------------------------------------------------------------
% 1. Defining variables
%----------------------------------------------------------------
var  c r r_n pi w y k l i p q b d pstar pm f f1 lambda uc 
     e_S e_A e_R;
    

varexo eta_S eta_A eta_R;

parameters  alpha beta gamma gammap delta rho phi_pi phi_y h sigmaC sigmaL veps
            Rss LAMBDAss Pss Lss Qss Iss Kss Yss Css PMss Fss F1ss MUss Wss
            IKss KYss IYss KLss
            % shocks
			rho_S rho_A rho_R;

%----------------------------------------------------------------
% 2. Calibration
%----------------------------------------------------------------
alpha       = 0.3;              % Share of capital in production
beta    	= 0.99;			    % Discount factor savers
gammaf      = 0.8;              % Discount factor intermediary firms
gamma       = 0.779;            % Proba of keeping prices fixed (GK)
gammap      = 0.24;             % Price indexation (GK)        
delta       = 0.025;            % Capital depreciation
rho			= 0.80;				% Monetary policy rule, Smoothing, autocorr parameter
phi_pi		= 1.5;				% Monetary policy rule, Inflation (=1.5)
phi_y		= 0.5;              % Monetary policy rule, GDP (=0.1)
h           = 0.7;              % Consumption habit (=0.7)
sigmaC	    = 1.5;		        % Risk aversion consumption
sigmaL	    = 2;		        % Labor disutility
veps        = 4.2;              % from final firms prices (GK)


% Implied by steady state
LAMBDAss   = 1;
Pss        = 1;
Rss        = 1/beta;
Lss        = 1/3;
Qss        = gammaf * Rss;
Css        = LAMBDAss/((1-h)^(-sigmaC));
IKss       = 0.025;
KYss       = 0.2;              %(=0.149 in GK)
IYss       = IKss/KYss; 
KLss       = KYss^(1/(alpha-1));
Kss        = KLss * Lss;
Yss        = Kss^alpha*Lss^(1-alpha);
Iss        = Yss - Css;
PMss       = (veps-1)/veps;
Fss        = Yss*PMss/(1-beta*gamma);
F1ss       = Yss/(1-beta*gamma);
MUss       = 1;                %(perfect subsitutability => epsilon -> infty)
Wss        = 1/MUss;


% shock processes (autoregressive parameter)
rho_S   = 0.3; 
rho_A   = 0.8;
rho_R 	= 0.4;

%----------------------------------------------------------------
% 3. Model
%----------------------------------------------------------------
model(linear); 
    %% Household
    % Euler equation 
    c = (h/(1+h))*c(-1) + (1/(1+h))*c(+1) - (1-h)/((1+h)*sigmaC)*(r-pi(+1));
    % Labour supply equation 
    w = (sigmaC + sigmaL)*c - sigmaC*h*c(-1);
    
    %%Intermediary firms
    % Intermediary firm production function
    y = alpha*k(-1) + (1-alpha)*l + e_A;
    % Capital accumulation
    k = delta*i + (1-delta)*k(-1);
    % Labour demand 
    w = y - l + p;
	% Capital demand
    q = 1 + r(+1);
    % Investment equation
    q + i = b - r(-1) - b(-1);

    %% Final firms
    % Final firms prices
    Fss*f = Yss*PMss*(y+pm) + beta*gamma*LAMBDAss*Fss*(lambda(1)-gammap*veps*p+veps*p(1)+f(1));
    lambda(1) + r = 0;
    F1ss*f1 = Yss*y + beta*gamma*LAMBDAss*Pss^(gammap-1)*F1ss*(lambda(1)+gammap*(1-veps)*p-(1-veps)*p(1)+f1(1));
    pstar = f - f1 + p;
    p = gamma*gammap*p(-1) + (1-gamma)* pstar + e_S;
    uc = -1/((1-beta*h)*(1-h))*(c-h*c(-1)-beta*h*(c(1)-h*c));
    lambda = uc - uc(-1);

    %% Financial intermediary
    % Bank balance sheet evolution 
    b(-1)- b = d(-1) - d;
    % Bank financial constraint
    b = d;

	% Monetary Policy Rule
	r_n = rho*r_n(-1) +  (1-rho)*( phi_pi*pi + phi_y*y ) + e_R  ;
    % Ressource constraint
    y = Css/Yss * c + Iss/Yss * i;
    % Fisher equation
    r_n = r + pi(+1);
       
	% Supply shock
    e_S = rho_S * e_S(-1) + eta_S;
    % Monetary policy shock
    e_A = rho_A * e_A(-1)+ eta_A;
    % Supply shock
    e_R = rho_R* e_R(-1) + eta_R;
	
	end;

steady;
resid(1);
check;

%----------------------------------------------------------------
% 4. Shocks
%----------------------------------------------------------------
shocks;
var eta_S;  stderr 0.1;
var eta_A;  stderr 0.1;
var eta_R;  stderr 0.1;
end;


stoch_simul (order=1, irf=10);
