%Capital Account Openness and Unemployment 
%2/24/2014

%----------------------------------------------------------------
% 0. Housekeeping
%----------------------------------------------------------------

close all

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

// Endogenous Variables
var c n_T n_N theta_T theta_N p_N d rt z_T z_N w_T w_N u taud;

// Exogenous variable
%var ;

//Shocks
varexo eps_T eps_N;

// Paramters 
parameters beta rho r dp phi b gamma At xi eta tau kappa xit xin psi delta An k1 k2;
%tau2 
%----------------------------------------------------------- ----
% 2. Calibration
%----------------------------------------------------------------

// Parameters
beta = 0.99;
rho = 0.95;
r = (1/beta)-1+0.005;
dp = 0;
phi = 0.000742;
b = 0.3506;
gamma = 0.6;
At = 1;
xi = 0.5;
eta = 0.5;
tau = 0.01;
%tau2 = 0;
kappa = 11.1552;
xit = 0.4617;
xin = 0.6564;
psi = 1;
delta = 0.08;
An = 0.6349;
k1 = 1;
k2 = 101;

external_function(name = nthroot,nargs = 2);



// Analytic Steady State




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

model;
%0=(d-abs(d))*((1-tau2)/(1+rt)-beta*((c/c(+1))*(p_N/p_N(+1))^(1-gamma)))+(d+abs(d))*(((1-tau1)/(1+r))-beta*((c/c(+1))*(p_N/p_N(+1))^(1-gamma)));
(1-taud)/(1+rt) =beta*(c/c(+1))*(p_N/p_N(+1))^(1-gamma);
An*exp(z_N)*n_N = (1-gamma)*(p_N)^(-gamma)*(c+(kappa/(1+psi))*(((theta_T*(1-n_T-n_N))/n_T)^(psi))*theta_T*(1-n_T-n_N)+(kappa/(1+psi))*((theta_N*(1-n_T-n_N)/n_N)^(psi))*theta_N*(1-n_T-n_N));
u = 1-n_T-n_N;
n_T = (1-delta)*n_T(-1)+xit*(1-n_T-n_N)*(theta_T)^(1-xi);
n_N = (1-delta)*n_N(-1)+xin*(1-n_T-n_N)*(theta_N)^(1-xi);
w_T = eta*(((1/p_N)^(1-gamma))*At*exp(z_T)+kappa*theta_T*(theta_T*(1-n_T-n_N)/n_T)^(psi)+kappa*theta_N*(theta_N*(1-n_T-n_N)/n_N)^(psi))+(1-eta)*b;
w_N = eta*(((1/p_N)^(-gamma))*An*exp(z_N)+kappa*theta_T*(theta_T*(1-n_T-n_N)/n_T)^(psi)+kappa*theta_N*(theta_N*(1-n_T-n_N)/n_N)^(psi))+(1-eta)*b;
(kappa/xit)*(theta_T*(1-n_T-n_N)/n_T)^(psi)*theta_T^(xi) = beta*(1-eta)*((c/c(+1))*(At/(p_N(+1))^(1-gamma)*exp(z_T(+1))-b+eta*xin*(theta_N(+1))^(1-xi)*(kappa/xin*(theta_N(+1)*(1-n_T(+1)-n_N(+1))/n_N(+1))^(psi)*theta_N(+1)^(xi))/(1-eta)+(1-delta-eta*xit*(theta_T(+1))^(1-xi))*(kappa/xit*(theta_T(+1)*(1-n_T(+1)-n_N(+1))/n_T(+1))^(psi)*theta_T(+1)^(xi))/(1-eta)));
(kappa/xin)*(theta_N*(1-n_T-n_N)/n_N)^(psi)*theta_N^(xi) = beta*(1-eta)*((c/c(+1))*(1/(p_N(+1))^(-gamma)*An*exp(z_N(+1))-b+eta*xit*(theta_T(+1))^(1-xi)*(kappa/xit*(theta_T(+1)*(1-n_T(+1)-n_N(+1))/n_T(+1))^(psi)*theta_T(+1)^(xi))/(1-eta)+(1-delta-eta*xin*(theta_N(+1))^(1-xi)*(kappa/xin*(theta_N(+1)*(1-n_T(+1)-n_N(+1))/n_N(+1))^(psi)*theta_N(+1)^(xi))/(1-eta))));
d/(1+rt) = gamma/(1-gamma)*An*exp(z_N)*n_N*p_N+d(-1)-At*exp(z_T)*n_T;
rt = r+(exp(phi*(d(-1)/(p_N^(1-gamma))-dp))-1);
z_T= rho*z_T(-1) + eps_T;
z_N= rho*z_N(-1) + eps_N;
%taud = tau*((d(-1)/(p_N^(1-gamma)))^(k1/k2));
taud = tau*(nthroot((d(-1)/(p_N^(1-gamma))),k2));

end;
write_latex_dynamic_model;
write_latex_static_model;
%----------------------------------------------------------------
% 4. Computation
%----------------------------------------------------------------

// Steady State
initval;
c = 0.5418;
%c = 0;
u = 0.08;
%u = 0;
n_T = 0.368;
%n_T = 0;
n_N = 0.552;
%n_N = 0;
w_T = 1.5690;
%w_T = 0;
w_N = 1.2912;
%w_N = 0;
theta_T = 0.6353;
theta_N = 0.7072;
p_N = 0.7;
d = 0.01;
rt =(1/beta)-1+0.005;
z_T = 0;
z_N = 0;
taud = -0.01;

end;


%options_.slowc     =   0.10000;
%options_.maxit_    =     200;
%options_.solve_algo=0;
steady;
check(qz_zero_threshold=1e-40);
resid;


// Setting Variances of Shocks
shocks;
  var eps_T; stderr 0.007;
  var eps_N; stderr 0.007;
  corr eps_T, eps_N = 0;
end;

// Stochastic Simulation
stoch_simul u;