%-------------------------------
% 1.Variables 
%-------------------------------
var n_o c_o s md q c_r n_r k_opt c n i b b_star y p_oil d r_oil x_o i_oil
chi_oil y_oil y_no z_p w_p p_ext da phir rer pi mc g tau_no tau_oil tr x
c_ext im y_ext mo b_gstr b_g b_optstr b_opt i_pub k_pub a nun taun tauc
nuc tauk r inom inom_star i_opt k p;


%-------------------------------
% 2. Exogenous variables
%-------------------------------
varexo e_po e_chio e_tau_oil e_da e_g e_tau_no e_x e_cx e_yext e_m e_bgxt e_bo e_ipub e_a
e_nun e_taun e_tauc e_nuc  e_tauk;


%-------------------------------
% 3. Parameters
%-------------------------------

parameters PHI TAUC NU_N CO BETA NU_C R PSI NN SIGMA MU T_C XI PII M INO DELTA T_K 
WP TTr T_N LAMBDA LAMBDAI LAMBDAB LAMBDABST BG_B BO_B BGST_BST BOST_BST Yno_Y 
Yo_Y PO RHOPO Xo_Y Io_D RHOCHI CHI Io_Yo ALPHA1 ALPHA2 ALPHA3 C_Y I_Y G_Y 
X_Y IM_Y Pext_P B_Y TCN PHIRS INOST Bst_Y GAMMAF GAMMAB LAMBDAMC TAUNO TAUO 
Bg GG Bgst TAUNO_Y TAUO_Y RHOG RHOPEXT PHIM RHOBGST RHOIPUB RHOBG 
RHODEF RHOBOST RHOBO RHOKPUB RHO_A A B CC D F H J L O PP SS QQ RR TT UU VV 
V W XX PPP RHOTTr CHI_PI CHI_Y RHO_Inom
C TAUN TAUK K PHITR PHITK LAMDAK C_DA I_DA G_DA X_DA IM_DA;
 
%-------------------------------
% 4. Calibration
%-------------------------------
PHI = 1.42;
TAUC = .5;
NU_N = 1.01;
CO = 0.3;
BETA = .7929;
NU_C = 1.01;
R = 1.3;
PSI = 2;
NN = 1/3;
SIGMA = 1.01;
MU = 1.01;
//T_C include IVA IT ICE
T_C = .21;
XI = .01;
PII = .0601;
M = .3;
INO = .125;
DELTA = .025;
T_K = .25;
WP = .032;
TTr = .028;
T_N = .1495;
LAMBDA = .60;
LAMBDAI = .08;
LAMBDAB = .8;
LAMBDABST = .8; 
BG_B = .8;
BO_B  = .2;
BGST_BST = .9;
BOST_BST = .1;
Yno_Y = .85; 
Yo_Y = .15;
PO = 3.31;
RHOPO = .94;
Xo_Y = .001;
Io_D = .001;
RHOCHI = .99;
CHI = .96;
Io_Yo = .12;
ALPHA1 = .24;
ALPHA2 = .2;
ALPHA3 = .56;
C_Y = .69;
I_Y = .16;
G_Y = .28; 
X_Y = .28;
IM_Y = .29;
Pext_P = 3.5;
B_Y = .36;
TCN = 5.94;
PHIRS = .17;
INOST = 0.0406;
Bst_Y = .22;
GAMMAF = .4966;
GAMMAB = .4581;
LAMBDAMC = .4652;
TAUNO = .5;
TAUO = .5;
Bg  = .1244;//12.44
GG = .0971;//9.71
Bgst = .1418;//14.81
TAUNO_Y = .21;
TAUO_Y = .03;
RHOG = .9;
RHOPEXT = .94;
PHIM = .92;
RHOBGST = .40;
RHOIPUB = .85;
RHOBG = .387;
RHODEF = .18;
RHOBOST = .1;
RHOBO = .90;
RHOKPUB = .95;
RHO_A = .99;
A = BETA*NU_C*CO/(R^(1/SIGMA));
B = (BETA*NU_N*PSI*(NN^PHI))/R^(1/SIGMA);
CC = ((TAUC^(1/SIGMA))*XI*MU*(PII^(2/SIGMA))*(NU_C*CO-NU_N*PSI*(NN^PHI)))/((M^((1-MU)/SIGMA))*(PII^2+INO)^(1/SIGMA)*NU_C^(1/SIGMA));
D = ((TAUC^(1/SIGMA))*NU_C*CO*XI*MU*(PII^(2/SIGMA)))/((M^((1-MU)/SIGMA))*(PII^2+INO)^(1/SIGMA)*NU_C^(1/SIGMA));
F = (TAUC^(1/SIGMA))*NU_N*PSI*(NN^PHI)*XI*MU*(PII^(2/SIGMA))/(M^((1-MU)/SIGMA))*(PII^2+INO)^(1/SIGMA)*NU_C^(1/SIGMA);
H = R*T_K*(R+DELTA);
J = R+H;
L = H-R*(1-DELTA);
O = (B_Y*PII/INO);
PP = (TCN*PII/(PHIRS*INOST))*Bst_Y;
SS = (A-B)*(1/SIGMA);
QQ = SS-NU_C*CO;
RR = SS+A;
TT = NU_N*PSI*(NN^PHI);
UU =  CC*(1/SIGMA);
VV = (CC*(2/SIGMA)-(2/SIGMA));
V = M/(2*NN*T_N*WP);
W = (TTr*T_C/(2*T_N*WP));
XX = Pext_P*X_Y-Pext_P*IM_Y;
PPP = (Bg/PII)+(Bgst/PII)+(INOST*Bgst/PII)+(INO*Bg/PII);
RHOTTr = .42;
CHI_PI = 0.53;
CHI_Y = 1.2;
RHO_Inom = 0.95;
C = 0.6;
TAUN = 0.145;
TAUK = 0.25;
K = 0.3;
PHITR = 0.7;
PHITK = 0.3;
LAMDAK = 0.5;
C_DA = 0.6;
I_DA = 0.11;
G_DA = 0.10;
X_DA = 0.30;
IM_DA = 0.27;
%-------------------------------
% 5. Model
%-------------------------------
model(linear);


(PHI-1)*n_o = taun - tauc + w_p - nun;


NU_C*CO*c_o = A*c_o(+1)+ QQ*nuc - RR*nuc(+1) + SS*tauc - SS*tauc(+1) - SS*r(+1) - B*nun(+1) + B*PHI*n_o(+1) + TT*nun + TT*PHI*n_o;


inom = inom_star + s(+1) - s + phir + r;


((1-MU)/SIGMA)*md =UU*tauc - (UU+D)*nuc + VV*pi(+1) + (1/SIGMA)*inom + D*c_o - F*nun + F*PHI*n_o;


q = J*q(+1) + L*r(+1) + H*tauk + H*z_p(+1);


c_r = n_r + taun - tauc + w_p;


n_r = V*md - V*md(-1) - W*tauc - W*taun - W*w_p + V*pi - W*tr;


k_opt(+1) = (1-DELTA)*k_opt + DELTA*i_opt;


c = LAMBDA*c_r + (1-LAMBDA)*c_o;


n = LAMBDA*n_r + (1-LAMBDA)*n_o;


i = LAMBDAI*i_pub + (1-LAMBDAI)*i_opt;


b = LAMBDAB*BG_B*b_g + (1-LAMBDAB)*BO_B*b_opt;


b_star = LAMBDABST*BGST_BST*b_gstr + (1-LAMBDA)*BOST_BST*b_optstr;


y =  Yno_Y*y_no + PO*Yo_Y*p_oil + PO*Yo_Y*y_oil;


p_oil = (1-RHOPO)*PO*RHOPO*p_oil(-1) + e_po;


d(+1) = d + Io_D*i_oil;


r_oil = d - x_o(-1);


Xo_Y*x_o = Xo_Y*RHOCHI*x_o(-1) + y_oil;


i_oil = i_oil(-1) + r_oil + chi_oil + y_oil;


chi_oil = (1-RHOCHI)*CHI*RHOCHI*chi_oil(-1) + e_chio;


y_oil = (CHI*Io_Yo+1-CHI)*chi_oil - chi_oil(-1) + (1-CHI)*y_oil(-1) + CHI*Io_Yo*i_oil(-1) + e_tau_oil;


y_no = a + ALPHA1*k + ALPHA2*im + ALPHA3*n;


ALPHA3*k - ALPHA1*n = w_p - z_p;


ALPHA3*im - ALPHA2*n = w_p - p_ext + p;


ALPHA1*im - ALPHA2*k = z_p - p_ext + p;


da = C_DA*c + I_DA*i + G_DA*g + X_DA*x + IM_DA*im + e_da;


phir = s + b_star - p - y;


rer = s + p_ext - p;


pi = GAMMAF*pi(+1)+GAMMAB*pi(-1)*LAMBDAMC*mc;


mc = ALPHA2*p_ext + ALPHA3*w_p - a + (ALPHA1 + ALPHA3)*z_p;


TAUNO*tau_no + TAUO*tau_oil + Bg*b_g - (Bg/PII)*b_g(-1) - PPP*pi + (Bgst-INO*Bg/PII)*b_gstr - ((Bgst-INOST*Bgst)/PII)*b_gstr(-1) = GG*g + TTr*tr + (INO*Bg/PII)*inom + (INOST*Bgst/PII)*inom_star - e_g;


tau_no = ((TAUC*C)/TAUNO)*tauc + ((TAUC*C)/TAUNO)*c - ((TAUN*NN)/TAUNO)*taun - ((TAUN*NN)/TAUNO)*n + ((TAUK*K)/TAUNO)*tauk + ((TAUK*K)/TAUNO)*k + e_tau_no;


tau_oil = y_oil + p_oil;


tr = PHITR*tau_no + (1-PHITR)*tau_oil;


x = (RHO_A*RHOPO)*x(-1) + RHOPEXT*p_ext + c_ext - rer + e_x;


c_ext = RHOPO*c_ext(-1) + y_ext(+1) - inom_star + p_ext + e_cx;


im = rer + y_ext(+1) - y;


y_ext = y_ext(+1) - inom_star - p_ext + e_yext;


mo = PHIM*md(-1) + CHI_PI*pi(+1) + CHI_Y*y(+1) + e_m;

 
b_gstr = RHOBOST*b_gstr(-1) + RHOIPUB*i_pub(+1) + e_bgxt;

 
b_g = RHOBG*b_g(-1) + RHODEF*g - RHODEF*tau_no - RHODEF*tau_oil;


b_optstr = RHOBOST*b_optstr(-1) - inom_star;



b_opt = (RHOBOST*0.95)*b_opt(-1) + y(+1) - inom + e_bo;


i_pub = RHOIPUB*i_pub(-1) + b_gstr + e_ipub; 


k_pub = RHOKPUB*k_pub(-1) + i_pub;


a = RHO_A*a(-1) + e_a;


nun = RHO_A*nun(-1) + n(-1) + e_nun;


taun = RHOPO*taun(-1) + (1-RHOPO)*n(-1) + e_taun;


tauc = RHOPO*tauc(-1) + (1-RHOPO)*c(-1) + e_tauc;


nuc = c(-1) + e_nuc;


tauk = RHOPO*tauk(-1) + PHITK*i + e_tauk;


r = inom - pi - r*pi;


inom = RHO_Inom*inom(-1)+ (1-RHO_Inom)*CHI_PI*pi(+1) + (1-RHO_Inom)*CHI_Y*y(+1);


inom_star = RHO_A*inom_star(-1) + (1-RHO_A)*p_ext + (1-RHO_A)*y_ext(+1);


i_opt = RHOPO*i_opt(-1) + y(+1) - r;


k = LAMDAK*k_pub + (1 - LAMDAK)*k_opt;


p = p(-1) + pi;

end;


initval;

nun=   .1;//.01
n_o=   1/3;
taun=   .145;
tauc=   .4;
w_p=   .325;//.325
nuc=   .99;
c_o=   .3;
r=   .013;
inom=   .125;
inom_star=   .0406;
s=   5.94;
phir=  .6;
md=   .4;
mo=   .3;
q=   .0125;
tauk=   .25;
z_p= .13;//.013
c_r=    .7;
n_r=    .7;
tr=    .028;
k= 1.562;//.1562
i= 2;//.1605
c= .73;
n= 1/3;
i_pub=  .10;//.14
i_opt=  .147;
k_pub=  1;//.01
k_opt=  2;//.14
b=  .36;
b_g=    .13; 
b_opt=  .0151;
b_star= .25;
b_gstr= .23;
b_optstr=   .001;
y=  .05;
y_no=   .036;
p_oil=  .0331;
y_oil=  .061;
d=  .001; 
i_oil=  .01;
r_oil=  .01;
chi_oil=    .0191;
a=  .1;
im= .2868;
p_ext=  .0652;
mc= .01;
da= .0376;
x=  .26;
p=  86;//0.186
g=  .1415;
rer=    .986;
pi= .061; 
tau_no= .5;
tau_oil=    .5;
c_ext=  .8 ;
y_ext=  .0549;
x_o=    .034;
e_po= 1;
e_chio= 1;
e_g= 1;
e_x= 1;
e_cx= 1;
e_yext= 1;
e_m= 1;
e_bgxt= 1;
e_bo= 1; 
e_ipub= 1;
//e_kpub= 0;
e_a= 1;
e_da= 1;
e_nun= 1;
e_taun= 1;
e_tauc= 1;
e_nuc= 1;
e_tauk= 1;
e_tau_oil= 1;
e_tau_no= 1;
end;

steady;

check;

shocks;

var e_po; stderr .214829;
var e_chio; stderr .053088;
var e_g; stderr .180603;
var e_x; stderr .173475;
var e_cx; stderr .183654;
var e_yext; stderr .02358;
var e_m; stderr .281924;
var e_bgxt; stderr .160028;
var e_bo; stderr .01964;
var e_ipub; stderr .141476;
//var e_kpub; stderr .2539;
var e_a; stderr .008834;
var e_da; stderr .343054;
var e_nun; stderr -0.019127;
var e_taun; stderr .208660;
var e_tauc; stderr .093478;
var e_nuc; stderr .046742;
var e_tauk; stderr 2.4376;
var e_tau_no; stderr .216891;
var e_tau_oil; stderr .53794;
end;

stoch_simul(periods=2500, order=1, solve_algo=1, drop=10, irf=10, nograph);