//FULLTURKEYFIN1.MOD: Dynare Code to get model for Turkey, 4 shocks, fixed rates
// R. Chang, 10/24/2012 Includes Ramsey allocations
// Modified to allow varkap = 0
//No Heterogeneity in labor

var c xt n VV cn cr xtn xtr nn nr VVr VVn yhg pi_h pi_t i ds qt w_p yhn qtn yh ph_p pb_ph j_ h delt_ m w_pn U Ur Un ph_pn z_x zx  v lx l vn lnn lxn mn a v_m logy mcr lr lxr bigthetar gr elgr elbigthetar;
     
varexo epz epzx epa epv; //z: shocks to rel price of food, zx: to rel price of homog exports a:prod shock v_m: mon shock

parameters b phi_ alph the rhoz rhozx gamm_ phi_pi ppar phi_y varkap psi eta sig sigz  phi_1 epsi vi kap y_x var_sig rhox rhoa rhov ax;

b = 0.99;         
phi_ = 1.0;         
alph = 0.25;       
the = 0.66;       
gamm_ = 5;
phi_pi = 2.0;   // Monetary policy rule
phi_y  = 0.25;
varkap = 0.0;  // Share of imported productive inputs 
psi = 1;       // complete markets = 1, autarky = 0
 
phi_1 = alph ;
epsi = 6;
vi=(1/epsi)*(1/(1-varkap));   
kap = 1; 
y_x=1;
var_sig = 1;

             
// Shock ar coefficients
rhoz = 0.75; 
rhozx = 0.75; 
rhoa = 0.7133245;
rhov = 0.6;

//Shock standard deviations
sigz  = 0.05;
sigzx = 0.07; 
siga  = 0.012;
sigv  = 0.0062;

rhox = 0.1;
ax = 0.15; 

ppar_values= [0 1];
eta_values = [0.5]; 
sig = 2.0;

nns = length(ppar_values);
nnq = length(eta_values);
                          
for jj=1:nnq;
eta = eta_values(jj);
 
    ii=1;
    @#for pp in 0:1

    %----------------------------------------------------------------
    % 3. Model
    %----------------------------------------------------------------

model;
    yh = ((1-alph)*(ph_p^-eta)*c) + (phi_1*(xt^gamm_)*(ph_p^-gamm_))*y_x;
    1 = (((1-the)*(pb_ph^(1-epsi))) + (the*(pi_h^(epsi-1))));    
    1 = (1-alph)*(ph_p^(1-eta)) + alph*((xt*z_x)^(1-eta));
    pb_ph*j_ = (epsi/(epsi-1))*h;
    j_ = ((pb_ph^(-epsi))*yh) + (b*the*((c(+1)/c)^(-sig))*(ph_p(+1)/ph_p)*((pb_ph/pb_ph(+1))^(-epsi)) *((pi_h(+1))^(epsi-1))*j_(+1));
    h = (qt^varkap)*((((1-vi)*w_p)/ph_p)^(1-varkap))*(pb_ph^(-epsi))*yh/a
 + (the*b*((c(+1)/c)^(-sig))*(ph_p(+1)/ph_p)*((pb_ph/pb_ph(+1))^(-epsi))*(pi_h(+1)^epsi)*h(+1));
    b*(((c(+1)/c)^(-sig))*(ph_p(+1)/ph_p))*(pi_h(+1)^-1) = exp(-i); 
    c = ((y_x*kap*xt^(1/sig))^psi) * (v^(1-psi));
    w_p = var_sig*(c^sig)*(n^phi_);
    (delt_+1)*yh = (1/(1-varkap))*a*l*( (1-vi)*(w_p)*(qt*ph_p)^-1)^varkap;
    m/l =(varkap/(1-varkap))*( (1-vi)*(w_p)*(qt*ph_p)^-1);
    delt_ = the*delt_(-1) + (the/(1-the))*(epsi/2)*(log(pi_h))^2;
    qt*ph_p = xt*z_x;
    pi_t = pi_h*(ph_p(-1)/ph_p);
    log(z_x) =  rhoz*log(z_x(-1))+epz;
    log(zx) = rhozx*log(zx(-1)) + epzx; 
    log(a) =  rhoa*log(a(-1))+epa;
    v_m =  rhov*v_m(-1)+epv;
    yhg = (yh/yhn);  
    rhox*ax*(lx^rhox) = w_p * lx /(xt*zx);
    v = ph_p * yh + zx*xt*ax*lx^rhox - z_x*xt*m;
    n = l + lx; 
    mcr = (1/a)*qt^varkap*(w_p * (1/ph_p))^(1-varkap); 
    //Natural System
    w_pn = var_sig*(cn^sig)*(nn^phi_);
    a* ph_pn = (epsi/(epsi-1))*((xtn*z_x)^varkap)*(((1-vi)*w_pn)^(1-varkap));
    1 = (1-alph)*(ph_pn^(1-eta)) + alph *((xtn*z_x)^(1-eta));
    cn = ((kap*y_x*xtn^(1/sig))^psi) * (vn^(1-psi));
    yhn = ((1-alph)*(ph_pn^-eta)*cn) + (phi_1*(xtn^gamm_)*(ph_pn^-gamm_))*y_x;
    yhn = (1/(1-varkap))*a*lnn*((1-vi)*w_pn*((xtn*z_x)^-1))^varkap;
    qtn*ph_pn = xtn*z_x;
    rhox*ax*lxn^rhox = w_pn * lxn /(xtn*zx);
    vn = ph_pn * yhn + zx*xtn*ax*lxn^rhox - z_x*xtn*mn;
    nn = lnn + lxn;
    mn/lnn =(varkap/(1-varkap))*( (1-vi)*(w_pn)*(qtn*ph_pn)^-1);
    //Ramsey allocations
    cr = xtr^(1/sig);
    nr = lr + lxr;
    lxr^(1-rhox)= rhox*ax*zx*xtr*(cr^(-sig))/(var_sig*nr^phi_); 
    gr^(1-eta) = (1-alph)/(1 - alph*((xtr*z_x)^(1-eta)));
    bigthetar = (1-alph)*(xtr^(1/sig))*(gr^eta) + phi_1*(xtr^gamm_)*(gr^gamm_);
    (1 - varkap)*bigthetar = a*lr*(  var_sig*nr^phi_ )/( (xtr*z_x*cr^(-sig) ) )^varkap  ;
    (1+ (lr*varkap + lxr/(1-rhox))*(phi_/nr))*( cr^(1-sig) ) = sig*var_sig*nr^(1+phi_) * elbigthetar; 
    elgr = alph*( (xtr*z_x)^(1-eta))/(  1 - alph* (xtr*z_x)^(1-eta)) ;
    bigthetar*elbigthetar = (1-alph)* ((gr^eta)*(xtr^(1/sig))*(eta*elgr + (1/sig))) + phi_1*((xtr*gr)^gamm_)*gamm_*(1+elgr);
    //Policy Rule
      @#if pp==0
        i = -log(b)+phi_y*(log(yh/yhn))+phi_pi*((pi_t(+1)-1))+v_m;
      @#else
        i = -log(b)+phi_y*(log(yh/yhn))+phi_pi*((pi_h-1))+v_m;
      @#endif
    //Nominal devaluation
    ds = (xt/xt(-1))*(pi_t);
    //Welfare Equations
    U = (c^(1-sig))/((1-sig)) - var_sig*(n^(1+phi_))/(1+phi_); 
    VV = U + b*VV(+1); 
    Ur = (cr^(1-sig))/((1-sig)) - var_sig*(nr^(1+phi_))/(1+phi_); 
    VVr = Ur + b*VVr(+1);
    Un = (cn^(1-sig))/((1-sig)) - var_sig*(nn^(1+phi_))/(1+phi_); 
    VVn = Un + b*VVn(+1);
    logy = log(yh);
end;

initval;
a = 1;
v_m = 0;
w_p =  (a*(epsi-1)/epsi)^(1/(1-varkap))  ;
lx = 0.01;
l = (1-varkap)*(epsi - 1)/ (  w_p * epsi);
n = l + lx;
m = varkap*w_p*l/(1-varkap);
yh = 1; 
c = 1;
xt = 1;
ph_p = 1;
pb_ph = 1;
j_ = yh/(1-b*the);
h = ((epsi-1)/epsi)*(yh/(1-b*the));
pi_h = 1;
pi_t = pi_h;
delt_ = 0;
qt = 1;
z_x = 1;
zx = 1; 
w_pn =  w_p;
ph_pn = 1;
cn = 1;
yhn = yh;
xtn= 1;
lnn = l;
nn = n;
lxn = lx;
yhg = 1;
qtn = xtn/ph_pn;
i = -log(b)+phi_y*(log(yh/yhn))+phi_pi*((pi_h-1));
ds= 1;
v = yh + ax*lx^rhox - m;
vn = v; 
U = (c^(1-sig))/(var_sig*(1-sig))-((n^(1+phi_))/(1+phi_)); 
VV = U/(1-b); 
logy = log(yh); 
 mcr = w_p^(1-varkap); 
cr = 1;
xtr = xt;
nr = n;
gr = 1;
bigthetar = 1;
lr = l;
lxr = lx; 
elgr = alph/(1-alph);
elbigthetar = (eta*alph +((1-alph)/sig)) + phi_1*gamm_/(1-alph); 
Ur = (cr^(1-sig))/(var_sig*(1-sig))-((nr^(1+phi_))/(1+phi_)); 
VVr = Ur/(1-b);
Un = (cn^(1-sig))/((1-sig)) - var_sig*(nn^(1+phi_))/(1+phi_); 
VVn = Un/(1-b);
end;

check;
resid(1);
steady;

shocks;
var epz ; stderr sigz;
var epzx ; stderr sigzx;
var epa; stderr siga;
var epv; stderr sigv;
end;
check;

%-----------------------------------
% computing IRFs for # values of eta
%-----------------------------------
a_1 = ['Consumption'];
a_2 = ['REER'];
a_3 = ['Labor'];

options_.pruning=1;
stoch_simul(irf=20,order=1,nograph);
%Number of charts
NCh=3;
%Number of Shocks N
    N=4;
        for j=1:N;
            for k=1:NCh;
                zz(:,k,j,ii) = evalin('base',[deblank(M_.endo_names(k,:)) '_' deblank(M_.exo_names(j,:))]);
                zz(:,k,j,nns+1) = evalin('base',[deblank(M_.endo_names(k,:)) 'r' '_' deblank(M_.exo_names(j,:))]);
                zz(:,k,j,nns+2) = evalin('base',[deblank(M_.endo_names(k,:)) 'n' '_' deblank(M_.exo_names(j,:))]);
            end;
        end;	
     ii=ii+1;
    @#endfor
end;
    
   ColorSet = [
	0.00  0.00  1.00
	0.00  0.50  0.00
	1.00  0.00  0.00
	0.00  0.75  0.75
	0.95  0.95  0.00
	0.75  0.75  0.00
	0.25  0.25  0.25
	0.75  0.25  0.25
	0.95  0.95  0.00
	0.25  0.25  0.75
	0.75  0.75  0.75
	0.00  1.00  0.00
	0.76  0.57  0.17
	0.54  0.63  0.22
	0.34  0.57  0.92
	1.00  0.10  0.60
	0.88  0.75  0.73
	0.10  0.49  0.47
	0.66  0.34  0.65
	0.99  0.41  0.23];

%-------------------------------------
% using Matlab graph commands to plot 
% the # IRFs on the same plot
%-------------------------------------

for j=1:N;
        exo_varname = deblank(M_.exo_names(j,:));
        figure('name',['Shock to ' exo_varname], 'Color',[1 1 1],...
      'InvertHardcopy','off',...
      'PaperUnits','centimeters',...
      'PaperOrientation','landscape',...
      'PaperPosition',[0.6345 0.6345 26.65 20.3],...
      'PaperSize',[27.92 21.57])

        for k=1:NCh;
            subplot(floor(sqrt(NCh)),ceil(NCh/floor(sqrt(NCh))),k);
            f=['a_' int2str(k) ';'];

            if abs(zz(:,k,j,:))<0.0001;
               zz=round(zz*100)/100;
            end;

            plot1=plot(squeeze(zz(:,k,j,:)));

            title(['' num2str(eval(f)),char(10),''],'FontName','Trebuchet MS');
            linestyle={'-',':','--','-.'};
            for j_=1:size(ppar_values,2)+1;
                set(plot1(j_),'LineStyle',linestyle{j_},'LineWidth',2,'MarkerSize',2,'Color', ColorSet(j_,:));
            end;
        end;

        //for k=1:size(ppar_values,2);
        //    e{k}=sprintf('%s%g','rule=',ppar_values(k));
        //end;

        e{1}=sprintf('%s%g','EXPCPI');
        e{2}=sprintf('%s%g','PPI');
        e{3}=sprintf('%s%g','Ramsey'); 
        e{4}=sprintf('%s%g','Natural'); 

    l_1=legend(e,'FontSize',10,'LineWidth',1,'EdgeColor',[1 1 1],'Position',[0.15 1.4 0.00909 0.00661]);
    set(l_1,'Units','centimeters');
end; 

