/*
Replicação de "A macroeconomic model of Equities and Real, Nominal, and defaultable Debit" Eric Swanson
versão simples sem as equações de equity e debt.

EZ = Epstein–Zin preferences
persistente = TECNOLOGIA ESTACIONÁRIA COM RHO PRÓXIMO DE 1.

VERSÃO PARA O DYNARE
Lembrar de add o dynare
addpath c:\dynare\4.4.3\matlab
*/

var r C pstar zn zd pi mu Lab wreal Y Delta i Ybar A
V Vtwist;

varexo exo_epsilon;

parameters eta xi beta alpha varepsilon theta ksi phi_pi phi_y rho_a rho_ybar Kbar pibar sigmaa

Vss Vtwistss
rss Css pstarss znss zdss piss muss Labss wrealss
Yss Deltass iss Ass
;

xi = 2;
eta = .545;
beta =.99;
varepsilon = 10; 
theta =.6;
ksi = .75;
phi_pi = .5;
phi_y = .75;
rho_a = 0.8;   // rho_a = 1
rho_ybar = .9;
sigmaa = .007;
pibar = .01;

/*
Agora colocar os steady states
*/

Deltass = 1;
pstarss = 1;
Ass = 1;
Yss = 10^((1-theta)/theta);
Kbar = 10*Yss;  
piss = pibar;
rss = log(1/beta);
iss = piss + log(1/beta);
Labss = 1;
Css = Yss;
Vss = (log(Css)-(eta*(Labss)^(1+xi)/(1+xi)))*(1-beta)^(-1);
Vtwistss = Vss;
//Vtwistss = 1;
//Vess = Vss^(1-alpha);   // se usar esse valor teremos Vess = Inf
muss = (varepsilon - 1)/varepsilon;
znss = muss*Yss/(1-beta*ksi);
zdss = Yss/(1-beta*ksi);
wrealss = eta*Labss^xi*Yss;

RRA = 60;
alpha = (RRA - 1/(1 + eta/xi))*(log(Css) - eta/(1+xi));
//alpha = 0;  // Caso de Utilidade Esperada!!!!

model;
// Função Valor:
V = log(C) - eta*(Lab^(1+xi))/(1+xi) + beta*Vtwist;
Vtwist^(1/(1-alpha)) = (V(+1))^(1-alpha);  // colocar Vss????

// Risk-free rate and Euler equations:
exp(-r) = beta*(C(+1)/C)^(-1)*(V(+1)/(Vtwist^(1/(1-alpha))))^(-alpha);
C^(-1) = beta*exp(i-pi(+1))*C(+1)^(-1)*(V(+1)/(Vtwist^(1/(1-alpha))))^(-alpha);

// Optimal price setting by firms:
pstar^(1+varepsilon*(1-theta)/theta) = varepsilon/(varepsilon - 1)*zn/zd;
zn = mu*Y + beta*ksi*(C(+1)/C)^(-1)*(V(+1)/(Vtwist^(1/(1-alpha))))^(-alpha)*exp(pi(+1)-pibar)^(varepsilon/theta)*zn(+1); 
zd = Y + beta*ksi*(C(+1)/C)^(-1)*(V(+1)/(Vtwist^(1/(1-alpha))))^(-alpha)*exp(pi(+1)-pibar)^(varepsilon-1)*zd(+1);
(exp(pi - pibar))^(1-varepsilon) = (1-ksi)*(pstar*exp(pi - pibar))^(1-varepsilon) + ksi;

// Marginal cost and real wage:
mu = wreal*Y^((1-theta)/theta)/(theta*A*(1/theta)*Kbar^((1-theta)/theta));    
//mu = wreal*Delta*(A*Kbar^(1-theta)*Lab^(theta-1));   // Meu calculo para o custo marginal;
wreal = eta*Lab^xi*C;

// Production and resource constraint:
Y = A*Kbar^(1-theta)*Lab^(theta)/Delta;
Delta^(1/theta) = (1-ksi)*(pstar)^(-varepsilon/theta) + ksi*(exp(pi - pibar))^(varepsilon/theta)*Delta(-1)^(1/theta);
Y = C;

// Monetary policy rule:
i = log(1/beta) + pi + phi_pi*(pi - pibar) + (phi_y/4)*log(Y/Ybar);
log(Ybar) = rho_ybar*log(Ybar(-1)) + (1 - rho_ybar)*log(Y);   

// Thechnology shock:
log(A) = rho_a*log(A(-1)) + sigmaa*exo_epsilon;

end;

initval;   // steady_state_model ou initval;
V = Vss;
Vtwist = Vss;
r = rss;
C = Css;
pstar = pstarss;
zn = znss;
zd = zdss;
pi = piss;
mu = muss;
Lab =Labss;
wreal =wrealss;
Y = Yss;
Delta = Deltass;
i = iss;
Ybar = Yss;
A = Ass;
end;
steady;

shocks;
var exo_epsilon;
stderr sigmaa;
end;

stoch_simul(order=1, irf=40);






