%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% 
%%%            Choques petroleros y política monetaria          %%%           
%%%    Análisis de un modelo DSGE para la economía colombiana   %%%
%%%                    Gonzalo Jiménez Murcia                   %%%
%%%                   Universidad de los Andes                  %%%
%%%                        Marzo de 2016                        %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%   Monetary policy implications for an oil-exporting economy of lower long-run international oil prices   %%%  
%%%                                Franz Hamann, Jesús Bejarano, Diego Rodríguez                             %%%
%%%                                       Borradores de Economía núm. 871                                    %%%
%%%                                                      2015                                                %%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
%%% Primera parte - Preámbulo (variables endógenas, variables exógenas y parámetros)
 
var tb, q, b_ast, R_ast, p_T, y_T, p_x, x, x_IN, c_T, y_N, A, h, lambda, R, c, R_f, s, w, tb_share, y, ca_share, 
c_N, p_T_ast, p_N_sim, num, den, fi, p_N, beta_var, PI_N, PI, I, z_I, p_x_ast, d, x_OUT;
 
varexo e_A, e_p_T_ast, e_R_f, e_z_I, e_d, e_y_T, e_p_x_ast;
 
parameters alfa, beta, omega, sigma, psi, par_q, ro_A, par_A, gama, ro_p_T_ast, par_p_T_ast, ro_R_f, par_R_f, 
teta, epsilon, par_PI, fi_PI, ro_z_I, par_z_I, kappa, ro_d, par_d, ro_d_p_x, ro, par_y_T, ro_p_x_ast, par_p_x_ast;
 
alfa = 0.7;
beta = 0.7;
omega = 1.6085;
sigma = 4;
psi = 0.0544;
par_q = 1.47035154; 
ro_A = 0.5;
par_A = 0.1;
gama = 0.3;
ro_p_T_ast = 0.9889;
par_p_T_ast = 0.8;
ro_R_f = 0.5;
par_R_f = 1 / beta;   % Tasa de interés trimestral bruta
teta = 3.3571;
epsilon = 0.554;
par_PI = (1.030)^0.25;
fi_PI = 0.5;
ro_z_I = 0.5;
par_z_I = 0;
kappa = 3.7889;
ro_d = 0.5;
par_d = 0.2113;
ro_d_p_x = 0.2023;
ro = 0.5;
par_y_T = 1.3389;
ro_p_x_ast = 0.5;
par_p_x_ast = 1.6896;
 
 
%%% Segunda parte - Descripción del modelo

model;
tb + (q * b_ast) = R_ast(-1) * q * b_ast(-1);
tb = (p_T * y_T) + (p_x * x) - (p_x * x_IN) - (p_T * c_T);
y_N = A * (h^alfa) * (x_IN^(1-alfa));
lambda = beta * R * lambda(+1);
lambda = (c - ((h^omega) / omega))^(-sigma);
R_ast = R_f + (psi * (exp(((q * b_ast) / (p_x * s)) - par_q) - 1));
w * lambda = ((c - ((h^omega) / omega))^-sigma) * h^(omega-1);
A = (ro_A * A(-1)) + ((1 - ro_A) * par_A) + e_A;
tb_share = tb / y;
ca_share = tb_share - ((R_ast * b_ast) / y);
c_T = ((1-gama) * c) / p_T;
y_N = c_N;
p_T = q * p_T_ast;
p_T_ast = (ro_p_T_ast * p_T_ast(-1)) + ((1 - ro_p_T_ast) * par_p_T_ast) + e_p_T_ast;
q = (q(+1) * R_ast) / R;
R_f = (ro_R_f * R_f(-1)) + ((1 - ro_R_f) * par_R_f) + e_R_f;
p_N_sim = num / den;
num = ((teta * lambda * fi * y_N) / p_N) + (epsilon * beta_var(+1) * num(+1) * (PI_N(+1))^teta);
den = ((teta-1) * lambda * y_N) + (epsilon * beta_var(+1) * den(+1) * (PI_N(+1))^(teta-1));
fi = A^-1 * alfa^-alfa * ((1 - alfa)^(alfa-1)) * w^alfa * (p_x)^(1-alfa);
1 = epsilon * ((1 / PI_N)^(1-teta)) + ((1-epsilon) * p_N_sim^(1-teta));
p_N / p_N(-1) = PI_N / PI;
y = (p_N * y_N) + (p_T * y_T) + (p_x * x);
I = (par_PI * R_ast) + (fi_PI * (PI - par_PI)) + z_I;
1 = (gama^(-gama)) * ((1-gama)^(gama-1)) * (p_N^gama) * (p_T^(1-gama));
z_I = (ro_z_I * z_I(-1)) + ((1 - ro_z_I) * par_z_I) + e_z_I;
R = I / PI(+1);
c_N = (gama * c) / p_N;
beta_var = 1 / R_f;
p_x_ast = ((2 * kappa * x) / (1 + s(-1))) - (beta_var * (((2 * kappa * x(+1)) / (1 + s)) - p_x_ast(+1) - (kappa * (x(+1) / (1 + s))^2)));
s = s(-1) - x + d;
d = (ro_d * d(-1)) + ((1 - ro_d) * par_d) + (ro_d_p_x * p_x) + e_d;
y_T = (ro * y_T(-1)) + ((1 - ro) * par_y_T) + e_y_T;
p_x_ast = (ro_p_x_ast * p_x_ast(-1)) + ((1 - ro_p_x_ast) * par_p_x_ast) + e_p_x_ast;
p_x = q * p_x_ast;
x = x_IN + x_OUT;
p_x = fi * (1-alfa) * ((x_IN / h)^-alfa);
end;
 
 
%%% Tercera parte - Valores iniciales (estado estacionario)

initval;

h = 0.5;
c = 0.1;
q = 0.73444;
s = 0.00003;
%%%x_OUT = 0.5;

R = 1 / beta;
A = par_A;
p_T_ast = par_p_T_ast;
R_ast = R;
R_f = par_R_f;
R_ast = R_f;
z_I = par_z_I;
I = (par_PI * R_ast) + z_I;
PI = I / R;
PI_N = PI;
beta_var = 1 / R_f;
y_T = par_y_T;
p_x_ast = par_p_x_ast;

w = h^(omega-1);
lambda = (c - ((h^omega) / omega))^(-sigma);
p_T = q * p_T_ast;
p_x = p_x_ast * q;
c_T = ((1-gama) * c) / p_T;
fi = ((w^alfa)*(p_x^(1-alfa))) / (A * (alfa^alfa) * ((1-alfa)^(1-alfa)));
p_N = (((gama^gama) * ((1-gama)^(1-gama))) / (p_T^(1-gama)))^(1/gama);
d = par_d + ((ro_d_p_x * p_x) / (1 - ro_d));
c_N = (gama * c) / p_N;
x = d;
y_N = c_N;
x_IN = (y_N / (A * (h^alfa)))^(1/(1-alfa));
num = (teta * lambda * fi * y_N) / (p_N * (1 - (epsilon * beta_var * (PI_N)^teta)));
den = ((teta-1) * lambda * y_N) / (1 - (epsilon * beta_var * (PI_N)^(teta-1)));
y = (p_N * y_N) + (p_T * y_T) + (p_x * x);
tb = (p_T * y_T) + (p_x * x) - (p_x * x_IN) - (p_T * c_T);
x_OUT = x - x_IN;
p_N_sim = num / den;
b_ast = tb / (q * (R_ast - 1));
tb_share = tb / y;
ca_share = tb_share - ((R_ast * b_ast) / y);

%21. 1 = epsilon * ((1 / PI_N)^(1-teta)) + ((1-epsilon) * p_N_sim^(1-teta));
%30. p_x_ast = ((2 * kappa * x) / (1 + s)) - (beta_var * (((2 * kappa * x) / (1 + s)) - p_x_ast - (kappa * (x / (1 + s))^2)));
%%%36. x_OUT = x - x_IN;
%37. p_x = fi * (1 - alfa) * ((x_IN / h)^-alfa);

end;
resid;
return;
steady;
return;
 
 
%%% Cuarta parte - Choques

shocks;
var e_A; stderr 0.009;
var e_p_T_ast; stderr 0.009;
var e_R_f; stderr 0.009;
var e_z_I; stderr 0.009;
var e_d; stderr 0.009;
var e_y_T; stderr 0.009;
var e_p_x_ast; stderr 0.009;
end;
 

%%% Quinta parte - Computación del modelo

stoch_simul;