% Open-economy New Keynesian model by Nimark (2009), parameters calibrated to posterior mode (instead of foreign economy- foreign variables modelled as AR(2) instead of full VAR)

pkg load io;
pkg load struct;
pkg load optim;


%----------------------------------------------------------------
% 0. Housekeeping (close all graphic windows)
%----------------------------------------------------------------

close all;

%----------------------------------------------------------------
% 1. Defining variables
%----------------------------------------------------------------
var c,i,c_m,c_d,x,tau,s_C,s_M,s_X,y_for,pi_for,i_for,tau_1,y,a,n,s_PI,pi_d,pi_m,pi,s_RP,b,s_PX,mc_d,mc_m,s_I,wp,ds;
varexo e_a,e_RP,e_C,e_PI,e_PX,e_X,e_M,e_I,e_y_for,e_pi_for,e_i_for;
%c-consumption
%i-nominal interest rate
%c_m-imports
%c_d-domestic consumption
%tau-relative price of imported goods (in terms of total CPI)
%s_C-consumption demand shock (preference)
%s_M-import demand shock (preference)
%s_X-export demand shock
%y_for-foreign output
%tau_1- P(d)/P_for - ratio of home-produced goods price index to the foreign price index (log deviation from steady state)
%ds- nominal exchange rate depreciation rate
%y-domestic output
%a-productivity shock
%n-labour supply
%s_PI-cost push shock common for foreign and domestic sector
%pi_d-inflation of home-produced goods
%pi_m-inflation of imported goods
%pi-total CPI inflation
%s_RP-risk premium shock
%b-foreign bonds holdings by domestic households
%s_PX- export income shock (see p.28)
%wp-real wage
%mc_d-real domestic marginal cost of domestic producers
%mc_m-real marginal cost of impoorter
%s_I-monetary policy shock
%----------------------------------------------------------------
% 2. Calibration
%----------------------------------------------------------------
parameters beta, gamma,ni, phi, omega, delta, delta_x, theta, theta_m, psi, phi_i, phi_pi, phi_y, rho_a, rho_rp, rho_px, rho_x, rho_m,alpha, rho_i_for_1,rho_i_for_2, rho_pi_for_1,rho_pi_for_2,rho_y_for_1,rho_y_for_2,mi_df,mi_db,mi_mf,mi_mb,lambda_d,lambda_m;
beta=0.99;%Discount factor
gamma=2.97;%Inverse of intertemporal elasticity of substitution
ni=1.48;% Habit persistence parameter
phi=1.35;% Inverse of labour supply elasticity
omega=0.24;%Fraction of firms able to change prices that index their prices by lagged inflation
delta=0.86;%Elasticity between home and foreign goods
delta_x=0.15;% Price elasticicy of export demand
theta=0.89;% Calvo price setting (domestic producers)
theta_m=0.9;% Calvo price setting (importers)
psi=0.07;% Net debtor cost coefficient (risk premium elasticity with respect to holdings of foreign bonds)
phi_i=0.87;%Taylor rule-interest rate smoothing parameters
phi_pi=0.41/(1-0.87); % Taylor rule coefficient for inflation
phi_y=0.02/(1-0.87); % Taylor rule coefficient by output
rho_a=0.71;% Persistence of productivity shock
rho_rp=0.81; % Persistence of risk-premium shock
rho_px=0.81; % Persistence of export income shock
rho_x=0.9; % Persistence of export demand shock
rho_m=0.8; % Persistence of import demand shock
alpha=0.18; % Import share in consumption
%Coefficients in foreign variables processes
rho_i_for_1=0.9;
rho_i_for_2=0;
rho_y_for_1=0.9;
rho_y_for_2=0;
rho_pi_for_1=0.9;
rho_pi_for_2=0;
%%%%
%Philips cuves parameters
mi_df=((beta*theta)/(theta+omega*(1-theta*(1-beta))));
mi_mf=((beta*theta_m)/(theta_m+omega*(1-theta_m*(1-beta))));
mi_db=(omega/(theta+omega*(1-theta*(1-beta))));
mi_mb=(omega/(theta_m+omega*(1-theta_m*(1-beta))));
lambda_d=((1-omega)*(1-theta)*(1-beta*theta))/(theta+omega*(1-theta*(1-beta)));
lambda_m=((1-omega)*(1-theta_m)*(1-beta*theta_m))/(theta_m+omega*(1-theta_m*(1-beta)));
%----------------------------------------------------------------
% 3. Model
%----------------------------------------------------------------

model(linear); 
c=(gamma/(gamma-ni+gamma*ni))*c(+1)-((ni*(1-gamma))/(gamma-ni+gamma*ni))*c(-1)-(1/(gamma-ni+gamma*ni))*(i-pi(+1))+s_C; % Consumption Euler equation A1 (fixed A1 from Working Paper correct version)
c_m=c-delta*tau+s_M;%Import demand A2
c_d=c+delta*tau;%Domestic consumption demand A3
tau-tau(-1)=pi_m-pi; %Relative price of imported goods for the domestic consumer A4
x=-delta_x*tau_1+y_for+s_X; %Export demand A5
tau_1-tau_1(-1)=pi-pi_for-ds;%Relative price of goods produced domestically sold to the world A6
y=(1-alpha)*c_d+alpha*x; %Domestic output- resource constraint A7
y=n+a; % Total production A8
pi_d=mi_df*pi_d(+1)+mi_db*pi_d(-1)+lambda_d*mc_d+s_PI;%Inflation of home produced goods A10
pi_m=mi_mf*pi_m(+1)+mi_mb*pi_m(-1)+lambda_m*mc_m+s_PI;%Inflation of imported goods A11
pi=(1-alpha)*pi_d+alpha*pi_m; %Total CPI inflation A12
i-i_for=ds(+1)-psi*b+s_RP; % Uncovered interest rate parity condition A13
b-b(-1)=x(-1)-c_m(-1)+ds(-1)+s_PX(-1);%Flow budget constraint A14
wp-gamma*(c-ni*c(-1))=phi*n; %Labour supply decision A15
mc_d=gamma*(c-ni*c(-1))+phi*n-a; % Real domestic marginal cost A17
%mc_d=wp-a; % Real domestic marginal cost A17-alternative version)
mc_m-mc_m(-1)=ds+pi_for-pi; % Real marginal cost of imported goods A20
i=phi_i*i(-1)+(1-phi_i)*(phi_pi*pi(-1)+phi_y*y(-1))+s_I; % Backward-looking Taylor rule customized A21
%Foreign economy AR(2)-for simplicity
y_for=rho_y_for_1*y_for(-1)+rho_y_for_2*y_for(-2)+e_y_for;
pi_for=rho_pi_for_1*pi_for(-1)+rho_pi_for_2*pi_for(-2)+e_pi_for;
i_for=rho_i_for_1*i_for(-1)+rho_i_for_2*i_for(-2)+e_i_for;
%Shock processes
a=rho_a*a(-1)+e_a; % Productivity shock A9
s_C=e_C; %Consumption (preference shock)
s_M=rho_m*s_M(-1)+e_M; % Import demand shock eq.10
s_RP=rho_rp*s_RP(-1)+e_RP; % Risk premium shock eq.16
s_X=rho_x*s_X(-1)+e_X;%Export demand shock eq.26
s_PX=rho_px*s_PX(-1)+e_PX; % Export income shock eq.29
s_PI=e_PI; 
s_I=e_I;

end;

%----------------------------------------------------------------
% 4. Computation
%----------------------------------------------------------------
shocks;
var e_a;stderr 9.13e-5;
var e_RP;stderr 2.02e-3;
var e_C; stderr 1.79e-5;
var e_PI; stderr 1.79e-5;
var e_PX; stderr 6.82e-5;
var e_X; stderr 4.98e-5;
var e_M; stderr 2.12e-5;
var e_I; stderr 7.58e-7;
var e_y_for; stderr 3e-5;
var e_pi_for;stderr 3e-5;
var e_i_for;stderr 3e-5;
end;
steady;
check;
model_diagnostics;
%stoch_simul(irf=1000,periods=0);
stoch_simul(irf=100,periods=0)tau_1 ;
%stoch_simul(irf=20,periods=0) y pi i ds c c_m x tau pi_d;
%----------------------------------------------------------------
% 5. Estimation
%----------------------------------------------------------------





