Методы симуляции позволяют вам задать процесс шума непосредственно, как вызываемую функцию времени и состояния:
Стратифицированная выборка является методом уменьшения отклонения, который ограничивает долю путей выборки к конкретным подмножествам (или слоям) пространства выборки.
Этот пример задает функцию шума, чтобы расслоить терминальное значение одномерного ценового ряда собственного капитала. Начиная с известных начальных условий, функция сначала стратифицирует терминальное значение стандартного броуновского движения, а затем дискретизирует процесс от начала до конца, рисуя условные гауссовы выборки с помощью брауновского моста.
Процесс расслоения принимает, что каждый путь связан с одним стратифицированным терминальным значением, таким образом, что количество путей равно количеству слоев. Этот метод называется пропорциональной дискретизацией. Этот пример аналогичен, но более сложному, чем тот, который обсуждался в Симуляции Процентных Ставок. Поскольку стратифицированная выборка требует знания будущего, она также требует более сложной временной синхронизации; в частности, функция в этом примере требует знания всей последовательности шагов расчета. Для получения дополнительной информации см. пример Example_StratifiedRNG.m
.
Функция реализует пропорциональную выборку путем разбиения интервала модуля на интервалы равной вероятности путем сначала нарисования случайного числа, равномерно распределенного в каждом интервале. Обратная кумулятивная функция распределения стандартного N(0,1) Гауссова распределения затем преобразует эти стратифицированные равномерные рисунки. Наконец, получившиеся стратифицированные Гауссовы рисунки масштабируются квадратным корнем терминального времени, чтобы расслоить терминальное значение броуновского движения.
Функция шума не возвращает фактические брауновские пути, а скорее Гауссов рисует Z(t,Xt), который управляет ею.
Этот пример сначала стратифицирует терминальное значение одномерного, с нулевым дрейфом, с единичной дисперсионной скоростью броуновского движения (bm
) модель:
Предположим, что 10 путей процесса моделируются ежедневно в течение трехмесячного периода. Также примите, что каждый календарный месяц и год состоят из 21 и 252 торговых дней, соответственно:
rng(10203,'twister') dt = 1 / 252; % 1 day = 1/252 years nPeriods = 63; % 3 months = 63 trading days T = nPeriods * dt; % 3 months = 0.25 years nPaths = 10; % # of simulated paths obj = bm(0, 1, 'StartState', 0); sampleTimes = cumsum([obj.StartTime; ... dt(ones(nPeriods,1))]); z = Example_StratifiedRNG(nPaths, sampleTimes);
Симулируйте стандартные пути Брауниана путем явной передачи стратифицированной функции дискретизации в метод симуляции:
X = obj.simulate(nPeriods, 'DeltaTime', dt, ... 'nTrials', nPaths, 'Z', z);
Для удобства переупорядочьте выходные пути выборки путем переупорядочения трехмерного выхода на двумерный эквивалентный массив:
X = squeeze(X);
Проверьте расслоение:
Воссоздайте равномерные рисунки с пропорциональной выборкой:
rng(10203,'twister')
U = ((1:nPaths)' - 1 + rand(nPaths,1))/nPaths;
Преобразуйте их, чтобы получить терминальные значения стандартного броуновского движения:
WT = norminv(U) * sqrt(T); % Stratified Brownian motion.
Постройте график значений терминалов и выходных путей на том же рисунке:
plot(sampleTimes, X), hold('on') xlabel('Time (Years)'), ylabel('Brownian State') title('Terminal Stratification: Standard Brownian Motion') plot(T, WT, '. black', T, WT, 'o black') hold('off')
Последнее значение каждого пути расчета (последняя строка выходного массива X
) совпадает с соответствующим элементом стратифицированного терминального значения броуновского движения. Это происходит, потому что моделируемая модель и функция генерации шума оба представляют одно и то же стандартное броуновское движение.
Однако можно использовать ту же стратифицированную функцию дискретизации, чтобы расслоить конечную цену геометрических броуновских моделей движения с постоянными параметрами. Фактически, можно использовать стратифицированную функцию дискретизации, чтобы расслоить терминальное значение любой модели с постоянными параметрами, управляемой броуновским движением, если терминальное значение модели является монотонным преобразованием терминального значения броуновского движения.
Чтобы проиллюстрировать это, загрузите набор данных и симулируйте нейтральные к риску пути расчета индекса FTSE 100 с помощью геометрического броуновского движения (GBM
) модель с постоянными параметрами:
где среднее выражение Euribor представляет собой безрисковую норму возврата.
Предположим, что соответствующая информация, полученная из ежедневных данных, в годовом исчислении и что каждый календарный год включает 252 торговых дня:
load Data_GlobalIdx2
returns = tick2ret(Dataset.FTSE);
sigma = std(returns) * sqrt(252);
rate = Dataset.EB3M;
rate = mean(360 * log(1 + rate));
Создайте GBM
моделировать с использованием gbm
, при условии, что FTSE 100 начинается с 100:
obj = gbm(rate, sigma, 'StartState', 100);
Определите шаг расчета и моделируйте ценовые пути.
В следующем, NSteps
задает количество промежуточных временных шагов в каждом временном шаге DeltaTime
. Каждый шаг DeltaTime
разделяется на NSteps
подынтервалы длины DeltaTime
/ NSteps
каждый, уточняющий симуляцию путем оценки вектора моделируемого состояния в NSteps
-1 промежуточные точки. Это уточнение улучшает точность, позволяя симуляции более точно аппроксимировать базовый процесс непрерывного времени без хранения промежуточной информации:
nSteps = 1; sampleTimes = cumsum([obj.StartTime ; ... dt(ones(nPeriods * nSteps,1))/nSteps]); z = Example_StratifiedRNG(nPaths, sampleTimes); rng(10203,'twister') [Y, Times] = obj.simBySolution(nPeriods, 'nTrials', nPaths,... 'DeltaTime', dt, 'nSteps', nSteps, 'Z', z); Y = squeeze(Y); % Reorder to a 2-D array plot(Times, Y) xlabel('Time (Years)'), ylabel('Index Level') title('FTSE 100 Terminal Stratification:Geometric Brownian Motion')
Несмотря на то, что терминальное значение броуновского движения, показанное на последнем графике, обычно распределено, и конечная цена на предыдущем графике распределена логнормально, соответствующие пути каждого графа аналогичны.
Совет
Другой пример методов сокращения отклонений см. в Симуляции процентных ставок.
bates
| bm
| cev
| cir
| diffusion
| drift
| gbm
| heston
| hwv
| interpolate
| merton
| sde
| sdeddo
| sdeld
| sdemrd
| simByEuler
| simByQuadExp
| simBySolution
| simBySolution
| simulate
| ts2func