Разработка методики формирования оптимального портфеля ценных бумаг с использованием асимметричных возмущенных мер риска

Асимметричные возмущенные меры риска. Разработка алгоритма формирования оптимального портфеля. Вычислительные эксперименты на базе статистических данных котировок ценных бумаг фондового рынка России для анализа эффективности применения данных мер риска.

Рубрика Банковское, биржевое дело и страхование
Вид дипломная работа
Язык русский
Дата добавления 24.05.2014
Размер файла 507,9 K

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.

24. Куреленкова Ю.В. Сравнение оптимальных инвестиционных портфелей, составленных с использованием различных мер риска, 2005.

25. Практикум по биржевым играм и финансовой деятельности западных банков. - М.: МП "Фоском", 2001.

26.Markowitz H. Portfolio selection. Efficient Diversification of Investments. New York: Wiley ,1959.

27. Электронный ресурс: Управление финансовыми рисками www.management.com

28.Artzner P., Delbaen F., Eber J.-M., Heath D. Coherent Measures of Risk, 1998, Preprint.

29.Artzner P., Delbaen F., Eber J.-M., Heath D. Definition of Coherent Measures of Risk, Symposium on Risk Management at the European Finance Association 24th Annual Meeting, 1997,Viena, Austria.

30. Van der Hoek J. and Sherris M., (2001), A class of non-expected utility risk measures and implications for asset allocation, Insurance: Mathematics and Economics 28, No.1, 69-82.

31.Берзон Н.И. и др. Фондовый рынок. Учебное пособие для высших учебных заведений экономического профиля. - М.: Вита-Пресс, 2008. - 400 с.

32.Коттл С., Мюррей Р. Ф., Блок Ф.Е. «Анализ ценных бумаг» Грэма и Додда / Пер. с англ. - М.: ЗАО «Олимп - Бизнес», - 2000. - 704 с.

33.Татьянников В. Как ведут себя измерители рисков на российском фондовом рынке // Рынок ценных бумаг, - №21 (204), - 2001, - с.57.

34. Инвестиционно-финансовый портфель/ Общ. ред. Н.Я. Петракова, -М.: "Соминтек".2001.

35. Аристов Д.В., Гольтяев А.А., Горюхин Б.Н., Смарагдов И.А. Ценные бумаги в сберегательном банке России. Тула: Изд-во "Шар", 2000.

36. Фондовый портфель/ Отв. ред. Рубин Ю.Б., Солдаткин В.И.- М.: "Соминтек", 2002.

37. Эрлих А.А. Технический анализ товарных и финансовых рынков. Прикладное пособие.- М.: ИНФРА-М, 2006.

Приложение А

Листинг программы

unit uMainForm;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, Menus, Grids, uMyExcel, StdCtrls, ExtCtrls, Math;

type

TMainForm = class(TForm)

MainMenu1: TMainMenu;

N1: TMenuItem;

N2: TMenuItem;

N3: TMenuItem;

N4: TMenuItem;

sgTable: TStringGrid;

OpenDialog1: TOpenDialog;

SaveDialog1: TSaveDialog;

N5: TMenuItem;

N6: TMenuItem;

Panel1: TPanel;

pnLog: TPanel;

lbLog: TListBox;

N7: TMenuItem;

sgTable2: TStringGrid;

procedure N2Click(Sender: TObject);

procedure N6Click(Sender: TObject);

procedure N4Click(Sender: TObject);

procedure N7Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

MainForm: TMainForm;

implementation

uses uSettings;

{$R *.dfm}

procedure TMainForm.N2Click(Sender: TObject);

var

WorkBook: OleVariant;

CompanySheet: OleVariant; //лист с компаниями

WorkSheet: OleVariant; //лист с акциями

iRow, iCol: integer; //индексы строки и столбца

i : integer;

begin

if not OpenDialog1.Execute then

exit;

//очищаем предыдущие данные

for iRow := 0 to sgTable.RowCount-1 do

for iCol := 0 to sgTable.ColCount-1 do

sgTable.Cells[iCol, iRow] := '';

sgTable.RowCount := 2;

lbLog.Items.Clear;

RunExcel; //запускаем Excel

if OpenWorkBook(OpenDialog1.FileName,false) then

begin

//подготавливаем данные

WorkBook := MyExcel.WorkBooks.Item[1];

CompanySheet := WorkBook.Sheets.Item[1];

WorkSheet := WorkBook.Sheets.Item[2];

iRow := 2;

//считываем в нашу таблицу

while Trim(WorkSheet.Cells[iRow,1]) <> '' do

begin

iCol := 1;

while Trim(WorkSheet.Cells[iRow, iCol]) <> '' do

begin

sgTable.Cells[iCol-1, iRow-2] := WorkSheet.Cells[iRow, iCol];

inc(iCol);

end;

sgTable.RowCount := sgTable.RowCount+1;

inc(iRow);

end;

sgTable.RowCount := sgTable.RowCount-2;

//считываем тест.выборку

WorkSheet := WorkBook.Sheets.Item[3];

iRow := 2;

sgTable2.RowCount := 2;

//считываем в нашу таблицу

while Trim(WorkSheet.Cells[iRow,1]) <> '' do

begin

iCol := 1;

while Trim(WorkSheet.Cells[iRow, iCol]) <> '' do

begin

sgTable2.Cells[iCol-1, iRow-2] := WorkSheet.Cells[iRow, iCol];

inc(iCol);

end;

sgTable2.RowCount := sgTable2.RowCount+1;

inc(iRow);

end;

sgTable2.RowCount := sgTable2.RowCount-1;

//находим отношение посл.к первому

for i := 1 to sgTable2.ColCount-1 do

begin

sgTable2.Cells[i, sgTable2.RowCount-1] := FloatToStr(

StrToFloat(sgTable2.Cells[i, sgTable2.RowCount-2]) /

StrToFloat(sgTable2.Cells[i, 2]));

end;

end;

StopExcel; //выходим из Excel

end;

procedure TMainForm.N4Click(Sender: TObject);

begin

Close;

end;

procedure TMainForm.N6Click(Sender: TObject);

var

i, j: integer;

addTable : array[0..1000, 0..4] of real; //таблица не меняется

dinTable : array[0..1000, 0..4] of real; //зависит от пакета акций

X, P : array[0..1000] of real; //массивы X и P

PX : array[0..1000] of real; //X*P*100/492

gistogram : array[0..1000] of integer; //гистограмма

curGistogramValue: real; //текущее значение в гистограмме

curGistogramIndex: integer;//текущий индекс в гистограмме

raspredelenieFunc: array[0..1000] of real;

minPX : real; //min элементы PX (их принимаем за нижнюю грань)

iminPX: integer; //индекс мин. элемента для сортировки

sumNegative, sumPositive: real;//суммы кубов отриц и квадратов - для положительных

lmaxNumber: real; //максимальный параметр (который ищем)

bestPortfel:array[0..4] of real;

iZero: integer; //нулевой индекс

PXlower : integer;

portfel : array[0..4] of real;

nRow, nCol: integer;

k1, k2, k3, k4, k5: integer; //пакет(помноженный на 10)

step : integer; //шаг - 10 - точность

temp : real;

t: integer;

kpower, spower: real; //k,s степени

kbestpower, sbestpower: real; //k,s - лучшие степени

kpowerCurrent, spowerCurrent: real;

lnumber : real;

kmaxpower, smaxpower : real;

maxDohod : real;

maxDohodPortfel : array[0..4] of real;

lastRowTable2 : array[0..4] of real;

begin

kmaxpower := StrToFloat(SettingsForm.edKpower.Text)+0.1;

smaxpower := StrToFloat(SettingsForm.edSpower.Text)+0.1;

nRow := sgTable.RowCount-1;

nCol := 5;

maxDohod := 0.0;

//выполняем первый этап

for i := 0 to nCol-1 do

addTable[0, i] := 1.0;

for i := 1 to nRow-1 do

for j := 0 to nCol-1 do

addTable[i, j] := StrToFloat(sgTable.Cells[j+1, i+1]) / StrToFloat(sgTable.Cells[j+1, i]);

lbLog.Items.Add('Первый этап пройден. Обработка второго этапа');

step := 10; //шаг = 1/step

kpower := 0.2;

for i := 0 to 4 do

lastRowTable2[i] := StrToFloat(sgTable2.Cells[i+1, sgTable2.RowCount-1]);

while kpower < kmaxpower do

begin

spower := 0.2;

while spower < smaxpower do

begin

lmaxNumber := 100;

//выполняется второй этап

for k1 := 0 to step do

for k2 := 0 to step-k1 do

for k3 := 0 to step-k1-k2 do

for k4 := 0 to step-k1-k2-k3 do

begin

//сбрасываем значение гистограммы и функции распределения

for i := 0 to nRow-1 do

begin

gistogram[i] := 0;

raspredelenieFunc[i] := 0.0;

end;

k5 := step-k1-k2-k3-k4;

portfel[0] := k1*1.0/step;

portfel[1] := k2*1.0/step;

portfel[2] := k3*1.0/step;

portfel[3] := k4*1.0/step;

portfel[4] := k5*1.0/step;

//вычисляем доход

temp := portfel[0] * lastRowTable2[0] +

portfel[1] * lastRowTable2[1] +

portfel[2] * lastRowTable2[2] +

portfel[3] * lastRowTable2[3] +

portfel[4] * lastRowTable2[4];

if temp > maxDohod then

begin

maxDohod := temp;

//запоминаем портфель

for i := 0 to 4 do

maxDohodPortfel[i] := portfel[i];

end;

//вычисляем долю акций в зависимости от пакета

//2 этап и вычисление массива P

for i := 0 to nRow-1 do

begin

P[i] := 0;

for j := 0 to nCol-1 do

begin

dinTable[i,j] := addTable[i,j] * portfel[j];

P[i] := P[i] + dinTable[i,j];

end;

end;

//вычисление массива X

for i := 0 to nRow-2 do

X[i] := (P[i+1]-P[i]) / (P[i+1]+P[i]);

X[nRow-1] := -1.0;

//вычисление массива PX

for i := 0 to nRow-2 do

PX[i] := X[i]*P[i]*1000/nRow;

PX[nRow-1] := X[nRow-1]*P[nRow-1]*10/nRow;

//распределение по гистограмме

//сортировка PX[i]

for i := 0 to nRow-2 do

begin

iminPX := i;

for j := i+1 to nRow-1 do

if PX[j] < PX[iminPX] then

iminPX := j;

//меняем местами

temp := PX[i];

PX[i] := PX[imaxPX];

PX[imaxPX] := temp;

end;

//нахождение минимума и максимума->верхней и нижней грани

minPX := PX[0];

PXlower := Round(minPX*step*step);

minPX := (PXlower-1)/step/step;

//построение гистограммы

curGistogramValue := minPX + 1.0/step/step;

curGistogramIndex := 0;

iZero := 0;

for i := 0 to nRow-1 do

begin

//определяем диапазон куда входит PX[i]

if PX[i] < curGistogramValue then

inc(gistogram[curGistogramIndex])

else

begin

//увеличиваем curGistogramValue до тех пор пока не дойдем до этой точки

while (PX[i] > curGistogramValue) do

begin

curGistogramValue := curGistogramValue + 1.0/step/step;

inc(curGistogramIndex);

if (curGistogramValue < 0.00000000001) and (curGistogramValue > -0.000000000001) then

iZero := curGistogramIndex;

end;

inc(gistogram[curGistogramIndex]);

end;

end;

//построение функции распределения

raspredelenieFunc[0] := gistogram[0];

for i := 1 to curGistogramIndex do

raspredelenieFunc[i] := raspredelenieFunc[i-1] + gistogram[i];

for i := 0 to curGistogramIndex do

raspredelenieFunc[i] := raspredelenieFunc[i] / nRow;

sumPositive := 0;

for i := iZero+1 to curGistogramIndex do

sumPositive := sumPositive + power(1-raspredelenieFunc[i], kpower);

sumNegative := 0;

for i := 0 to iZero do

sumNegative := sumNegative + power(raspredelenieFunc[i], spower);

if (sumNegative + sumPositive) < lminNumber then

begin

lminNumber := sumNegative + sumPositive;

//запоминаем портфель

for i := 0 to 4 do

bestPortfel[i] := portfel[i];

end;

end;

lbLog.Items.Add('портфель (' + FloatToStrF(bestportfel[0], ffGeneral, 2,2) + '; ' +

FloatToStrF(bestportfel[1], ffGeneral, 2,2) + '; ' + FloatToStrF(bestportfel[2], ffGeneral, 2,2) + '; ' +

FloatToStrF(bestportfel[3], ffGeneral, 2,2) + '; ' + FloatToStrF(bestportfel[4], ffGeneral, 2,2) + ')');

lbLog.Items.Add('Минимальное значение ' + FloatToStrF(lminNumber, ffGeneral, 4,5));

lbLog.Items.Add('k=' + FloatToStrF(kpower, ffGeneral, 1,2) + ', s=' + FloatToStrF(spower, ffGeneral, 1, 2));

lbLog.Items.Add('');

spower := spower+0.2;

end;

kpower := kpower+0.2;

end;

{

//выполняется второй этап

for k1 := 0 to step do

for k2 := 0 to step-k1 do

for k3 := 0 to step-k1-k2 do

for k4 := 0 to step-k1-k2-k3 do

begin

//сбрасываем значение гистограммы и функции распределения

for i := 0 to nRow-1 do

begin

gistogram[i] := 0;

raspredelenieFunc[i] := 0.0;

end;

k5 := step-k1-k2-k3-k4;

portfel[0] := k1*1.0/step;

portfel[1] := k2*1.0/step;

portfel[2] := k3*1.0/step;

portfel[3] := k4*1.0/step;

portfel[4] := k5*1.0/step;

//portfel[0] := 0.15;

//portfel[1] := 0.2;

//portfel[2] := 0.3;

//portfel[3] := 0.2;

//portfel[4] := 0.15;

//вычисляем долю акций в зависимости от пакета

//2 этап и вычисление массива P

for i := 0 to nRow-1 do

begin

P[i] := 0;

for j := 0 to nCol-1 do

begin

dinTable[i,j] := addTable[i,j] * portfel[j];

P[i] := P[i] + dinTable[i,j];

end;

end;

//вычисление массива X

for i := 0 to nRow-2 do

X[i] := (P[i+1]-P[i]) / (P[i+1]+P[i]);

X[nRow-1] := -1.0;

//вычисление массива PX

for i := 0 to nRow-2 do

PX[i] := X[i]*P[i]*1000/nRow;

PX[nRow-1] := X[nRow-1]*P[nRow-1]*10/nRow;

//распределение по гистограмме

//сортировка PX[i]

for i := 0 to nRow-2 do

begin

iminPX := i;

for j := i+1 to nRow-1 do

if PX[j] < PX[iminPX] then

imaxPX := j;

//меняем местами

temp := PX[i];

PX[i] := PX[imaxPX];

PX[imaxPX] := temp;

end;

//нахождение минимума и максимума->верхней и нижней грани

minPX := PX[0];

PXlower := Round(minPX*step*step);

minPX := (PXlower-1)/step/step;

//построение гистограммы

curGistogramValue := minPX + 1.0/step/step;

curGistogramIndex := 0;

iZero := 0;

for i := 0 to nRow-1 do

begin

//определяем диапазон куда входит PX[i]

if PX[i] < curGistogramValue then

inc(gistogram[curGistogramIndex])

else

begin

//увеличиваем curGistogramValue до тех пор пока не дойдем до этой точки

while (PX[i] > curGistogramValue) do

begin

curGistogramValue := curGistogramValue + 1.0/step/step;

inc(curGistogramIndex);

if (curGistogramValue < 0.00000000001) and (curGistogramValue > -0.000000000001) then

iZero := curGistogramIndex;

end;

inc(gistogram[curGistogramIndex]);

end;

end;

//построение функции распределения

raspredelenieFunc[0] := gistogram[0];

for i := 1 to curGistogramIndex do

raspredelenieFunc[i] := raspredelenieFunc[i-1] + gistogram[i];

for i := 0 to curGistogramIndex do

raspredelenieFunc[i] := raspredelenieFunc[i] / nRow;

lNumber := 10;

kpower := 0.2;

while kpower < kmaxpower do

begin

sumPositive := 0;

for i := iZero+1 to curGistogramIndex do

sumPositive := sumPositive + power(1-raspredelenieFunc[i], kpower);

spower := 0.2;

while spower < smaxpower do

begin

sumNegative := 0;

for i := 0 to iZero do

sumNegative := sumNegative + power(raspredelenieFunc[i], spower)

if (sumNegative + sumPositive) < lNumber then

begin

kpowerCurrent := kpower;

spowerCurrent := spower;

lNumber := sumNegative + sumPositive;

end;

spower := spower+0.2;

end;

kpower := kpower+0.2;

end;

if lnumber < lminNumber then

begin

//запоминаем коэффициенты

lminNumber := lNumber;

kbestpower := kpowerCurrent;

sbestpower := spowerCurrent;

//запоминаем портфель

for i := 0 to 4 do

bestPortfel[i] := portfel[i];

end;

lbLog.Items.Add('портфель (' + FloatToStrF(portfel[0], ffGeneral, 2,2) + '; ' +

FloatToStrF(portfel[1], ffGeneral, 2,2) + '; ' +

FloatToStrF(portfel[2], ffGeneral, 2,2) + '; ' +

FloatToStrF(portfel[3], ffGeneral, 2,2) + '; ' +

FloatToStrF(portfel[4], ffGeneral, 2,2) + ')=>' +

FloatToStrF(lNumber, ffGeneral,4,5) +

' k=' + FloatToStrF(kpowerCurrent, ffGeneral, 1,2) +

' s=' + FloatToStrF(spowerCurrent, ffGeneral, 1,2));

end;

//вывод результата

lbLog.Items.Add('--------------------------------------------');

lbLog.Items.Add('--------------------------------------------');

lbLog.Items.Add('портфель (' + FloatToStrF(bestportfel[0], ffGeneral, 2,2) + '; ' +

FloatToStrF(bestportfel[1], ffGeneral, 2,2) + '; ' + FloatToStrF(bestportfel[2], ffGeneral, 2,2) + '; ' +

FloatToStrF(bestportfel[3], ffGeneral, 2,2) + '; ' + FloatToStrF(bestportfel[4], ffGeneral, 2,2) + ')');

lbLog.Items.Add('Минимальное значение ' + FloatToStrF(lminNumber, ffGeneral, 4,5));

lbLog.Items.Add('k=' + FloatToStrF(kbestpower, ffGeneral, 1,2) + ', s=' + FloatToStrF(sbestpower, ffGeneral, 1, 2));

}

lbLog.Items.Add('');

lbLog.Items.Add('Максимальная доходность ' + FloatToStrF(maxDohod, ffGeneral, 4,5));

lbLog.Items.Add('Портфель с максимальной доходностью (' + FloatToStrF(maxDohodPortfel[0], ffGeneral, 2,2) + '; ' +

FloatToStrF(maxDohodPortfel[1], ffGeneral, 2,2) + '; ' + FloatToStrF(maxDohodPortfel[2], ffGeneral, 2,2) + '; ' +

FloatToStrF(maxDohodPortfel[3], ffGeneral, 2,2) + '; ' + FloatToStrF(maxDohodPortfel[4], ffGeneral, 2,2) + ')');

end;

procedure TMainForm.N7Click(Sender: TObject);

begin

SettingsForm.ShowModal;

end;

end.

Размещено на Allbest.ru


Подобные документы

  • Понятие портфеля ценных бумаг и основные принципы его формирования. Модели оптимального портфеля ценных бумаг и возможности их практического применения. Типы инвесторов, работающих на российском фондовом рынке. Недостатки российского фондового рынка.

    контрольная работа [34,0 K], добавлен 25.07.2010

  • Анализ состояния современного рынка ценных бумаг в Украине, перспективы его развития. Обоснование выбора финансовых инструментов. Характеристика объектов инвестирования. Расчёт основных характеристик портфеля ценных бумаг. Характеристика риска портфеля.

    курсовая работа [152,3 K], добавлен 07.06.2010

  • Общая характеристика фондового рынка Украины. Характеристика предприятий, акции которых использовались при формировании портфеля ценных бумаг. Формирование портфеля ценных бумаг. Оптимизация портфеля ценных бумаг при наличии безрискового актива.

    курсовая работа [423,4 K], добавлен 04.05.2011

  • Теоретические и прикладные аспекты экономико-математической модели Шарпа и Марковица в области оптимизации портфеля ценных бумаг. Основные положения и особенности функционирования рынка ценных бумаг, инвестиционной деятельности в области биржевых рынков.

    реферат [121,6 K], добавлен 22.06.2013

  • Сущность, виды и цели формирования портфелей ценных бумаг коммерческого банка; их функции: прирост стоимости, создание резерва ликвидности. Оценка рисков на рынке ценных бумаг. Анализ структуры и доходности портфеля ценных бумаг ОАО "Сбербанк Россия".

    реферат [32,9 K], добавлен 04.09.2014

  • Сущность, цели и задачи рейтинга ценных бумаг (ЦБ). Макроэкономический и отраслевой анализ ЦБ, обращающихся на фондовом рынке Украины. Формирование портфеля ЦБ с низким уровнем риска. Разработка рекомендаций по формированию и управлению портфелем ЦБ.

    дипломная работа [1,1 M], добавлен 25.05.2010

  • Виды и классификация ценных бумаг, степень их доходности и риска. Состояние рынка ценных бумаг как составной части финансового рынка. Анализ фондовой биржи и биржевых операций с ценными бумагами в России; развитие фондового рынка в Краснодарском крае.

    курсовая работа [225,6 K], добавлен 06.01.2014

  • Обзор понятия портфеля ценных бумаг, позволяющего придать совокупности ценных бумаг такие инвестиционные характеристики, которые недостижимы для отдельно взятой ценной бумаги и возможны только при их комбинации. Модели оптимизации портфеля ценных бумаг.

    курсовая работа [563,0 K], добавлен 05.02.2013

  • Виды и доходность ценных бумаг, принципы формирования и оптимизации их портфеля. Финансово-экономическая характеристика ОАО КБ "Севергазбанк", анализ его портфеля ценных бумаг, экономическое обоснование внедрения мероприятий по его совершенствованию.

    дипломная работа [488,8 K], добавлен 07.11.2010

  • Раскрытие механизма функционирования рынка ценных бумаг, его структура. Функциональное назначения рынка ценных бумаг в экономической системе. Проблемы, стоящие перед рынком ценных бумаг в России, перспективы его развития. Ключевые факторы риска.

    курсовая работа [61,6 K], добавлен 18.09.2013

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.