Разработка методики формирования оптимального портфеля ценных бумаг с использованием асимметричных возмущенных мер риска
Асимметричные возмущенные меры риска. Разработка алгоритма формирования оптимального портфеля. Вычислительные эксперименты на базе статистических данных котировок ценных бумаг фондового рынка России для анализа эффективности применения данных мер риска.
Рубрика | Банковское, биржевое дело и страхование |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 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