Программа оптимизации рискового портфеля
ценных бумаг x1=0,3396; x2=0,3208; x3=0,3396. Минимальный риск p=1,699. Эффект диверсификации портфеля наглядно виден на данном примере. Портфель имеет такую же эффективность, как если бы он был составлен только из бумаг 2-го вида, но его риск значительно меньше, чем у бумаг 2-го вида (1,699 < 3).
Программа.
Далее приведена программа, которая рассчитывает структуру портфеля при заданной эффективности и его минимальный риск.
program riski;
uses crt;
type mas=array[1..10] of real;
mas2=array[1..10,1..10] of real;
var a:real;
m,be,bm:mas;
B,E,b1,e1:mas2;
i,k,c,v,l,j,n:integer;
mp,ebe,mbm,ebm,x,mbe:real;
procedure base;
begin
for i:=1 to n do {обращение матрицы B}
begin
for c:=1 to n do {дублирование матриц}
begin
for v:=1 to n do
begin
B1[c,v]:=B[c,v];
e1[c,v]:=e[c,v];
end;
end;
for k:=1 to n do
begin
B[i,k]:=B1[i,k]/b1[i,i]; {делим строки на разрешающий элемент}
E[i,k]:=E1[i,k]/b1[i,i];for l:=1 to n do
begin {находим остальные элементы}
if l<>i then
begin
B[l,k]:=(B1[l,k]-(B1[l,i]*B1[i,k]/B1[i,i]));
E[l,k]:=(E1[l,k]-(B1[l,i]*E1[i,k]/B1[i,i]));
end;
end;
end;
end;
for i:=1 to n do {суммирование по строкам, формирование вектора-столбца Be}
begin
for j:=1 to n do
begin
be[i]:=be[i]+e[i,j];
end;
end;
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]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.
скачать реферат
1 2