//AUTHOR:JUSTAS DAINAUSKAS, UNIVERSITY OF YORK, DEPARTMENT OF ECONOMICS AND RELATED STUDIES
//TITLE OF THE PAPER: Why Do High-Interest Rate Currencies Revalue? Bayesian DSGE Approach
//Typed and annotated by Justas Dainauskas, February 2017
//Dynare 4.3.3
//
//-------------------------------------------------------------------------------------------------
//                      DECLARATION OF ENDOGENOUS VARIABLES
//-------------------------------------------------------------------------------------------------
var
//
@#define countries = [ "US", "UK" ]
@#define nth_co = "US"
@#define nth_co = "UK"
@#for co in countries
y_@{co}                 //(1,27)  aggregate output
c_@{co}                 //(2,28)  aggregate consumption
nx_@{co}                //(3,29)  trade balance
uc_@{co}                //(4,30)  marginal utility of consumption
ul_@{co}                //(5,31)  marginal disutility of labour
um_@{co}                //(6,32)  marginal utility of real money balances
PHI_V_@{co}             //(7,33)  auxiliary preference variable
l_@{co}                 //(8,34)  labour supply
w_@{co}                 //(9,35)  real wage
OMEGA_@{co}             //(10,36)  stock of bonds
d_@{co}                 //(11,37)  firm profit divident
PI_@{co}                //(12,38)  cpi inflation
PIp_@{co}               //(13,39)  ppi inflation (pcp)
R_@{co}                 //(14,40)  nominal interest rate
r_@{co}                 //(15,41)  real interest rate
mc_@{co}                //(16,42)  real marginal costs
PHI_1_@{co}             //(17,43)  auxiliary price setting variable 1
PHI_2_@{co}             //(18,44)  auxiliary price setting variable 2
DELTA_pi_@{co}          //(19,45)  menu costs
dDELTA_pi_@{co}         //(20,46)  slope of the menu costs
XIp_@{co}               //(21,47)  relative pcp prices
XIl_@{co}               //(22,48)  relative lcp prices
m_@{co}                 //(23,49)  real money balances
PSI_@{co}               //(24,50)  stochastic preference element
LAMBDA_@{co}            //(25,51)  stochastic taylor rule element
a_@{co}                 //(26,52)  stochastic total factor productivity
@#endfor
DELTA_m                 //(53)  transaction costs
dDELTA_m                //(54)  slope of transaction costs
m                       //(55)  currency portfolio
e                       //(56)  currency pricing error
s                       //(57)  forward discount/premium
q                       //(58)  real exchange rate
q_dot                   //(59)  gross change in the real exchange rate
;
//
//
//-------------------------------------------------------------------------------------------------
//                        DECLARATION OF IDIOSYNCRATIC SHOCKS
//-------------------------------------------------------------------------------------------------
varexo
//
//
@#for co in countries
u_psi_@{co}             //(1,2) preference shock
u_lambda_@{co}          //(3,4) transitory monetary policy shock
u_a_@{co}               //(5,6) total factor productivity shock
@#endfor
;
//
//
//-------------------------------------------------------------------------------------------------
//                        DECLARATION OF PARAMETERS
//-------------------------------------------------------------------------------------------------
parameters

l_ss                    //(1)   hours of labour in the steady state
q_ss                    //(2)   steady state of the real exchange rate
PI_ss                   //(3)   steady state gross rate of inflation
nu_pi                   //(4)   policy responsiveness to inflation
nu_y                    //(5)   policy responsiveness to output gap
rho_r                   //(6)   persistence of policy rate
tau                     //(7)   transportation costs    
//
beta                    //(8)   time-invariant discount factor
varepsilon              //(9)   elasticity of substitution between varieties within an economy
gamma                   //(10)  average GBP price of the USD
omega                   //(11)  curvature of utility function
varphi                  //(12)  elasticity of labour
chi                     //(13)  strength of consumption habits
eta                     //(14)  elasticity of substitution between varieties of different origins
phi_m                   //(15)  curvature of transaction costs
//
@#for co in countries
phi_pi_@{co}            //(16,17)   curvature of menu costs
pi_@{co}                //(18,19)   size of countries population relative to the rest of the world
mu_@{co}                //(20,21)   local share of imported goods from abroad
rho_psi_@{co}           //(22,23)   persistence of preference shocks
rho_a_@{co}             //(24,25)   persistence of tfp shocks
sigma_psi_@{co}         //(26,27)   standard error of preference shocks
sigma_lambda_@{co}      //(28,29)   standard error of monetary policy shocks
sigma_a_@{co}           //(30,31)   standard error of tfp shocks
@#endfor
;
//
//
//-------------------------------------------------------------------------------------------------
//                          CALIBRATION OF PARAMETERS
//-------------------------------------------------------------------------------------------------
//
l_ss                    =   0.3000;
q_ss                    =   0.6100;
PI_ss                   =   1.0050;
nu_pi                   =   1.5000;
nu_y                    =   0.5000;
rho_r                   =   0.7500;
tau                     =   0.1000;    
//
beta                    =   0.9950;
varepsilon              =   6.0000;
gamma                   =   0.100;
omega                   =   1.5000;
varphi                  =   3.0000;
chi                     =   0.5000;
eta                     =   1.5000;
phi_m                   =   200.000;
//
phi_pi_US               =   20.000;
phi_pi_UK               =   20.000;
pi_US                   =   0.8300;
pi_UK                   =   0.1700;
mu_US                   =   0.1000;
mu_UK                   =   0.2400;
rho_psi_US              =   0.7500;
rho_psi_UK              =   0.7500;
rho_a_US                =   0.6500;
rho_a_UK                =   0.6500;
sigma_psi_US            =   0.0050;
sigma_psi_UK            =   0.0050;
sigma_lambda_US         =   0.0050;
sigma_lambda_UK         =   0.0050;
sigma_a_US              =   0.0050;
sigma_a_UK              =   0.0050;    
//
//-------------------------------------------------------------------------------------------------
//                       NON-LINEAR MODEL EQUATIONS
//-------------------------------------------------------------------------------------------------
model;

/////////////////////////
//model-local variables//
/////////////////////////

#Delta_1=1/(1-mu_UK);                                                                                                   %(--)
#Delta_2=mu_UK*((q_ss/(1-tau))^(1-eta));                                                                                %(--)
#Delta_3=1-mu_US*Delta_1*((q_ss*(1-tau))^(eta-1));                                                                      %(--)
#Delta_4=1-mu_US*(1+Delta_1*Delta_2*((q_ss*(1-tau))^(eta-1)));                                                          %(--)

#XIp_ss_US=(Delta_3/Delta_4)^(1/(1-eta));                                                                               %(--)
#XIp_ss_UK=(Delta_1*(1-Delta_2*(XIp_ss_US^(1-eta))))^(1/(1-eta));                                                       %(--)
#XIl_ss_UK=XIp_ss_UK/(q_ss*(1-tau));                                                                                    %(--)
#XIl_ss_US=(q_ss/(1-tau))*XIp_ss_US;                                                                                    %(--)

@#for co in countries

#w_ss_@{co}=XIp_ss_@{co}*((varepsilon-1)/varepsilon);                                                                   %(--)
#psi_@{co}=(w_ss_@{co}*(1-chi*beta))/(varphi*l_ss^(varphi-1));                                                          %(--)
#R_bar_@{co}=PI_ss/beta;                                                                                                %(--)
#y_bar_@{co}=l_ss;                                                                                                      %(--)
#b_@{co}=(XIp_ss_@{co}-1)*l_ss;                                                                                         %(--)

//goods market clearing
(1-DELTA_pi_@{co})*y_@{co}=c_@{co}+nx_@{co};                                                                            %(1,2)

//household optimisation
c_@{co}+R_@{co}*m_@{co}+(OMEGA_@{co}(+1)/r_@{co})=OMEGA_@{co}+w_@{co}*l_@{co}+d_@{co};                                  %(3,4)
R_@{co}=r_@{co}*PI_@{co}(+1);                                                                                           %(5,6)
PSI_@{co}*uc_@{co}=beta*r_@{co}*PSI_@{co}(+1)*uc_@{co}(+1);                                                             %(7,8)
R_@{co}=um_@{co}/uc_@{co};                                                                                              %(9,10)
w_@{co}=-ul_@{co}/uc_@{co};                                                                                             %(11,12)
uc_@{co}=PHI_V_@{co}-chi*beta*PHI_V_@{co}(+1)*(PSI_@{co}(+1)/PSI_@{co});                                                %(13,14)
ul_@{co}=-psi_@{co}*varphi*PHI_V_@{co}*(l_@{co}^(varphi-1));                                                            %(15,16)
um_@{co}=gamma*PHI_V_@{co}*(m_@{co}^(gamma-1));                                                                         %(17,18)
PHI_V_@{co}=(c_@{co}-chi*c_@{co}(-1)-psi_@{co}*(l_@{co}^varphi)+(m_@{co}^gamma))^(-omega);                              %(19,20)

//production technology
y_@{co}=a_@{co}*l_@{co};                                                                                                %(21,22)
mc_@{co}=w_@{co}/a_@{co};                                                                                               %(23,24)

//price setting
PI_@{co}=(XIp_@{co}(-1)/XIp_@{co})*PIp_@{co};                                                                           %(25,26)
DELTA_pi_@{co}=(phi_pi_@{co}/2)*(((PIp_@{co}/PI_ss)-1)^2);                                                              %(27,28)
dDELTA_pi_@{co}=phi_pi_@{co}*((PIp_@{co}/PI_ss)-1);                                                                     %(29,30)
d_@{co}=((1-DELTA_pi_@{co})*XIp_@{co}-mc_@{co})*y_@{co}-b_@{co};                                                        %(31,32)
XIp_@{co}=PHI_1_@{co}/PHI_2_@{co};                                                                                      %(33,34)
PHI_1_@{co}=(varepsilon/(varepsilon-1))*mc_@{co};                                                                       %(35,36)
PHI_2_@{co}=1-DELTA_pi_@{co}+(dDELTA_pi_@{co}/(varepsilon-1))*PIp_@{co}/PI_ss
             -(y_@{co}(+1)/y_@{co})*(dDELTA_pi_@{co}(+1)/(varepsilon-1))*(PIp_@{co}(+1)/(R_@{co}*PI_ss));               %(37,38)

//monetary policy
R_@{co}/R_bar_@{co}=((R_@{co}(-1)/R_bar_@{co})^(rho_r))*((LAMBDA_@{co}*((PI_@{co}/PI_ss)^nu_pi)*((y_@{co}/y_bar_@{co})^nu_y))^(1-rho_r));%(39,40)

//stochastic shocks
log(PSI_@{co})=rho_psi_@{co}*log(PSI_@{co}(-1))+sigma_psi_@{co}*u_psi_@{co};                                            %(41,42)  
log(a_@{co})=rho_a_@{co}*log(a_@{co}(-1))+sigma_a_@{co}*u_a_@{co};                                                      %(43,44)
LAMBDA_@{co}=exp(sigma_lambda_@{co}*u_lambda_@{co});                                                                    %(45,46)

@#endfor

//currency trade
m=m_UK+q(-1)*m_US;                                                                                                      %(47)
DELTA_m=(phi_m/2)*(((m/m(-1))-1)^2);                                                                                    %(48)
dDELTA_m=phi_m*((m/m(-1))-1);                                                                                           %(49)
q_dot=s*e;                                                                                                              %(50)
q_dot=q_ss/q;                                                                                                           %(51)
(1-DELTA_m-dDELTA_m*(m/m(-1)))*(e-1)+beta*dDELTA_m(+1)*((m(+1)/m)^2)*(e(+1)-1)=0;                                       %(52)
s=r_UK/r_US;                                                                                                            %(53)

//terms of trade
(1-tau)*XIl_US=q*XIp_US;                                                                                                %(54)
XIp_UK=(1-tau)*q*XIl_UK;                                                                                                %(55)
1=(1-mu_UK)*(XIp_UK^(1-eta))+mu_UK*(XIl_US^(1-eta));                                                                    %(56)
1=(1-mu_US)*(XIp_US^(1-eta))+mu_US*(XIl_UK^(1-eta));                                                                    %(57)

//trade balance
nx_US=mu_US*(XIl_US^(-eta))*y_UK-mu_UK*(XIl_UK^(-eta))*y_US;                                                            %(58)    
nx_UK=-nx_US;                                                                                                           %(59)

end;
//
//-------------------------------------------------------------------------------------------------
//                       NON-LINEAR MODEL EQUATIONS
//-------------------------------------------------------------------------------------------------
//
steady_state_model;

r_US=1/beta;                                                                                                            %(1)
r_UK=1/beta;                                                                                                            %(2)

PI_US=PI_ss;                                                                                                            %(3)
PI_UK=PI_ss;                                                                                                            %(4)

PIp_US=PI_ss;                                                                                                           %(5)
PIp_UK=PI_ss;                                                                                                           %(6)

R_US=r_US*PI_US;                                                                                                        %(7)
R_UK=r_UK*PI_UK;                                                                                                        %(8)

s=1;                                                                                                                    %(9)
e=1;                                                                                                                    %(10)
q_dot=1;                                                                                                                %(11)
q=q_ss;                                                                                                                 %(12)

DELTA_m=0;                                                                                                              %(13)
dDELTA_m=0;                                                                                                             %(14)

a_US=1;                                                                                                                 %(15)
a_UK=1;                                                                                                                 %(16)

PSI_US=1;                                                                                                               %(17)
PSI_UK=1;                                                                                                               %(18)

LAMBDA_US=1;                                                                                                            %(19)
LAMBDA_UK=1;                                                                                                            %(20)

DELTA_pi_US=0;                                                                                                          %(21)
DELTA_pi_UK=0;                                                                                                          %(22)

dDELTA_pi_US=0;                                                                                                         %(23)
dDELTA_pi_UK=0;                                                                                                         %(24)

delta_1=1/(1-mu_UK);                                                                                                    %(--)
delta_2=mu_UK*((q_ss/(1-tau))^(1-eta));                                                                                 %(--)
delta_3=1-mu_US*delta_1*((q_ss*(1-tau))^(eta-1));                                                                       %(--)
delta_4=1-mu_US*(1+delta_1*delta_2*((q_ss*(1-tau))^(eta-1)));                                                           %(--)

XIp_US=(delta_3/delta_4)^(1/(1-eta));                                                                                   %(25)
XIp_UK=(delta_1*(1-delta_2*(XIp_US^(1-eta))))^(1/(1-eta));                                                              %(26)
XIl_UK=XIp_UK/(q_ss*(1-tau));                                                                                           %(27)
XIl_US=(q_ss/(1-tau))*XIp_US;                                                                                           %(28)

mc_US=XIp_US*((varepsilon-1)/varepsilon);                                                                               %(29)
mc_UK=XIp_UK*((varepsilon-1)/varepsilon);                                                                               %(30)

PHI_1_US=(varepsilon/(varepsilon-1))*mc_US;                                                                             %(31)
PHI_1_UK=(varepsilon/(varepsilon-1))*mc_UK;                                                                             %(32)

PHI_2_US=1;                                                                                                             %(33)
PHI_2_UK=1;                                                                                                             %(34)

w_US=mc_US;                                                                                                             %(35)
w_UK=mc_UK;                                                                                                             %(36)

l_US=l_ss;                                                                                                              %(37)
l_UK=l_ss;                                                                                                              %(38)

y_US=l_US;                                                                                                              %(39)
y_UK=l_UK;                                                                                                              %(40)

nx_US=mu_US*(XIl_US^(-eta))*y_UK-mu_UK*(XIl_UK^(-eta))*y_US;                                                            %(41)    
nx_UK=-nx_US;                                                                                                           %(42)

c_US=y_US-nx_US;                                                                                                        %(43)
c_UK=y_UK-nx_UK;                                                                                                        %(44)

psi_ss_US=(w_US*(1-chi*beta))/(varphi*(l_US^(varphi-1)));                                                               %(--)
psi_ss_UK=(w_UK*(1-chi*beta))/(varphi*(l_UK^(varphi-1)));                                                               %(--)

m_US=(gamma/(R_US*(1-chi*beta)))^(1/(1-gamma));                                                                         %(45)
m_UK=(gamma/(R_UK*(1-chi*beta)))^(1/(1-gamma));                                                                         %(46)
m=m_UK+q_ss*m_US;                                                                                                       %(47)

PHI_V_US=(c_US*(1-chi)-psi_ss_US*(l_US^varphi)+(m_US^gamma))^(-omega);                                                  %(48)
PHI_V_UK=(c_UK*(1-chi)-psi_ss_UK*(l_UK^varphi)+(m_UK^gamma))^(-omega);                                                  %(49)

ul_US=-psi_ss_US*varphi*PHI_V_US*(l_US^(varphi-1));                                                                     %(50)
ul_UK=-psi_ss_UK*varphi*PHI_V_UK*(l_UK^(varphi-1));                                                                     %(51)

uc_US=PHI_V_US*(1-chi*beta);                                                                                            %(52)
uc_UK=PHI_V_UK*(1-chi*beta);                                                                                            %(53)

um_US=gamma*PHI_V_US*(m_US^(gamma-1));                                                                                  %(54)
um_UK=gamma*PHI_V_UK*(m_UK^(gamma-1));                                                                                  %(55)

d_US=y_US-w_US*l_US;                                                                                                    %(56)
d_UK=y_UK-w_UK*l_UK;                                                                                                    %(57)

OMEGA_US=((R_US*m_US-nx_US)/(1-beta));                                                                                  %(58)
OMEGA_UK=((R_UK*m_UK-nx_UK)/(1-beta));                                                                                  %(59)

end;
steady;
check;
model_diagnostics;
//
//-------------------------------------------------------------------------------------------------
//                          SPECIFICATION OF SHOCKS
//-------------------------------------------------------------------------------------------------
shocks;
//
//
var u_psi_US;      stderr 1;
var u_lambda_US;   stderr 1;
var u_a_US;        stderr 1;
var u_psi_UK;      stderr 1;
var u_lambda_UK;   stderr 1;
var u_a_UK;        stderr 1;
//
//
end;
//
//
stoch_simul(order=1,pruning,irf=12,irf_shocks=(u_lambda_UK),periods=10000,nograph);