Работа с денежными потоками Рассмотрим модельную задачу: инвестор на протяжении 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 и вложить полученный кредит в касательный портфель.