Смекни!
smekni.com

Программа оптимизации рискового портфеля (стр. 2 из 2)

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.