/* Description of model: 
* Small open economy New Keynesian model adding: (1) heterogeneous households, 
*(2) heterogenous firms, (3) incomplete pass-through, (4)government
*/

/* Description of error:
* Configuring Dynare ...
* [mex] Generalized QZ.
* [mex] Sylvester equation solution.
* [mex] Kronecker products.
* [mex] Sparse kronecker products.
* [mex] Local state space iteration (second order).
* [mex] Bytecode evaluation.
* [mex] k-order perturbation solver.
* [mex] k-order solution simulation.
* [mex] Quasi Monte-Carlo sequence (Sobol).
* [mex] Markov Switching SBVAR.
*  
* Starting Dynare (version 4.3.3).
* Starting preprocessing of the model file ...
* ERROR: Dynare_preprocessing_failed.mod:51.13: syntax error, unexpected DIVIDE
* 
* Error using dynare (line 114)
* DYNARE: preprocessing failed
* 
* Error in Code (line 4)
* dynare Dynare_preprocessing_failed
*/

/*Code entered in Matlab
* addpath c:\dynare\4.3.3\matlab
* cd c:\dynare\4.3.3\simulations
* dynare Dynare_preprocessing_failed
*/

var y_ag                        
    y                            
    r                                             
    y_world     
    c          
    pi_home     
    pi_cpi     
    g           
    g_world   
    t          
    n_y         
    n_r         
    n_supply    
    i           
    r_home      
    e          
    s          
    psi        
    p_home      
    p_import   
    p_world   
    p_res    
    w        
    mc       
    a     
    x           
    nu      
    c_world;

varexo eps_a           
       eps_x          
       eps_p_res     
       eps_p_world   
       eps_p_import    
       eps_t           
       eps_nu          
       eps_y_world    
       eps_g_world   
       eps_c_world    
       eps_g;       
       
parameters alpha epsilonH epsilonP epsilonF smallStig bigStig smallChi bigChi phi beta alphaR alphaY theta lambda r_world      
	       ThetaC ThetaN ThetaT GammaY GammaG GammaS GammaT GammaPsi ThetaPsi KappaY KappaG KappaPsi                           
           rho phi_pi_cpi phi_pi_home phi_y phi_nu                                                                           
           rho_a rho_x rho_p_res rho_p_world rho_p_import rho_t rho_g rho_bu rho_y_world rho_g_world rho_c_world rho_nu       
           C/Y_ag G/Y_ag B/Y_ag;                                                                                             

alpha= 0.5;      
epsilonH= 0.5;    
epsilonP= 0.5;   
epsilonF= 0.5;    
smallStig= 1;      
bigStig= 0.5;     
smallChi= 0.5;  
bigChi= 0.5;        
phi= 0.1;      
beta= 0.95;        
alphaR= 0.9;      
alphaY= 0.1;      
betaR=0.5;         
betaY=1-betaR;     
theta= 0.6;         
lambda= 0.5;     
r_world=0.025;    
ThetaC= 1-(lambda*((1+phi)/(1+phi*s*(C/Y))));
ThetaN= (lambda*(1+phi)*phi/(1+phi*s*(C/Y));
ThetaT= lambda*(s*T*phi)/(Y*(1+Phi*s*(C/Y));
GammaY= 1/(ThetaC*((Y/(Y-G)));
GammaG= (1/GammaY)*ThetaC*((Y/(Y-G))*(G/Y);
GammaS= (1/GammaY)*(ThetaC*alpha*epsilonF+(1-alpha)(epsilonH-1);
GammaT= (1/GammaY)*ThetaT;
GammaPsi=(1/GammaY)*ThetaC*alpha*(epsilonH-1);
GammaN= (1/GammY)*ThetaN;
ThetaS= (1-(G/Yag))((1-alpha)+alpha*epsilonF+alpha*(1-alpha)*(epsilonH-1));
ThetaPsi= (1-G/Yag)(1+alpha*(epsilonH-1));
KappaY=((1-theta)*(1-beta*theta))/theta)*((1-alphaR)/(1-alphaR+alphaR*epsilonP))*(phi+(1/ThetaS));
KappaG= ((1-theta)*(1-beta*theta))/theta)*((1-alphaR)/(1-alphaR+alphaR*epsilonP))*((G/Yag)/ThetaS);
KappaPsi= ((1-theta)*(1-beta*theta))/theta)*((1-alphaR)/(1-alphaR+alphaR*epsilonP))*(1+(ThetaPsi/ThetaS));
GammaO= s/(phi+(1/ThetaS);
GammaGn= (G/Yag)/(ThetaS(phi+(1/ThetaS)));
GammaYworld= ((1/(1-(G/Y))-(1/ThetaS))*(1/(phi+(1/ThetaS));
GammaGworld= (G/Yag)-((G/Yag)/(1-(G/Yag)));
GammaA= (1+phi)/(phi+(1/ThetaS));
rho= 1/beta-1;                    
phi_pi_home= 1.2;                 
phi_pi_cpi = 1.2;                 
phi_y= 0.8;                         
rho_a= 0.9;                       
rho_x= 0.9;                     
rho_p_res= 0.9;                    
rho_p_world= 0.9;                 
rho_p_import;                       
rho_t= 0.9;                         
rho_gn= 0.9;                         
rho_nu= 0.9;                       
rho_y_world= 0.9;                
rho_g_world= 0.9;                 
rho_c_world= 0.9;                  
rho_g= 0.9;                         
C/Y_ag= 0.76;                        
G/Y_ag= 0.24;                    
B/Y_ag= 0.09;                      
R/Y_ag= 0.3;                       
N_r/N= 0.5;                         


model(linear);
w= mc*a;                                                                    
mc= (phi+(1/ThetaS))*y_ag - (GammaG/ThetaS)*g + ((1/1-GammaG)-(1/ThetaS))*y
+(GammaG-(GammaG/(1-GammaG)))*g_world-(1-phi)*a-(1+(ThetaPasi/ThetaS))*psi;                                             
psi= e + p_world - p_imp;                                                     
e(+1) - e = r_home - r_world;                                              
r_home = i-pi_home(+1);                                                
pi_home= beta*pi_home(+1) + ((1-theta)*(1-beta*theta))/theta)*mc;          
i= i= rho + phi_pi_home*pi_home + phi_y_ag*y_ag + nu;                      
pi_cpi=pi_home+alpha*(s(+1)-s);                                          
s= p_import - p_home;                                                   
p_home -p_home(-1)=pi_home;                                             
alpha*n_r = w - x - e - e*p_res;                                        
n_y = (1-N_r/N)*n_supply - (N_r/N)*n_r ;                                   
phi*n_supply = w - c ;                                                    
ThetaC*c=ThetaC*c(+1)-ThetaN*n(+1)+ThetaT*t(+1)-(1-lambda)*(1-pi_cpi-rho); 
r= x + (1-alphaR)*n_r;                                                       
y= a + n_y;                                                           
y_ag= (1-R/Y_ag)*y +(R/Y_ag)*r;                                           
g=rho_g*g(-1)+ eps_g;   
t=rho_t*t(-1)+eps_t;     
a=rho_x*a(-1)+ eps_a;                           
x=rho_x*x(-1)+ eps_x;                              
nu=rho_nu*nu(-1)+ eps_nu;                          
p_res=rho_p_res*a(-1)+ eps_p_res;                   
p_world=rho_p_world*p_world(-1)+ eps_p_world;      
p_import=rho_p_import*p_import(-1)+ eps_p_import;   
y_world=rho_y_world*y_world(-1)+ eps_y_world;       
g_world=rho_g_world*g_world(-1)+ eps_g_world;      
c_world=rho_c_world*c_world(-1)+ eps_c_world;       
end;

steady;
check;

shocks;                             //commented out all but one
var eps_a = 1^2;
//var eps_x = 1^2;
//var eps_p_res = 1^2;
//var eps_p_world = 1^2;
//var eps_p_import = 1^2;
//var eps_t = 1^2;
//var eps_nu= 1^2;
//var eps_y_world= 1^2;
//var eps_g_world= 1^2;
//var eps_C_world= 1^2;
//var eps_g= 1^2;
end;

stoch_simul(periods=50);
