Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Заболотников_9373_ПР3

.pdf
Скачиваний:
5
Добавлен:
20.06.2023
Размер:
575.18 Кб
Скачать

МИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра Информационных систем

ПРАКТИЧЕСКАЯ РАБОТА по дисциплине «Теория принятия решений»

Тема: "Применение методов линейного и динамического программирования для решения практических задач"

Вариант №42 (394)

Студент гр. 9373

 

Заболотников М.Е.

Преподаватель

 

Пономарев А. В.

 

 

 

 

 

Санкт-Петербург

2022

1

СОДЕРЖАНИЕ

Ведение…………………………………………………………..... 3

1.Задача об инвестиционном портфеле……………………………. 4

1.1.Условие задачи……………………………………………………. 4

1.2.Формализация задачи…………………………………………….. 5

1.3.Решение задачи…………………………………………………… 6

Заключение………………………………………………………... 10

Приложение А…………………………………………………….. 11

2

ВВЕДЕНИЕ

Цель работы: на основе исторических данных об изменении цен акций ряда российских компаний (Сургутнефтегаз, Yandex cIA, Газпром, Сбербанк и Распадская), с применением аппарата квадратичного программирования сформировать и отобразить графически множество Парето инвестиционных портфелей по критериям прибыли и риска, принимая во внимание, что в портфеле не может быть больше 50% акций одной компании. Выбрать один из вариантов состава портфеля, используя аппарат многокритериальной оптимизации.

3

1.ЗАДАЧА ОБ ИНВЕСТИЦИОННОМ ПОРТФЕЛЕ

1.1.Условие задачи

Прибыль от инвестирования в ценные бумаги связана с

изменением (ростом) цены данных бумаг, а риск — с колебанием их цены (которая может оказаться и ниже цены покупки).

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

 

 

 

= [(

 

− 1)]

 

 

 

 

−1

 

где и −1 — цена бумаги в дни i и i−1 соответственно.

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

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

На основе исторических данных об изменении цен акций ряда российских компаний (Сургутнефтегаз, Yandex cIA, Газпром, Сбербанк и Распадская), с применением аппарата квадратичного программирования сформировать и отобразить графически множество Парето инвестиционных портфелей по критериям прибыли и риска,

принимая во внимание, что в портфеле не может быть больше 50% акций одной компании. Выбрать один из вариантов состава портфеля,

используя аппарат многокритериальной оптимизации.

4

1.2.Формализация задачи

Данная задача – задача формирования инвестиционного портфеля,

относящаяся к задачам квадратичного программирования.

Данные компаний за время (1.01.2021-31.12.2021) хранятся в соответствующих файлах, откуда их считывает программа, написанная на языке программирования python.

Параметры задачи:

= 5 – количество компаний

, – цена бумаги -ой компании в день

– риск, связанный с владением бумагой -ой компании

– доходность акции -ой компании

,– ковариация активов -ой и -ой компаний

– доля вложений в -ую ценную бумагу

– доходность портфеля

– риск портфеля

Формулы и ограничения:

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= [(

 

,

 

 

− 1)] , {1. . }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

( −1)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

= [(

 

,

 

 

− 1)] , {1. . }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

( −1)

 

 

 

 

 

 

 

 

 

( ) = ∑

 

 

 

 

 

 

 

 

 

=1

 

 

 

 

 

 

 

 

 

 

 

 

( ) = (∑

1≤ ≤

2

+ 2

1≤ < ≤

 

,

) →

 

 

 

 

 

 

 

 

 

 

 

=1 = 1

0 ≤ ≤ 0,5, = {1. . }

(1)

(2)

(3)

(4)

(5)

(6)

5

1.3.Решение задачи

Решать данную задачу стоит, используя аппарат квадратичного программирования и аппарат многокритериальной оптимизации, так как нам необходимо оптимизировать две функции (3 и 4), одна из которых является нелинейной (4).

Данные об акциях возьмём за период времени с 1-го января 2021-го года по 31-е декабря 2021 года:

stocks = ['GAZP_210101_211231.csv',

'RASP_210101_211231.csv',

'SBER_210101_211231.csv',

'SNGS_210101_211231.csv',

'YNDX_210101_211231.csv']

Далее перейдём к относительным приращениям и вычислим ковариационную матрицу:

variations = []

total_g = [0, 0, 0, 0, 0] #доходности каждого из пяти активов total_r = [0, 0, 0, 0, 0] #риски каждого из пяти активов

i = 0

for filename in stocks:

df = pd.read_csv(filename)

Dm_i = (df['<CLOSE>'].shift(-1) / df['<CLOSE>'] - 1).dropna() for j in range(253):

total_g[i] += Dm_i.iloc[j] total_g[i] *= 100

total_r[i] = np.var(Dm_i) i += 1

variations.append((df['<CLOSE>'].shift(-1) / df['<CLOSE>'] - 1).dropna().values.reshape(1, -1))

variations = np.concatenate(variations, axis = 0) C = np.cov(variations)

Теперь опишем все ограничения. Опишем ограничения-равенства, связанные с долями активов в портфеле. Сумма долей активов должна равняться единице, а сумма их доходностей определённому числу. Запишем левые части этих ограничений:

A = matrix([[1.0, 1.0, 1.0, 1.0, 1.0],

[total_g[0], total_g[1], total_g[2], total_g[3],

total_g[4]]])

6

Правые части этих неравенств будут описаны чуть позже. А сейчас опишем ограничения-неравенства (G – левые части, h – правые):

G = matrix([[1.0, 0.0, 0.0, 0.0, 0.0], [0.0, 1.0, 0.0, 0.0, 0.0], [0.0, 0.0, 1.0, 0.0, 0.0], [0.0, 0.0, 0.0, 1.0, 0.0], [0.0, 0.0, 0.0, 0.0, 1.0], [-1.0, 0.0, 0.0, 0.0, 0.0], [0.0, -1.0, 0.0, 0.0, 0.0], [0.0, 0.0, -1.0, 0.0, 0.0], [0.0, 0.0, 0.0, -1.0, 0.0], [0.0, 0.0, 0.0, 0.0, -1.0]])

h = matrix([[0.5], [0.5], [0.5], [0.5], [0.5], [0.0], [0.0], [0.0], [0.0], [0.0]])

Далее опишем целевую функцию. Так как целевая функция складывается из риска и доходности портфеля, то эту функцию можно описать следующим образом:

= ∑

2

+ 2 ∑

 

 

 

 

 

 

 

 

 

1≤ <

 

 

1≤ < ≤

 

Наша задача сводится к минимизации данной функции – минимизации риска портфеля – при фиксированной доходности.

Чтоб минимизировать функцию, нужно решить задачу квадратичного программирования. Разберёмся, откуда какие матрицы берутся:

1.Матрица P – матрица коэффициентов перед произведениями переменных в целевой функции. Её мы получаем из ковариационной матрицы. Выглядит матрица P следующим образом:

7

2.ttl – это матрица коэффициентов целевой функции перед переменными. Но так как в целевой функции линейные слагаемые отсутствуют, данный вектор будет целиком и полностью состоять из нулей:

3.Матрицы G, h, A и b уже были описаны выше. Это матрицы и вектора

ограничений.

Так как функция qp(…) решает задачу минимизации функции вида

= 12 + ,

поэтому при передачи матрицы P необходимо домножить её на 2, чтобы функция qp(…), разделив эту матрицу на 2, получила исходную функцию, которую надо минимизировать. Итак, решение задачи квадратичного программирования:

ttl = matrix([0.0, 0.0, 0.0, 0.0, 0.0], tc = 'd') profits = matrix(0.0, (1, 99))

risks = matrix(0.0, (1, 99)) ports = np.zeros((99, 5)) for i in range(99):

profits[i] = profits[i] + (17 + 0.05 * i) for i in range(99):

b = matrix([[1.0], [profits[i]]]) #вектор правых частей ограничений-равенств

portfolios = qp(2 * P, ttl, G.T, h.T, A.T, b.T)['x'] for j in range(5):

ports[i][j] = portfolios[j] for m in range(5):

for n in range(5):

prod = Ps[m][n] * portfolios[m] * portfolios[n] risks[i] += prod

Результаты программы представлены как пары (портфель, доходность):

8

Например, портфель, приносящий доходность в 17% имеет следующий состав:

Газпром

Распадская

Сбербанк

Сургутнефтегаз

Яндекс

 

 

 

 

 

20.49%

4.97%

25.41%

14.11%

35.02%

 

 

 

 

 

Посчитаем связанные с этими доходностями риски и построим множество Парето (рассматриваем все варианты доходностей, начиная с 17%, 17.05%, 17.1% и т.д. до 21.9%):

9

ЗАКЛЮЧЕНИЕ

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

которых в процентном соотношении были распределены ценные бумаги пяти компаний. Также было построено множество Парето.

10

Соседние файлы в предмете Теория принятия решений