%% Y K L I C standart, Z=lending rate, R=deposit rate Q=investment good price, N=Net worth, S=# of Assets,
%% D=Debt, Lambda=Lagrangeparameter of incentive constraint, vd=Cost of Deposits, vs=value of asstets, Omega=auxiliary variable

var Y K L I C Z S Q N D R Lambda vs vd Omega Error_A_Per Error_Psi_Per;
varexo Error_A Error_Psi;
parameters Alpha Beta Sigma Xi Theta Delta Chi Epsilon;


	Alpha = 1/3; 		%% Production function
		
	Beta = 1.01;  		%% Time preference

	Sigma = 0.972; 		%% Share of exiting bankers

	Xi = 0.003; 		%% Entering bankers initial capital

	Theta = 0.383;		%% Share of abscondable funds (for financial friction)

	Delta = 0.025;		%% Amortization

	Chi = 5.58;		%% Rel. utility weight of labor

	Epsilon = 0.33;		%% Inv. Frisch elastitcity

model;

%% Standart RBC 
	Y = Error_A_Per * K ^Alpha *L^(1-Alpha);

	(1-Alpha) * Y / (L * C) = Chi * L^Epsilon;



	Z = Alpha * (L/K)^(1-Alpha);       %% alternatively: (1-Alpha) * Y / (L * C) = Chi(1-L);

	Y = C + I;

	K = Error_Psi_Per * (I(-1) + (1 - Delta) * K(-1));

	1 = R(+1)/Beta * C/C(+1);

	Q = 1;

%% Banking with frictions
	S = I + (1 - Delta) * K;

	Q * S = D + N;

	N = Error_Psi_Per * S(-1) * (Z + (1-Delta) * Q) * (Sigma + Xi) - Sigma * R * D(-1);

	Lambda = (vs - Q * vd) / (Q * vd - vs + Q * Theta);

	vs = 1/Beta * (Z(+1) + (1-Delta) * Q(+1)) * Omega(+1) * Error_Psi_Per(+1);

	vd = R(+1) / Beta * Omega(+1);

	Omega = (1 - Sigma + Sigma * (vs * (1 + Lambda) - Q * Theta * Lambda) / Q);

	S = D * Q * vd / (vs - Q * Theta);

	Error_A_Per = Error_A + 1;
	Error_Psi_Per = Error_Psi +1;

end;


initval;

I = 0.164666;
K = 6.58663;
L = 0.245008;
Y = 0.733964;
C = 0.569298;
Z = 0.0371441;
N = 1.84502;
D = 4.74161;
Omega = 1.35701;
Lambda = 0.0075786;
vd = 1.35701;
vs = 1.35989;
S = 6.58663;
Q = 1;
R = 1.01;
Error_A_Per = 1;
Error_Psi_Per = 1;
end;

resid(1);
steady;

check;

shocks;
var Error_A = 0.1;
var Error_Psi = 0.1;
end;

stoch_simul(periods=1000, solve_algo=2);
