clc;

%**************************************************************************
 
% MODEL
% DEFINITION OF ALL THE VARIABLES
% l labour services
% h real money balances
% v taste shock
% c consumption 
% m real money balances 
% y output/final consumption good
% pi inflation 
% w real wage rate
% z transaction cost technology  
% a productivity shock 
% g government expenditures
% R gross nominal interest rate on government bonds
% phi(func) captures real resource costs of transaction
% beta discount factor
% sigma_tilda coefficient of relative risk aversion
% rho_pi interest rate policy
% n_ch transaction frictions

%**************************************************************************
 
% Endogenous variables:
var r_m r_hat c_hat v_hat m_hat y_hat pi_hat w_hat z_hat a_hat mu_hat g_hat 
    R_hat;

% Exogenous variables:
varexo epsilon e_a e_g e_mu e_v e_z e_rm ;
 
% Parameters:
parameters eta_R R_ss eta_h eta_c s_c kappa phi sigma_r_m sigma_m sigma_a
           sigma_g sigma_mu sigma_v sigma_z rho_a rho_g rho_mu rho_v rho_z 
           beta omega sigma_tilda rho_pi eta_ch sigma_c sigma_h eta_hc 
           alpha lambda_x lambda_R v_p;

%**************************************************************************

%INITIALISATION 

v_p = 6;
beta = 0.99; 
s_c = 0.8;
sigma_tilda = 1;
omega = 3.5;
R_ss = 1.0146; 
eta_ch = 0.3; 
sigma_h = 3.5; 
eta_hc = 2.8;
alpha = 0.3304;
sigma_c = 0.8;
rho_pi = 0.85;
rho_a = 0.5;
rho_g = 0.5;
rho_mu = 0.5;
rho_v = 0.5;
rho_z = 0.5;

eta_h = 0.0284;
eta_c = 0.2649;

sigma_a = 1;
sigma_g = 1; 
sigma_mu = 1; 
sigma_v = 1; 
sigma_z = 1;
sigma_m = 1; 
sigma_r_m = 1;

phi = 0.5;
kappa = ((1-alpha)*(1-alpha*beta))/alpha;
eta_R = R_ss/(sigma_h*(R_ss-1));

lambda_x = ((1-alpha)*(1-alpha*beta))/(sigma_tilda+omega);
lambda_R = (eta_R*lambda_x/(sigma_tilda+omega))*(1/v_p);

%**************************************************************************
%**************************************************************************

% The Model:
model(linear);

    a_hat = rho_a*a_hat(-1) + e_a;
    g_hat = rho_g*g_hat(-1) + e_g;
    mu_hat = rho_mu*mu_hat(-1) + e_mu;
    v_hat = rho_v*v_hat(-1) + e_v;
    z_hat = rho_z*z_hat(-1) + e_z;
    log(r_m) = e_rm;
    
    r_hat = R_hat-pi_hat(+1);
    
    c_hat(+1) = (v_hat(+1)+(eta_ch*(m_hat-pi_hat(+1)+z_hat(+1)))+
        sigma_tilda*c_hat-v_hat-eta_ch*(m_hat(-1)-pi_hat+z_hat)+
        R_hat-pi_hat(+1))*sigma_tilda;
    
    w_hat = omega*(y_hat-a_hat)-v_hat+sigma_tilda*c_hat-eta_ch*(m_hat(-1)-
        pi_hat+z_hat)+mu_hat;
    
    pi_hat = beta*pi_hat(+1)+kappa*(w_hat-a_hat);
    
    y_hat = (0.8+eta_c)*c_hat+g_hat-eta_h*(m_hat(-1)-pi_hat+z_hat); 
        %1-(g/y)-(phi/y)=0.8
    
    m_hat = -eta_R*R_hat+(eta_hc/sigma_h)*c_hat(+1)+pi_hat(+1)+
        ((1-sigma_h)/sigma_h)*z_hat(+1);
    
    %R_hat = rho_pi*pi_hat+epsilon; %(^m)
    
end; 

%**************************************************************************
 
shocks;
var e_a = sigma_a^2;
var e_g = sigma_g^2;
var e_mu = sigma_mu^2;
var e_v = sigma_v^2;
var e_z = sigma_z^2;
var e_rm = sigma_r_m^2;
var epsilon = sigma_m^2;
end;

%**************************************************************************

initval;
a_hat = 0.5;
g_hat = 0.5;
mu_hat = 0.5;
v_hat = 0.5;
z_hat = 0.5;
r_m = 0.5;
end;

%**************************************************************************

planner_objective pi_hat^2 + lambda_x*y_hat^2 + lambda_R*R_hat^2; 

ramsey_policy(planner_discount=0.99);

stoch_simul c_hat y_hat pi_hat m_hat R_hat r_hat;
check;

%**************************************************************************