L3__bach

advertisement
Работа с денежными потоками
Рассмотрим модельную задачу: инвестор на протяжении n лет вкладывает в
начале каждого i-ого базового периода Pi 1 а в конце того же периода получает
доход Ci . Текущая процентная ставка r ( или учетная ставка d). В частности.
Величины P и C могут быть равны нулю.
Связь текущей стоимость в момент времени tk  kT  t , T – базовый временной
период и будущей стоимостью: fv  pv(1  r ) k 1  t r 


 T 
Можно требовать t=0, так как платежи часто осуществляются в конце периода.
Также можно выписать текущую стоимость проекта в виде потока платежей
n
nvp  
i 0
CFi
(1  r )i
n
Можно пересчитать будущую стоимость проекта:
fv   CFi (1  r ) n i
i 0
Функции MatLab
• nvp=pvvar(cash_flow, percent, payments_date)
• fv=fvvar(cash_flow, percent, payments_date)
• Внутренняя доходность оценивается с помощью
функции
inner_income=xirr(cash_flow, payments_date,
start_condition, number_iterations)
• cash_flow – массив потока платежей CF
• percent – процентная ставка
• payments_date – даты платежей
• В функции xirr последние два аргумента
необязательные. Start_condition дает стартовую
точку для решения уравнения COF=CIF.
Сложные критерии.
Предыдущие критерии достаточно просты. Имеется два
критерия, которые позволяют провести более точный
анализ платежей.
Первый – дюрация Маколея. Второй – выпуклость.
Пусть стоимость положительного потока платежей P
зависит от процентной ставки r достаточно гладко.
Тогда функцию P(r) можно разложить в ряд Тейлора в
окрестности фиксированной точки r.
После преобразований формулы Тейлора, получим
формулу
1

2
P  P(r )  Dm (r ) r  V (r )( r ) 
2


Здесь D (r ) - модифицированная дюрация, а V(r) –
выпуклость.
m
Сложные критерии. Дюрация
Модифицированная дюрация связана с дюрацией
Маколея следующим соотношением D (r )  D(r )
1 r
Собственно дюрация выражается через параетры
задачи:
n
n
pv(CF )
m
D(r )   ti wi , wi 
i 1
i
P(r )
, P (r )   pv(CFi )
i 1
Она имеет смысл средневзвешенного времени
полного платежа.
Сложные критерии. Выпуклость.
Как и дюрация, выпуклость вычисляется через
параметры задачи:
n
1 

2
V (r ) 
t wi  D(r ) 
2  i
(1  r )  i 1

Момент времени, как и в дюрации, ti  i
Дюрация представляет собой линейный показатель
изменения цены P при изменении ставки r на  r .
При таком изменении цена P изменяется нелинейно,
но как выпуклая функция ставки. Выпуклость и
показывает на сколько выпукла эта функция при
малом изменении.
С математической точки зрения D(r )  P '(r ),V (r )  P ''(r )
Сложные критерии. MatLab.
Для вычисления дюрации используется функция
[duration, mod_duration] = cfdur(flow, income)
Для вычисления выпуклости – функция
convexity =
cfconv(flow, income)
Параметры. Аргумент flow – массив последовательных
платежей. Второй – income – ставка доходности для
одного периода.
Выходные аргументы. Аргумент duration – дюрация
Маколея, mod_duration – модифицированная
дюрация. Convexity – выпуклость.
Дюрация и модифицированная дюрация имеют
размерность количества периодов. Выпуклость –
количество периодов в квадрате.
Пример. Простые критерии.
• Рассмотрим модельную задачу. Имеется два проекта на 5
лет, начиная с конца 2011 года, при текущей процентной
ставке 10%. Платежи производятся в последний рабочий
понедельник месяца.
• Проект 1. Начальное вложение 100 млн. руб. Получение
ежегодных доходов, начиная с конца второго года по 47,
53, 30 и 20 млн. руб.
• Проект 2. Начальное вложение 80 млн. руб.
Дополнительное вложение 40 млн. руб в начале 4-ого
года. Ежегодные доходы с конца первого года по 25, 15,
20, 30 и 80 млн. руб. В последний год ожидается платеж
двумя равными частями в конце каждого полугодия.
• Без учета зависимости стоимости платежей от времени, то
доход от каждого из этих проектов равен 50 млн. руб.
Последовательное составление
программы.
• Составление массивов платежей.
Первый проект. Cf1=[-100, 0, 47, 53, 30, 20]
Второй проект. Cf2=[-80, 25, 15, -20, 30, 40, 40]
• Отрицательное число означает исходящий
платеж.
Построение массива дат платежей.
• Первый проект.
>> date_flow1=[];
for i = 1:6
date_flow1 (i) = lweekdate(2, 2011 + i, 12);
end
• Второй проект.
>> date_flow2=[];
date_flow2 = date_flow1;
date_flow2(6) = lweekdate(2, 2017, 6) ;
date_flow2(7) = date_flow1(6);
Простые критерии.
• Сравнение по критерию npv
npv1 = pvvar(Cf1, 0.1, date_flow1)
npv2 = pvvar(Cf2, 0.1, date_flow2)
• Критерий fv:
fv1 = fvvar(Cf1, 0.1, date_flow1)
fv2 = fvvar(Cf2, 0.1, date_flow2)
• Расчет внутренней ставки доходности (критерий IRR)
int_rate1 = xirr(Cf1, date_flow1, 0.13, 100)
int_rate2 = xirr(Cf2, date_fIow2, 0.13, 100)
Листинг программы.
Результаты
>> cash_flow
npv1 =
11.6828
11,5500
npv2 =
11.5804
11,4774
fv1 =
18.7847
18,6050
fv2 =
18.6199
18,4881
int_rate1 =
0.1408
0,1403
int_rate2 =
0.1434
0,1429
По первому и второму критерию
первый проект
предпочтительнее, чем
второй.
Однако по внутренней норме
доходности второй лучше.
Оба проекта показывают
достаточно близкие значения,
поэтому воспользуемся двумя
оставшимися критериями для
оценки. Рассчитаем дюрацию
и выпуклость.
Пример. Сложные критерии. Расчет
поступлений.
• В качестве поступлений во втором проекте
следует выбирать полугодовой период, так как в
нем присутствует выплата за полугодовой
период.
• Поэтому и в первом проекте следует выбирать
полугодовой интервал. Иначе будут
несоразмерные величины.
Пример. Расчет дюрации и
выпуклости.
Cf11=[0, 0, 0, 47, 0, 53, 0, 30, 0, 20];
Cf21=[0, 25, 0, 15, 0, 0, 0, 30, 40, 40];
dur1 = cfdur(Cf11, 0.1/2)
cxl = cfconv(Cf11, 0.1/2)
dur2 = cfdur(Cf21, 0.1/2)
cx2 = cfconv(Cf21, 0.1/2)
Листинг программы.
Результаты.
>> cash_flow1
dur1 =
6.1118
6,1118
cxl =
42.9530
42,9530
dur2 =
6.9540
6,9540
cx2 =
58.9449
58,9449
Из расчета видно, что второй поток чувствительнее, чем
первый, к изменению процентной ставки (оба
параметра больше). Как следствие имеет больший
риск, связанный с возможными ее изменениями в
период осуществления проекта.
Задача. Можно было бы воспользоваться очевидным
фактом, что два полугодия составляют один год и
пользоваться этим при вычислении дюрации. Однако
это не так: результаты будут отличаться на порядок
o(( r ) 2 ) . Проверить это для рассмотренного
примера.
Анализ кредитов. Функция amortize.
[per_credit, per_percent, debt, payment] = amortize(rate, periods, summ, balance, moment)
Первые три аргумента обязательны:
rate - процентная ставка по кредиту за один период
periods – полное число периодов расчета по займу
summ – сумма полученных заемщиком денежных средств
Два последних аргумента необязательны:
moment (по умолчанию 0) – флаг, равный 1 при выплатах в начале периода и 0 – в конце
balance (по умолчанию 0) – та сумма, которая остается неоплаченной, если задается
отрицательное число. Или сумма, которую будет должен кредитор заемщику после
погашения долга.
Возвращает эта функция три массива (первые три аргумента) размерности periods и одно
число:
per_credit – платежи по сумме кредита за каждый период
per_percent – выплаты по начисленным процентам за остаток кредита в каждый период
debt – оставшийся долг после текущего платежа
payment – сумма общей разовой выплаты
Анализ кредитов. Другие функции.
Процентную ставку позволяет вычислить функция
• rate = annurate(periods, payment, summ, balance, moment)
Рассчитать разовый платеж можно с помощью
• payment = payper(rate, periods, summ, balance, moment)
Следующая функция позволяет работать с накоплениями в
банке и определить за какое время накопится в банке
необходимая сумма.
• periods = annuterm(rate, payment, summ, deposit, moment)
• summ – сумма на начало вклада; deposit – сумма на конец
вклада.
Анализ кредитов. Пример.
• Пусть необходимо принять решение о
рассмотрении кредита в 1 млн. руб. в течении 10
лет. Процентная ставка – 20% годовых.
Результаты.
per_credit =
38.5228 46.2273
55.4728 66.5673
79.8808 95.8569
115.0283 138.0340
165.6408 198.7690
per_percent =
200.0000 192.2954
183.0500 171.9554
158.6420 142.6658
123.4944 100.4888
72.8820 39.7538
debt =
961.4772 915.2499
859.7772 793.2098
713.3291 617.4721
502.4438 364.4098
198.7690 -0.0000
payment =
238.5228
Продолжение примера.
Результат
Функция annurate
rate1 =
0.2000
Функция payper
payment1 =
238.5228
Функция annuterm
periods =
7.9964
Портфельный анализ рисковых
активов.
Основные функции портфельного анализа основаны на моделях Марковица и
Тобина и их модификациях. Вначале кратко поясним суть вопроса.
В общей постановке задача портфельного инвестирования для инвестора
формулируется так. Инвестор рассматривает возможность вложения капитала
в некоторый набор акций (рисковых активов), выбранный им из личных
соображений, и желает составить портфель ценных бумаг так, чтобы его
доходность была бы наибольшей при фиксированном риске или риск был бы
наименьшим при выбранной доходности портфеля. В рассматриваемой
модели за меру риска принимается среднеквадратическое отклонение
доходности ценных бумаг или портфеля от ее математического ожидания. На
выбор портфеля влияет также отношение инвестора к риску, т. е. насколько он
готов увеличить рискованность вложения с целью получить большую
доходность.
В простейшем случае поиск наилучшего портфеля состоит из двух шагов:
построение эффективной границы Марковица с использованием функций
frontcon или portopt и выбор портфеля с помощью функции portalloc в
соответствии с отношением инвестора к риску и значениями процентных
ставок для безрискового вложения и заимствования.
Математическая постановка.
Пусть инвестор рассматривает вопрос о
составлении портфеля из n активов. Ожидаемые
доходности которых представлены вектором y,n а
T
y

(
y
,...,
y
)
,V  vij 
их ковариации – матрицей V:
1
n
i , j 1
T
x

(
x
,...,
x
)
Сам портфель определяется вектором
,
1
n
компоненты которого указывают долю покупки
того или иного актива, xi  0 .
Можно наложить дополнительное естественное
условие на вектор x, означающее, что
n
xi  1
вкладываются все имеющиеся средства 
i 1
Математическая постановка.
Продолжение.
Ограничение xi  0 означает, что инвестор не
может осуществлять краткосрочные продажи
(продавать заимствованные бумаги).
Ожидаемая доходность обозначается через y , а его
риск (среднеквадратичное отклонение) -  .
Справедливы следующие формулы-определения
p
p
y p  xT y,  p  xTVx
Математическая постановка.
Продолжение. II.
Пусть ymin и ymax - наименьшая и наибольшая
доходности. Тогда y  [ y , y ] , и если для каждого
фиксированного значения доходности y
построить график y p ( p ), то получится кривая.
называемая пулей Марковица. Часть этой
кривой является эффективной границей.
Каждой точке на эффективной границе
соответствует эффективный портфель  y ,   в
смысле седловой точки.
p
min
max
0
p
0
p
Построение эффективной границы.
Итак, инвестор определился с доходностями и рисками по
каждому вложению. Он построил матрицу коэффициентов
корреляции между этими активами. MatLab в расчетах
пользуется матрицей ковариаций.
Переход к этой матрице осуществляется при помощи
функции
MatrCov = corr2cov(Disp, MatrCorr)
Здесь Disp – вектор среднеквадратичных отклонений.
Необходимо отметить, что матрица корреляции должна
быть симметричной и положительно определенной. В
MatLab нет проверки на эти условия, поэтому в случае
ошибки можно получить неправдоподобные результаты.
Построение эффективной границы. II
[Prisk, Pincome, Pparts] = portopt(Aincome, Acov, Pnumber,
PNincome, borders)
Функция имеет два обязательных аргумента: Aincome и Acov
– вектор доходностей и матрицу ковариаций.
Параметры Pnumber, Pnincome задают разбиение интервала
[ ymin. , ymax ] . Если задан один из них, то второй должен быть
пустым. Определяют количество портфелей.
Параметр borders задает ограничения на неизвестные x.
Выходные параметры – вектор рисков для каждого
портфеля, вектор ожидаемых доходностей портфеля и
матрица, в которой каждая строка – доли активов в
портфеле.
Построение ограничений.
Как правило ограничения имеют следующий вид
0  Li  xi  U i  1 .
Однако в MatLab можно задавать и более сложные
ограничения. Делается это с помощью функции
borders = portcons(‘type’, data1, data2, ... , dataN)
• Default. Стандартные ограничения  x  1 ,xi  0 . Передается
один параметр – число активов.
• AssetLims. Ограничения на активы. Передается два
обязательных аргумента: первый – вектор L, второй –
вектор U. Один необязательный аргумент – число активов.
• Custom. Произвольные ограничения Ax  b . Передается
два обязательных аргумента. Первый – матрица A
размерности число ограничений на число активов. Второй
– вектор b.
n
i 1
i
Выбор оптимального портфеля.
Построение эффективной границы дает инветору
множество эффективных портфелей. Из них
выбирается тот, который наилучше отражает его
отношение к риску: чем выше доходность, тем
выше риск.
MatLab использует функцию предпочтения
1
Неймана-Монгерштерна U ( y p ,  p )  y p  a p
2
Здесь a – индекс неприятия риска.
Выбор оптимального портфеля. II
Уравнение U=const описывает кривую
безразличия.
Инвестор стремится максимизировать функцию U
на множестве допустимых портфелей.
Поэтому оптимальным будет тот портфель,
который отвечает точке касания эффективной
границы и кривой безразличия.
Выбор оптимального портфеля. III
Необходимо учесть, что MatLab позволяет использовать
модифицированную модель инвестирования.
Инвестор может вкладывать средства в безрисковый актив с
процентной ставкой rf
Или брать заем по ставке rb  rf
Таким образом к эффективной границе присоединяется в
соответствующих точках касания две прямых – безрисковая и
кредитная.
Эти точки касания определяют еще два пакета, называемые
касательными.
Из условия касания можно определить коэффициент вложения
средств в этот актив   
Здесь  l - риск для найденной точки на эффективной границе, а
 pT - риск соответствующего касательного пакета.
l
T
p
Средства MatLab для выбора
оптимального портфеля
[Frisk, Fincome, Fparts, coef, Optrisk, Optincome]=portalloc(Prisk,
Pincome, Pparts,…, NRalloc, NRpercent, Index)
Первые три входящих аргумента – те, которые были посчитаны с
помощью функции portopt.
NRalloc, NRpercent – размер вложения и процентная ставка
безрискового вложения.
Index – индекс неприятия риска. Чем выше, тем меньший риск
выбирается. Рекомендуется: 4 – для осторожного инвестора, 2
– для рискового.
Frisk, Fincome, Fparts – риск, доходность, доли касательного
портфеля
Coef – коэффициент вложения средств в касательный актив
Optrisk, Optincome – риск и доходность оптимального портфеля.
Если вызвать функцию без указания выходных параметров, то
тогда будет начерчен график.
Пример.
Результат выполнения.
Prisk =
Pparts =
0.0805
0.0850
0.0985
0.1230
0.2050
Pincome =
0.1317
0.1465
0.1613
0.1762
0.1910
0.5747
0.3381
0.1069
0
0
0
0
0
0
0
0.0487 0.2336
0
0.2988 0.0599
0
0.4386
0 0.0442
0.2955
0 0.2357
0
0
0
0.1430
0.3032
0.4102
0.4688
1.0000
Пример. Продолжение.
Результат выбора оптимального
портфеля. Нерисковый и рисковый
случаи.
Результат. II
portalloc with output parametrs. No risk.
portalloc with output parametrs. With risk.
Frisk =
Frisk =
0.1013
0.1013
Fincome =
Fincome =
0.1641
0.1641
Fparts =
0.0870
coef =
Fparts =
0 0.4120
0 0.0798 0.4211
0.0870
coef =
2.2908
4.5816
Optrisk =
Optrisk =
0.2321
0.4643
Optincome =
0.2855
Optincome =
0.5011
0 0.4120
0 0.0798 0.4211
Финальный анализ.
Наиболее интересным является значения
коэффициента coef.
Случай, когда он меньше единицы. Это
указывает, что инвестору следует вложить
долю средств coef в касательный актив, а
остальное – в безрисковый.
Случай, когда он больше единицы. Это означает,
что следует взять заем на долю coef-1 и
вложить полученный кредит в касательный
портфель.
Download