%%Dynare Code that replicates the VAR IRFs I generated in my JMP

%%Key components for floating countries are:
%1. Reliance on capital flows/FDI
%2. External debt both gross and maybe more importantly currency denomination.

%%Key components for fixed countries are:
%1. Do they use capital controls or interest rates to defend the peg. (High CC = CC used on peg)
%2. How successful has aid for trade foreign policy been. (Has aid been falling) 

%%No model out there has all these components.

%%Use Demirel's model since it's focus is on external debt levels and financial integration, which
%other than aid discusses the other three issues.

// ENDOGENOUS VARIABLES (both control and state) (20)

var c f eps p_h r p q i k l y_m n k_m x y_h r_star w s y_r f_eu;
//f_eu
//f_us
//c_star_h

// EXOGENOUS VARIABLES (shocks)

varexo r_star_shock;

//PARAMETERS

parameters 

//Regular ones
beta delta sigma alpha f_ss gamma a_bar omega rho phi theta eta mu delta_pi delta_f delta_k kappa pi_ss r_ss r_star_ss sigma_star dev c_star

//Steady state values
c_ss eps_ss p_h_ss p_ss q_ss i_ss k_ss l_ss y_m_ss n_ss k_m_ss x_ss
y_h_ss c_star_h_ss w_ss s_ss y_r_ss f_eu_ss;
//f_us_ss
//f_eu_ss

//PARAMETER VALUES (set some, solve for others is the eventual plan.  First just see if I can get using made up)

//Exogenous
beta = 0.872;
delta = 0.025;
sigma = 11;
alpha = 0.234;
//f_ss = -2.040;
gamma = 0.41;
a_bar = 1;
omega = 20;  
rho = 60;
phi = 0.933;
theta = 84.04;
eta = 0.904;
mu = 1.218;
delta_pi = 1.207;
delta_f = 0.643;
delta_k = -0.0365;
kappa = 0.682;
pi_ss = 1.06;
sigma_star = 13;
dev = 0.318;
c_star = 1.128;
z = 1-0.761;

//Endog to make it easier
y_h_ss = 4.771;
p_h_ss = 1.098;
c_star_h_ss = 1.061;

//Solved parameters
r_ss = 1/beta;
r_star_ss = 1/beta;
y_r_ss = y_h_ss/a_bar;
y_m_ss = y_r_ss;
s_ss = (c_star_h_ss/c_star)^(1/sigma_star);
x_ss = p_h_ss*((theta*(1-pi_ss)*(1-beta))/(sigma*y_h_ss)+(sigma-1)/sigma);
eps_ss = s_ss*p_h_ss;
p_ss = eps_ss^alpha*p_h_ss^(1-alpha);
q_ss = p_ss*(1-beta*(1-delta))/beta;
k_m_ss = y_m_ss*((q_ss/(x_ss*(1-gamma)))*(1+mu*((r_ss-1)/r_ss)))^(-1);
n_ss = k_m_ss*((q_ss/(x_ss*(1-gamma)))*(1+mu*((r_ss-1)/r_ss)))^(1/gamma);
k_ss = k_m_ss;
l_ss = n_ss;
i_ss = delta*k_ss;
c_ss = (y_h_ss-theta/2*(1-pi_ss)^2-c_star_h_ss)/((1-alpha)*s_ss^alpha)-i_ss;
f_ss = (s_ss^-alpha*c_star_h_ss-alpha*(c_ss+i_ss))/(s_ss^(1-alpha)*(1-r_star_ss));
w_ss = (p_ss*l_ss^dev)/(c_ss*(1-eta))^-kappa;
f_eu_ss = 0.19*f_ss;

//For float US --> f_us_ss = 0.45*f_ss;
//For float EU --> f_eu_ss = 0.19*f_ss;

//MODEL EQUATIONS (20)

model;

//1-4 HH First Order Conditions

(exp(c)-eta*exp(c(-1)))^-kappa*(1+omega*(f-f_ss)) = beta*(r_star*((exp(s(+1)))/(exp(s)))^(1-alpha)*(exp(c(+1))-eta*exp(c))^-kappa) ;
(exp(c)-eta*exp(c(-1)))^-kappa = beta*(r*(exp(p)/exp(p(+1)))*(exp(c(+1))-eta*exp(c))^-kappa);
(exp(c)-eta*exp(c(-1)))^-kappa*(1+(rho/2)*(exp(i)/exp(k(-1))-delta)^2+rho*(exp(i)/exp(k(-1))-delta)*(exp(i)/exp(k(-1)))) = beta*((exp(q(+1))/exp(p(+1)))+rho*(exp(i(+1))/exp(k)-delta)*(exp(i(+1))/exp(k))^2+(1-delta)*((1+(rho/2)*(exp(i(+1))/exp(k)-delta)^2+rho*(exp(i(+1))/exp(k)-delta)*(exp(i(+1))/exp(k)))))*(exp(c(+1))-eta*exp(c))^-kappa;
exp(l)^dev/(exp(c)-eta*exp(c(-1)))^-kappa = exp(w)/exp(p);

//5 MFG Production Technology

exp(y_m) = exp(n)^gamma*(exp(k_m(-1)))^(1-gamma);


//6-7 Manufacturing First Order Conditions
exp(x)*((1-gamma)*(exp(n)/exp(k(-1)))^gamma)= exp(q)*(1+mu*((r-1)/r));
//exp(x)*((gamma)*(exp(k)(-1)/exp(n))^(1-gamma))=exp(w)*(1+mu*((exp(r)-1)/exp(r)));

//8 Retailer production technology
exp(y_h) = a_bar*exp(y_r);

//9 Retailer FOC
theta*((exp(p_h)/exp(p_h(-1)))*((exp(p_h)/exp(p_h(-1)))-pi_ss))-sigma*exp(y_h)*(exp(x)/exp(p_h)-(sigma-1)/sigma) = beta*theta*(((exp(c(+1))-eta*exp(c))^-kappa)/((exp(c)-eta*exp(c(-1)))^-kappa)*((exp(s))/(exp(s(+1))))^(alpha)*((exp(p_h(+1))/exp(p_h))*((exp(p_h(+1))/exp(p_h))-pi_ss)));

//10 Taylor Rule
r = r_ss*(exp(p_h)/exp(p_h(-1)))^(delta_pi)*((f_eu/exp(y_h))/(f_eu(-1)/exp(y_h(-1))))^delta_f*((exp(k)/exp(y_h))/(exp(k(-1))/exp(y_h(-1))))^delta_k;

//r = r_ss*(p_h/p_h(-1))^(delta_pi)*((f/y_h)/(f(-1)/y_h(-1)))^delta_f*((k/y_h)/(k(-1)/y_h(-1)))^delta_k;
//US --> r = r_ss*(p_h/p_h(-1))^(delta_pi)*((f_us/y_h)/(f_us(-1)/y_h(-1)))^delta_f*((k/y_h)/(k(-1)/y_h(-1)))^delta_k;
//EU --> r = r_ss*(p_h/p_h(-1))^(delta_pi)*((f_eu/y_h)/(f_eu(-1)/y_h(-1)))^delta_f*((k/y_h)/(k(-1)/y_h(-1)))^delta_k;

//11 AR(1) process for US TB
r_star = (1-phi)*r_star_ss+phi*r_star(-1)+r_star_shock;

//12-15 Market Clearing Equilibrium Conditions
exp(y_h)-theta/2*(exp(p_h)/exp(p_h(-1))-pi_ss)^2 = (1-alpha)*(exp(s))^(alpha)*(exp(c)+exp(i)+rho/2*(exp(i)/exp(k(-1))-delta)^2*exp(i))+c_star_h_ss;
exp(y_m) = exp(y_r);  
exp(k) = exp(k_m);
exp(l) = exp(n);

//16 Combined Budget Constratint
alpha*(exp(c)+exp(i)+rho/2*(exp(i)/exp(k(-1))-delta)^2*exp(i))+((exp(s)))^(1-alpha)*((f)+(omega/2)*(f-f_ss)^2-(r_star(-1))*f(-1)) = (exp(s))^(-alpha)*c_star_h_ss;

//Additional equations from Demirel I need to match the variables

//17  Capital Flow Equation
exp(k) = (1-delta)*exp(k(-1))+exp(i);

//18 Price Level Equation
exp(p) = exp(eps)^alpha*exp(p_h)^(1-alpha);

//19 Definition for real XR
exp(s) = exp(eps)/exp(p_h);

//20 Foreign Consumption
c_star_h_ss = exp(s)^sigma_star*c_star;

//21 Float - Amount of debt in certain currency
//f_us = 0.45*f;
f_eu = 0.19*f;

end;

//STEADY STATE

steady;
check;
resid;   

//SHOCKS.  Set up to have approximately mean zero and variance 1.

shocks;
var r_star_shock;   stderr  0.011471; 
//0.9859
//0.0046
end;

//STEADY-STATE MODEL (call up to where you set the parameter values to SS)

steady_state_model;
c=log(c_ss); f=f_ss; eps = log(eps_ss); p_h=log(p_h_ss); r=r_ss; p=log(p_ss);
q=log(q_ss); i=log(i_ss); k=log(k_ss); l=log(l_ss); y_m=log(y_m_ss); n=log(n_ss); k_m=log(k_m_ss); x=log(x_ss);
y_h=log(y_h_ss); r_star=r_star_ss; w = log(w_ss); 
s = log(s_ss); y_r=log(y_r_ss); f_eu = f_eu_ss;
//f_us = log(f_us_ss); f_eu = log(f_eu_ss); c_star_h=log(c_star_h_ss);
end;

//RUN THE PROGRAM

stoch_simul(order=1, periods = 2100, irf = 15) y_m r p_h eps r_star;
// r_star r y_h 
//Model diagnostics code is always: model_diagnostics(M_,options_,oo_)

