// Endogenous variables  
var Util Welf consD pD zet cF hD wD hF rstar r lam mc hn mr pn pin m remit an ax am qx hx qf qn bstar tb epsilon pim piD gdp px pimstar erstar;  
 
// Exogenous variables  
//var ; 
 
// Innovations 
varexo epx epimstar erat; 
 
// PARAMETERS 
parameters a BETA nbeta fe XI PSSI ETA THETA OMEGA ALPHAN ALPHAX ALPHAM NU NUW NUP CHI PX PIMSTAR STD_EPX STD_EPIMSTAR STD_ER COV_PXPIM COV_PXR COV_PIMR consD_SS pD_SS zet_SS cF_SS hD_SS wD_SS hF_SS rstar_SS r_SS lam_SS  mc_SS hn_SS mr_SS pn_SS pin_SS m_SS remit_SS an_SS ax_SS am_SS qx_SS hx_SS qf_SS qn_SS bstar_SS tb_SS epsilon_SS pim_SS piD_SS gdp_SS; 

steady;
 
model; 
// Utility 
Util = a*(log(consD) + log(cF)) + CHI*(log(1-hD) + log(1-hF));   
 
// Welfare 
Welf = Util + nbeta*Welf(+1); 
  
// Household's FOCs  
a - lam*consD*pD*(1+NU*zet);
-lam*pD*NUP*cF + a;
-CHI + (1-hD)*lam*wD;
lam*(wD/NUW)*(1-fe) - CHI/(1-hF);
BETA*lam(+1)/(lam*pimstar(+1)) - (1/rstar);
BETA*lam(+1)/(lam*pim(+1)) - (1/r);  
BETA*lam(+1)/(lam*pim(+1)) - (1-zet);  
-wD + OMEGA*mc*hn^(OMEGA-1);  
lam(+1)*qn(+1)*((mr - mc(+1))/((mr/pn) -1)) - XI*lam(+1)*(pin - pin_SS)*pin + XI*BETA*lam(+2)*(pin(+1) - pin_SS)*pin(+1);  
-mr + pn*((ETA-1)/ETA);
-pin + (pn/pn(-1))*pim;  
//-wD + NUW*wF;
//-pF + NUP*pD; 
      
// Firm's FOCs  
ALPHAN*pD*(an^ALPHAN)*(ax^ALPHAX)*(am^ALPHAM) - pn(-1)*an;  
ALPHAX*pD*(an^ALPHAN)*(ax^ALPHAX)*(am^ALPHAM) - px*ax;  
ALPHAM*pD*(an^ALPHAN)*(ax^ALPHAX)*(am^ALPHAM) - am;  
-qf + (an^ALPHAN)*(ax^ALPHAX)*(am^ALPHAM);  
(THETA)*px*(hx^(THETA)) - wD*hx;  
-qx + (hx^(THETA));  
  
// Equilibrium conditions  
-hD + hx + hn;  
qn - an - (1/pn(-1))*(XI/2)*(pin(-1) - pin_SS)^2;  
qf - consD;  
-remit + (wD/NUW)*hF - pD*NUP*cF;  
m - NU*pD*consD;  
-bstar + (rstar(-1))*(bstar(-1))/pimstar + remit + tb;  
-tb + px*(qx - ax) - am;  
-pim + epsilon*pimstar;  
-piD + (pD/pD(-1))*pim;  
-rstar + rstar_SS*((bstar/bstar_SS)^PSSI)*exp(erstar);  
-qn + hn^OMEGA;  
-gdp*pD + pn*qn + px*qx;
 
// Monetary Policy Rule
piD = piD_SS;
 
// Shocks 
log(px/PX) = 0.6958*log(px(-1)/PX) + (-0.5166)*log(px(-2)/PX) + epx;
log(pimstar/PIMSTAR) =  (-1.1784)*log(pimstar(-1)/PIMSTAR) + (-0.1630)*log(pimstar(-2)/PIMSTAR) + epimstar; 
log(erstar) = 1.2500*log(erstar(-1)) + (-0.2684)*log(erstar(-2)) + erat; 
 
end; 
 
shocks; 
var epx; stderr STD_EPX; 
var epimstar; stderr STD_EPIMSTAR; 
var erat; stderr STD_ER; 
//var epx, epimstar = COV_PXPIM; 
//var epx, erat = COV_PXR; 
//var epimstar, erat = COV_PIMR; 
end; 
 
initval; 
consD = consD_SS; 
pD = pD_SS; 
zet = zet_SS; 
cF = cF_SS; 
hD = hD_SS; 
wD = wD_SS; 
hF = hF_SS; 
rstar = rstar_SS; 
r = r_SS; 
lam = lam_SS; 
mc = mc_SS; 
hn = hn_SS; 
mr = mr_SS; 
pn = pn_SS; 
pin = pin_SS; 
m = m_SS; 
remit = remit_SS; 
an = an_SS; 
ax = ax_SS; 
am = am_SS; 
qx = qx_SS; 
hx = hx_SS; 
qf = qf_SS; 
qn = qn_SS; 
bstar = bstar_SS; 
tb = tb_SS; 
epsilon = epsilon_SS; 
pim = pim_SS; 
piD = piD_SS; 
gdp = gdp_SS;
end; 

steady; 
check;
stoch_simul(irf=40) Welf r consD hD; 
