Симуляция Монте-Карло коррелированого актива возвращается
RetSeries = portsim(ExpReturn,ExpCovariance,NumObs)
RetSeries = portsim(___,RetIntervals,NumSim,Method)
моделирует коррелируемый, возвращает активов 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 торговых дня в календарный год и моделируют два демонстрационных пути (реализация) ежедневной газеты, возвращает более чем период 2D года. Поскольку 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));
Warning: This syntax will be removed in a future release. See the documentation for recommended usage.
PortExpected = ret2tick(PortRetExpected, ... repmat(StartPrice,1,NumSim));
Warning: This syntax will be removed in a future release. See the documentation for recommended usage.
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
идентичны.
Этот пример показывает, как моделировать одномерный процесс геометрического броуновского движения. Это основано на примере, найденном в Оболочке, Опциях, фьючерсах и Других Производных, 5-й Выпуск (см. пример 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
-by-1-by-
10000
массив к более удобному 252
-by-10000
массив. (Вспомните, что portsim
является существенно многомерным механизмом симуляции).
В соответствии с уравнениями Оболочки 12.4 и 12.5 на странице 236
преобразуйте моделируемый ряд возврата в ценовой ряд и вычислите демонстрационное среднее значение и отклонение терминальных курсов акций.
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
-by-NASSETS
вектор.
Типы данных: double
ExpCovariance
— Актив возвращает ковариацииАктив возвращает ковариации, заданные как NASSETS
-by-NASSETS
матрица. ExpCovariance
должен быть симметричным и положительный полуопределенный (никакие отрицательные собственные значения). Стандартными отклонениями возвратов является ExpSigma = sqrt(diag(ExpCovariance))
.
Типы данных: double
NumObs
— Количество последовательных наблюдений во временных рядах возвратаколичество последовательных наблюдений во временных рядах возврата, заданных как положительное скалярное целое число. Если NumObs
вводится как пустой матричный []
, длина RetIntervals
используется.
Типы данных: double
RetIntervals
— Времена интервала между наблюдениями1
(значение по умолчанию) | положительная скалярная величина | вектор(Необязательно) времена Интервала между наблюдениями, заданными как положительная скалярная величина или много наблюдений NUMOBS
-by-1
вектор. Если RetIntervals
не задан, все интервалы приняты, чтобы иметь длину 1
.
Типы данных: double
NumSim
— Количество моделируемых демонстрационных путей (реализация) наблюдений NUMOBS
1
(значение по умолчанию) | положительное скалярное целое число(Необязательно) Количество моделируемых демонстрационных путей (реализация) наблюдений NUMOBS
, заданных как положительное скалярное целое число. Значением по умолчанию для NumSim
является 1
(одна реализация коррелируемого актива NUMOBS
возвращается).
Типы данных: double
Method
— Тип симуляции Монте-Карло'Exact'
(значение по умолчанию) | вектор символов(Необязательно) Тип симуляции Монте-Карло, заданной как вектор символов с одним из следующих значений:
'Exact'
(значение по умолчанию) генерирует коррелируемый актив, возвращается, в котором демонстрационное среднее значение и ковариация совпадают с входным средним значением (ExpReturn
) и ковариация (ExpCovariance
) спецификации.
'Expected'
генерирует коррелируемый актив, возвращается, в котором демонстрационное среднее значение и ковариация статистически равны входному среднему значению и спецификациям ковариации. (Ожидаемые значения демонстрационного среднего значения и ковариации равны входному среднему значению (ExpReturn
) и ковариация (ExpCovariance
) спецификации.)
Для любого Method
демонстрационное среднее значение и возвращенная ковариация соответственно масштабируются RetIntervals
.
Типы данных: char
RetSeries
— 3D массив коррелированого, нормально распределенного, пропорционального актива возвращается3D массив коррелированого, нормально распределенного, пропорционального актива возвращается, возвращенный как NUMOBS
-by-NASSETS-by-
NUMSIM
3D массив.
Актив возвращается на интервале длины, которой дан dt
где S является ценой активов, μ является ожидаемой нормой прибыли, σ является энергозависимостью цены активов, и ε представляет случайный рисунок от стандартизированного нормального распределения.
Когда Method
является 'Exact'
, демонстрационное среднее значение и ковариация всей реализации (масштабируемый RetIntervals
) совпадают с входным средним значением и ковариацией. Когда возвраты затем преобразованы в цены активов, все терминальные цены на данный актив находятся в близком соглашении. Несмотря на то, что вся реализация чертится независимо, они производят подобные терминальные цены активов. Установите Method
на 'Expected'
избегать этого поведения.
Возвраты из портфелей в PortWts
даны PortReturn = PortWts * RetSeries(:,:,1)'
, где PortWts
является матрицей, в которой каждая строка содержит распределение активов портфеля. Каждая строка PortReturn
соответствует одному из портфелей, идентифицированных в PortWts
, и каждый столбец соответствует одному из наблюдений, взятых из первой реализации (первая плоскость) в RetSeries
. Смотрите portopt
и portstats
для спецификации портфеля и оптимизации.
[1] Оболочка, J. C. Опции, фьючерсы и другие производные. Prentice Hall, 2003.
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.