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

ценных бумаг 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