portsim

Симуляция Монте-Карло коррелированого актива возвращается

Описание

пример

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. Вспомните тот portsim симулирует коррелируемый актив, возвращает на интервале длины dt, данный уравнением

dSS=μdt+σdz=μdt+σε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- 1- 10000 массив к более удобному 252- 10000 массив. (Вспомните тот portsim существенно многомерный механизм симуляции).

В соответствии с уравнениями Оболочки 12.4 и 12.5 на странице 236

E(ST)=S0eμTvar(ST)=S02e2μT(eσ2T1)

преобразуйте симулированный ряд возврата в ценовой ряд и вычислите демонстрационное среднее значение и отклонение терминальных курсов акций.

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')

Входные параметры

свернуть все

Ожидаемый (средний) возврат каждого актива, заданного как 1- NASSETS вектор.

Типы данных: double

Актив возвращает ковариации, заданные как NASSETS- NASSETS матрица. ExpCovariance должно быть симметричным и положительный полуопределенный (никакие отрицательные собственные значения). Стандартными отклонениями возвратов является   ExpSigma = sqrt(diag(ExpCovariance)). Если ExpCovariance не симметричная положительная полуопределенная матрица, используйте nearcorr создать положительную полуопределенную матрицу для корреляционной матрицы.

Типы данных: double

количество последовательных наблюдений во временных рядах возврата, заданных как положительное скалярное целое число. Если NumObs вводится как пустой матричный [], длина RetIntervals используется.

Типы данных: double

(Необязательно) времена Интервала между наблюдениями, заданными как положительная скалярная величина или много наблюдений NUMOBS- 1 вектор. Если RetIntervals не задан, все интервалы приняты, чтобы иметь длину 1.

Типы данных: double

(Необязательно) Количество симулированных демонстрационных путей (реализация) NUMOBS наблюдения, заданные как положительное скалярное целое число. Значение по умолчанию для NumSim 1 (одна реализация NUMOBS коррелированый актив возвращается).

Типы данных: double

(Необязательно) Тип симуляции Монте-Карло, заданной как вектор символов с одним из следующих значений:

  • 'Exact' (значение по умолчанию) генерирует коррелируемый актив, возвращается, в котором демонстрационное среднее значение и ковариация совпадают с входным средним значением (ExpReturn) и ковариация (ExpCovariance) спецификации.

  • 'Expected' генерирует коррелируемый актив, возвращается, в котором демонстрационное среднее значение и ковариация статистически равны входному среднему значению и спецификациям ковариации. (Ожидаемые значения демонстрационного среднего значения и ковариации равны входному среднему значению (ExpReturn) и ковариация (ExpCovariance) спецификации.)

Для любого Method, демонстрационное среднее значение и возвращенная ковариация соответственно масштабируются RetIntervals.

Типы данных: char

Выходные аргументы

свернуть все

3D массив коррелированого, нормально распределенного, пропорционального актива возвращается, возвращенный как NUMOBS- NASSETS- NUMSIM 3D массив.

Актив возвращается на интервале длины, которой дан dt

dSS=μdt+σdz=μdt+σεdt,

где S является ценой активов, μ является ожидаемой нормой прибыли, σ является энергозависимостью цены активов, и ε представляет случайный рисунок от стандартизированного нормального распределения.

Примечания

  • Когда Method 'Exact', демонстрационное среднее значение и ковариация всей реализации (масштабируемый RetIntervals) совпадайте с входным средним значением и ковариацией. Когда возвраты затем преобразованы в цены активов, все терминальные цены на данный актив находятся в близком соглашении. Несмотря на то, что вся реализация чертится независимо, они производят подобные терминальные цены активов. Установите Method к 'Expected' избегать этого поведения.

  • Возвраты из портфелей в PortWts даны     PortReturn = PortWts * RetSeries(:,:,1)', где PortWts матрица, в которой каждая строка содержит распределение активов портфеля. Каждая строка PortReturn соответствует одному из портфелей, идентифицированных в PortWts, и каждый столбец соответствует одному из наблюдений, взятых из первой реализации (первая плоскость) в RetSeries. Смотрите portopt и portstats для спецификации портфеля и оптимизации.

Ссылки

[1] Оболочка, J. C. Опции, фьючерсы и другие производные. Prentice Hall, 2003.

Представлено до R2006a

Для просмотра документации необходимо авторизоваться на сайте