Монте-Карло моделирование коррелированной доходности активов
моделирует коррелированные результаты RetSeries = portsim(ExpReturn,ExpCovariance,NumObs)NASSETS активы свыше NUMOBS последовательные интервалы наблюдения. Доходность активов моделируется как пропорциональные приращения постоянного дрейфа, постоянной волатильности стохастических процессов, тем самым аппроксимируя геометрическое броуновское движение непрерывного времени.
указывает параметры, использующие один или несколько необязательных аргументов в дополнение к входным аргументам в предыдущем синтаксисе. RetSeries = portsim(___,RetIntervals,NumSim,Method)
В этом примере показано различие между Exact и Expected методы моделирования.
Рассмотрим портфель из пяти основных средств со следующими ожидаемыми доходностями, стандартными отклонениями и корреляционной матрицей на основе ежедневной доходности основных средств (где ExpReturn и Sigmas делятся на 100 для преобразования процентов в возвращаемые значения).
ExpReturn = [0.0246 0.0189 0.0273 0.0141 0.0311]/100;
Sigmas = [0.9509 1.4259 1.5227 1.1062 1.0877]/100;
Correlations = [1.0000 0.4403 0.4735 0.4334 0.6855
0.4403 1.0000 0.7597 0.7809 0.4343
0.4735 0.7597 1.0000 0.6978 0.4926
0.4334 0.7809 0.6978 1.0000 0.4289
0.6855 0.4343 0.4926 0.4289 1.0000];Преобразование корреляций и стандартных отклонений в ковариационную матрицу.
ExpCovariance = corr2cov(Sigmas, Correlations)
ExpCovariance = 5×5
10-3 ×
0.0904 0.0597 0.0686 0.0456 0.0709
0.0597 0.2033 0.1649 0.1232 0.0674
0.0686 0.1649 0.2319 0.1175 0.0816
0.0456 0.1232 0.1175 0.1224 0.0516
0.0709 0.0674 0.0816 0.0516 0.1183
Предположим, что в календарном году имеется 252 торговых дня, и смоделировать два пути выборки (реализации) ежедневных возвратов в течение двухлетнего периода. С тех пор ExpReturn и ExpCovariance выражаются ежедневно, набор RetIntervals = 1.
StartPrice = 100; NumObs = 504; % two calendar years of daily returns NumSim = 2; RetIntervals = 1; % one trading day NumAssets = 5;
Чтобы проиллюстрировать различие между методами, смоделируйте два пути каждым методом, начиная с одного и того же состояния случайных чисел.
rng('default'); RetExact = portsim(ExpReturn, ExpCovariance, NumObs, ... RetIntervals, NumSim, 'Exact'); rng(0); RetExpected = portsim(ExpReturn, ExpCovariance, NumObs, ... RetIntervals, NumSim, 'Expected');
Сравните среднее и ковариацию RetExact с входами (ExpReturn и ExpCovariance), вы увидите, что они почти идентичны.
На данном этапе RetExact и RetExpected представляют собой массивы 504 на 5 на 2. Теперь возьмем одинаково взвешенный портфель, сформированный из пяти активов, и создадим массивы возвратов портфеля, в которых каждый столбец представляет возврат портфеля соответствующего пути выборки смоделированных возвратов пяти активов. Массивы портфолио PortRetExact и PortRetExpected представляют собой матрицы 504 на 2.
Weights = ones(NumAssets, 1)/NumAssets; PortRetExact = zeros(NumObs, NumSim); PortRetExpected = zeros(NumObs, NumSim); for i = 1:NumSim PortRetExact(:,i) = RetExact(:,:,i) * Weights; PortRetExpected(:,i) = RetExpected(:,:,i) * Weights; end
Наконец, преобразуйте смоделированный портфель возвратов в цены и постройте график данных. В частности, обратите внимание, что после Exact способ соответствует ожидаемой доходности и ковариации, цены портфеля терминалов практически идентичны для каждого пути выборки. Это не верно для Expected способ моделирования. Хотя в этом примере рассматриваются портфели, те же методы применяются и к отдельным активам. Таким образом, Exact моделирование наиболее подходит, когда для достижения одних и тех же цен на терминалы требуются уникальные пути.
PortExact = ret2tick(PortRetExact, ... repmat(StartPrice,1,NumSim)); PortExpected = ret2tick(PortRetExpected, ... repmat(StartPrice,1,NumSim)); subplot(2,1,1), plot(PortExact, '-r') ylabel('Portfolio Prices') title('Exact Method') subplot(2,1,2), plot(PortExpected, '-b') ylabel('Portfolio Prices') title('Expected Method')

ExpReturn, ExpCovariance, и RetIntervalsВ этом примере показано взаимодействие между ExpReturn, ExpCovariance, и RetIntervals. Напомним, что portsim моделирует коррелированные доходности активов за интервал длины dt, задаваемый уравнением
где S - цена активов, μ - ожидаемая рентабельность, σ - изменчивость цены активов, и ε представляет случайный рисунок от стандартизированного нормального распределения.
Приращение времени dt определяется необязательным вводом RetIntervals, либо в виде явного входного аргумента, либо в виде единичного временного приращения по умолчанию. Независимо от периодичности ExpReturn, ExpCovariance, и RetIntervals должны быть последовательными. Например, если ExpReturn и ExpCovariance в годовом исчислении, затем RetIntervals должно быть через годы. Этот момент часто неправильно понимают.
Для иллюстрации взаимодействия между ExpReturn, ExpCovariance, и RetIntervalsрассмотрим портфель из пяти активов со следующими ожидаемыми доходностями, стандартными отклонениями и корреляционной матрицей на основе ежедневной доходности активов.
ExpReturn = [0.0246 0.0189 0.0273 0.0141 0.0311]/100;
Sigmas = [0.9509 1.4259 1.5227 1.1062 1.0877]/100;
Correlations = [1.0000 0.4403 0.4735 0.4334 0.6855
0.4403 1.0000 0.7597 0.7809 0.4343
0.4735 0.7597 1.0000 0.6978 0.4926
0.4334 0.7809 0.6978 1.0000 0.4289
0.6855 0.4343 0.4926 0.4289 1.0000];
Преобразование корреляций и стандартных отклонений в ковариационную матрицу суточных возвратов.
ExpCovariance = corr2cov(Sigmas, Correlations);
Предполагайте 252 торговых дня за календарный год и смоделируйте один путь выборки ежедневной прибыли в течение четырехлетнего периода. С момента ExpReturn и ExpCovariance вводы выражаются ежедневно, набор RetIntervals = 1.
StartPrice = 100; NumObs = 1008; % four calendar years of daily returns RetIntervals = 1; % one trading day NumAssets = length(ExpReturn); randn('state',0); RetSeries1 = portsim(ExpReturn, ExpCovariance, NumObs, ... RetIntervals, 1, 'Expected');
Теперь ежегодная обработка ежедневных данных, тем самым изменяя периодичность данных, путем умножения ExpReturn и ExpCovariance на 252 и деление RetIntervals по 252 (RetIntervals = 1/252 года). Переустановив генератор случайных чисел в исходное состояние, можно воспроизвести результаты.
rng('default'); RetSeries2 = portsim(ExpReturn*252, ExpCovariance*252, ... NumObs, RetIntervals/252, 1, 'Expected');
Предположим, что с каждой моделируемой серией возврата связана одинаково взвешенная и вычисленная доходность портфеля.
Weights = ones(NumAssets, 1)/NumAssets; PortRet1 = RetSeries2 * Weights; PortRet2 = RetSeries2 * Weights;
Сравнение данных показывает, что PortRet1 и PortRet2 идентичны.
В этом примере показано, как моделировать одномерный процесс геометрического броуновского движения. Он основан на примере, найденном в Hull, Options, Futures и Other Derivatives, 5th Edition (см. пример 12.2 на стр. 236). Помимо проверки примера Халла, он также графически иллюстрирует логнормальное свойство цен на терминальные акции довольно большим моделированием Монте-Карло.
Предположим, что вы владеете акцией с начальной ценой $20, годовой ожидаемой доходностью 20% и волатильностью 40%. Смоделировать ежедневный ценовой процесс для этого запаса в течение одного полного календарного года (252 торговых дня).
StartPrice = 20; ExpReturn = 0.2; ExpCovariance = 0.4^2; NumObs = 252; NumSim = 10000; RetIntervals = 1/252;
RetIntervals выражается в годах, в соответствии с тем фактом, что ExpReturn и ExpCovariance ежегодно. Также, ExpCovariance вводится как отклонение, а не как более привычное стандартное отклонение (волатильность).
Установите состояние генератора случайных чисел и смоделируйте 10 000 испытаний (реализаций) возвратов акций в течение полного календарного года в 252 торговых дня.
rng('default'); RetSeries = squeeze(portsim(ExpReturn, ExpCovariance, NumObs, ... RetIntervals, NumSim, 'Expected'));
squeeze функция переформатирует выходной массив моделируемых возвращений из 252около-1около-10000 массив для более удобного 252около-10000 массив. (Напомним, что portsim является принципиально многомерным механизмом моделирования).
В соответствии с уравнениями Халла 12.4 и 12.5 на стр. 236
eσ2T − 1)
преобразовать смоделированную серию возврата в серию цен и вычислить среднее значение выборки и отклонение цен на акции терминалов.
StockPrices = ret2tick(RetSeries, repmat(StartPrice, 1, NumSim)); SampMean = mean(StockPrices(end,:)) SampVar = var(StockPrices(end,:))
SampMean = 24.4489 SampVar = 101.4243
Сравните эти значения со значениями, полученными с помощью уравнений Халла.
ExpValue = StartPrice*exp(ExpReturn) ExpVar = ... StartPrice*StartPrice*exp(2*ExpReturn)*(exp((ExpCovariance)) - 1)
ExpValue = 24.4281 ExpVar = 103.5391
Эти результаты очень близки к результатам, показанным в примере 12.2 Халла.
Выведите на экран функцию плотности выборки цены запаса на терминале после одного календарного года. Из функции плотности выборки видно логнормальное распределение цен на терминальные акции.
[count, BinCenter] = hist(StockPrices(end,:), 30); figure bar(BinCenter, count/sum(count), 1, 'r') xlabel('Terminal Stock Price') ylabel('Probability') title('Lognormal Terminal Stock Prices')

ExpReturn - Ожидаемый (средний) возврат каждого активаОжидаемый (средний) возврат каждого актива, указанный как 1около-NASSETS вектор.
Типы данных: double
ExpCovariance - Ковариации возврата активовКовариации возврата активов, указанные как NASSETSоколо-NASSETS матрица. ExpCovariance должен быть симметричным и положительным полудефинитом (без отрицательных собственных значений). Стандартные отклонения возвратов: ExpSigma = sqrt(diag(ExpCovariance)). Если ExpCovariance не является симметричной положительной полуопределенной матрицей, используйте nearcorr для создания положительной полуопределенной матрицы для корреляционной матрицы.
Типы данных: double
NumObs - Количество последовательных наблюдений в возвращаемом временном рядучисло последовательных наблюдений в возвращаемом временном ряду, указанном как положительное скалярное целое число. Если NumObs вводится как пустая матрица [], длина RetIntervals используется.
Типы данных: double
RetIntervals - Интервал между наблюдениями1 (по умолчанию) | положительный скаляр | вектор(Необязательно) Интервал между наблюдениями, указанный как положительный скаляр или ряд наблюдений NUMOBSоколо-1 вектор. Если RetIntervals не указан, предполагается, что все интервалы имеют длину 1.
Типы данных: double
NumSim - Количество моделируемых путей выборки (реализаций) NUMOBS наблюдения1 (по умолчанию) | положительное скалярное целое(Необязательно) Количество моделируемых путей выборки (реализаций) NUMOBS наблюдения, указанные как положительное скалярное целое число. Значение по умолчанию для NumSim является 1 (единая реализация NUMOBS коррелированные доходности основных средств).
Типы данных: double
Method - Тип моделирования Монте-Карло'Exact' (по умолчанию) | символьный вектор(Необязательно) Тип моделирования Монте-Карло, заданный как символьный вектор с одним из следующих значений:
'Exact' (по умолчанию) генерирует коррелированные доходности активов, в которых среднее значение выборки и ковариация соответствуют среднему значению ввода (ExpReturn) и ковариация (ExpCovariance) спецификации.
'Expected' генерирует коррелированные доходности активов, в которых среднее значение выборки и ковариация статистически равны входному среднему значению и спецификациям ковариации. (Ожидаемые значения среднего значения выборки и ковариации равны среднему входному значению (ExpReturn) и ковариация (ExpCovariance) спецификации.)
Для любого из них Method, среднее значение выборки и возвращенная ковариация соответствующим образом масштабируются RetIntervals.
Типы данных: char
RetSeries - Трехмерный массив коррелированных, нормально распределенных, пропорциональных доходностей активовТрехмерный массив коррелированных, обычно распределенных, пропорциональных доходностей активов, возвращаемых в виде NUMOBSоколо-NASSETSоколо-NUMSIM трехмерный массив.
Возврат актива за интервал длиной dt задается
где S - цена активов, μ - ожидаемая рентабельность, σ - изменчивость цены активов, и ε представляет случайный рисунок от стандартизированного нормального распределения.
Примечания
Когда Method является 'Exact', среднее значение выборки и ковариация всех реализаций (масштабировано RetIntervals) соответствуют входному среднему значению и ковариации. При преобразовании возвратов в цены основных средств все терминальные цены для данного основного средства находятся в тесном согласии. Несмотря на то, что все реализации осуществляются независимо, они производят аналогичные цены на терминальные активы. Набор Method кому 'Expected' во избежание такого поведения.
Возвраты из портфелей в PortWts даны PortReturn = PortWts * RetSeries(:,:,1)', где PortWts - матрица, в которой каждая строка содержит распределение основных средств портфеля. Каждая строка PortReturn соответствует одному из портфелей, указанных в PortWts, и каждый столбец соответствует одному из наблюдений, взятых из первой реализации (первая плоскость) в RetSeries. Посмотрите portopt и portstats для спецификации и оптимизации портфеля.
[1] Халл, J. C. Опционы, фьючерсы и другие деривативы. Прентис-Холл, 2003.
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.