% Dynare Code for "Risk Matters: The Real Effects of 
%Volatility Shocks" Fernandez-Villalverde, Guerron-Quintana, Rubio-Ramirez, Uribe 2009.
%By Mario Gonzalez

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

close all;

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

var c d k h i r  x y lambda varphi eps_tb eps_r sigma_tb sigma_r;
predetermined_variables k d;
varexo e_ux  e_utb e_ur e_usigmatb e_usigmar;

parameters p_beta p_omega p_nu p_delta p_phid p_D p_phi p_eta p_alpha p_sigmax p_r p_rhox p_rhotb p_rhor rho_sigmatb p_sigmatb eeta_tb rho_sigmar p_sigmar eeta_r;

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

p_beta	    = 1/(1.02);
p_omega	    = 1.6;
p_nu	    = 5;
p_delta	    = 0.014; 
p_phid	    = 0.001;
p_D	        = 4;
p_phi	    = 95; 
p_eta       = 1000;
p_alpha	    = 0.32;
p_sigmax	= 0.015;
p_r	        = 0.02;
p_rhox	    = 0.95;
p_rhotb	    = 0.95;
p_rhor	    = 0.97;
rho_sigmatb	= 0.94;
p_sigmatb	=-8.05;
eeta_tb	    = 0.13;
rho_sigmar	= 0.94;
p_sigmar	=-5.71;
eeta_r	    = 0.4972;




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

model; 
  y           =  k^p_alpha*(exp(x)*h)^(1-p_alpha);
  c^-p_nu     =  lambda;
  lambda/(1+r)= lambda*p_phid*(d(+1)-p_D)+p_beta*lambda(+1);
  varphi      = p_beta*((1-p_delta)*varphi(+1)+p_alpha*lambda(+1)*y(+1)/k(+1));
  p_omega*h^(p_eta+1)= (1-p_alpha)*y;
  lambda      = varphi*(1-0.5*p_phi*((i-i(-1))/i(-1))^2-p_phi*(i/i(-1))*((i-i(-1))/i(-1)))+p_beta*(varphi(+1)*p_phi*(i(+1)/i)^2*((i(+1)-i)/i));
  k(+1)       = (1-p_delta)*k+(1-0.5*p_phi*(i/i(-1)-1)^2)*i;
  x           = p_rhox*x(-1)+p_sigmax*e_ux;
  y           = c+i+d-d(+1)/(1+r)+0.5*p_phid*(d(+1)-d)^2;
  r           = p_r + eps_tb + eps_r;
  eps_tb      = p_rhotb*eps_tb(-1)+exp(sigma_tb)*e_utb;
  eps_r       = p_rhor*eps_r(-1)+exp(sigma_r)*e_ur;
  sigma_tb    = (1-rho_sigmatb)*p_sigmatb+rho_sigmatb*sigma_tb(-1)+eeta_tb*e_usigmatb;
  sigma_r     = (1-rho_sigmar)*p_sigmar+rho_sigmar*sigma_r(-1)+eeta_r*e_usigmar;
end;


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

initval;
	c           =	2.2	;
	d           =	27	;
	k           =	26.9	;
	h           =	0.99	;
	i           =	0.38	;
	r           =	0.02	;
	x           =	0	;
	y           =	2.8	;
	lambda      =	0.02	;
	varphi      =	0.02	;
	eps_tb      =	0	;
	eps_r       =	0	;
	sigma_tb	=	-8.05	;
	sigma_r     =	-5.71	;
end;

steady(solve_algo = 3);

shocks;
var 	e_ux        =	1;
var 	e_utb       =	1;
var 	e_ur        =	1;
var 	e_usigmatb	=	1;
var 	e_usigmar	=	1;	
end;




stoch_simul(periods=2096, irf=40, order = 3, pruning, nocorr, nomoments  );
































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