for i:=1 to n do {формирование вектора-столбца Bm}
begin
for j:=1 to n do
begin
Bm[i]:=Bm[i]+m[j]*e[i,j];
end;
end;
for i:=1 to n do
begin {нахождение констант}
ebe:=ebe+be[i]; {суммирование по стоблцу}
ebm:=ebm+bm[i];
mbm:=mbm+m[i]*bm[i];
mbe:=mbe+m[i]*be[i];
end;
end;
procedure vvod ;
label out1, out2, out3, out4, out5;
var z:real; mi,ma:real;
begin
writeln;
writeln(' КУРСОВОЙ ПРОЕКТ');
writeln;
writeln;
writeln(' ПО ДИСЦИПЛИНЕ МАТЕМАТИЧЕСКИЕ МЕТОДЫ ФИНАНСОВО-ЭКОНОМИЧЕСКОГО АНАЛИЗА');
writeln;
writeln(' АВТОР: БОЛДИН СЕРГЕЙ, ФИНМЕН II-3.');
writeln;
writeln(' ТЕМА: ЗАДАЧА ОПТИМИЗАЦИИ РИСКОВОГО ПОРТФЕЛЯ.');
writeln;
writeln;
writeln;
out1:
writeln;
writeln(' Введите количество видов ценных бумаг, из которых вы хотите ');
write(' сформировать портфель (не более 10): ');
readln(n);
if (n<=0) or (n<>int(n)) or (n>10) then
begin
writeln(' Ошибка ввода! Число должно быть натуральным и меньше 10 ! ');
goto out1;
end;
writeln;
writeln(' Введите эффективности (доходности) ценных бумаг:');
for i:=1 to n do
begin
E[i,i]:=1;
out2:
write(' ',i,'-ого вида : ');
readln(m[i]);
if (m[i]<0) then
begin
writeln(' Ошибка ввода! Число должно быть положительным! ');
goto out2;
end;
end;
writeln;
writeln('!!! При вводе рисков и совместных вариаций ценных бумаг следует');
writeln(' быть внимательным, так как программа не расчитана на линейную');
writeln(' связь доходностей ценных бумаг. Поэтому рекомендуется не вводить');
writeln(' пропорциональные риски и совместные вариации ценных бумаг!!!');
writeln;
writeln(' Введите риск (среднее квадратическое отклонение(СКО)) ценных бумаг: ');
for i:=1 to n do
begin
out3:
write(' ',i,'-ого вида : ');
readln(z);
if (z<0) then
begin
writeln(' Ошибка ввода! Число должно быть положительным! ');
goto out3;
end;
b[i,i]:=z*z;
end;
writeln;
writeln(' Введите совместную вариацию (корреляционный момент) ценных бумаг.');
writeln(' Она не должна быть больше произведения СКО этих бумаг.');
for i:=1 to n do
begin
for j:=i+1 to n do {ввод матрицы ковариаций}
begin
out4:
write(' ',i,'-го и ',j,'-го вида: ');
readln(z);
if abs(z)>=sqrt(b[i,i])*sqrt(b[j,j]) then
begin
writeln(' Ошибка ввода! Число должно быть положительным и меньше произведения СКО этих бумаг! ');
goto out4;
end;
b[i,j]:=z;
b[j,i]:=z;
if i<>j then begin E[i,j]:=0; end;
end;
end;
writeln;
ma:=0;
for i:=1 to n do
begin
if m[i]>ma then ma:=m[i];
end;
mi:=100000000;
for i:=1 to n do
begin
if m[i]<mi then mi:=m[i];
end;
writeln(' Введите желаемую эффективность портфеля. ');
write(' Она должна быть в пределах эффективностей ценных бумаг: ');
out5:
readln(mp);
if (mp<mi) or (mp>ma) then
begin
writeln(' Ошибка ввода!');
write(' Число должно быть в пределах эффективностей ценных бумаг!: ');
goto out5;
end;
end;
procedure vivod ;
begin
writeln;
writeln(' Структура портфеля. Доли ценных бумаг.');
for i:=1 to n do
begin
x:=((mbm-mp*ebm)*be[i]+(mp*ebe-mbe)*bm[i])/(ebe*mbm-mbe*mbe);
writeln(' ',i,'-го вида: ',x:6:5);
if x<0 then
begin
writeln(' Так как доля бумаг ',i,'-го вида отрицательна, то необходимо ');
writeln(' провести сделку "short sale", исключить бумаги этого вида из портфеля');
writeln(' и решить задачу заново.');
end;
end;
writeln;
writeln(' Минимальный риск портфеля: ',sqrt((mp*mp*ebe-2*mp*mbe+mbm)/(ebe*mbm-mbe*mbe)):6:5);
end;
begin
clrscr;
textcolor(yellow);
textbackground(blue);
vvod;
base;
vivod;
readln;
end.
1. Колемаев В.А. Математическая экономика. М.: «Юнити» 1998.
2. Малыхин В.И. Финансовая математика. М.: «Юнити» 2000.