Заболотников_9373_ПР3
.pdfМИНОБРНАУКИ РОССИИ САНКТ-ПЕТЕРБУРГСКИЙ ГОСУДАРСТВЕННЫЙ ЭЛЕКТРОТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ «ЛЭТИ» ИМ. В.И. УЛЬЯНОВА (ЛЕНИНА) Кафедра Информационных систем
ПРАКТИЧЕСКАЯ РАБОТА по дисциплине «Теория принятия решений»
Тема: "Применение методов линейного и динамического программирования для решения практических задач"
Вариант №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