Методы симуляции позволяют вам задавать шумовой процесс непосредственно как вызываемая функция времени и состояния:
Стратифицированная выборка является методом сокращения отклонения, который ограничивает пропорцию демонстрационных путей к определенным подмножествам (или слои) выборочного пространства.
Этот пример задает шумовую функцию, чтобы расслоить конечную стоимость одномерного ценового ряда акции. Начиная с известных начальных условий, функция сначала расслаивает конечную стоимость стандартного Броуновского движения, и затем производит процесс с начала до конца путем рисования условных Гауссовых выборок с помощью Броуниэн-Бридж.
Процесс стратификации принимает, что каждый путь сопоставлен с одной стратифицированной конечной стоимостью, таким образом, что количество путей равно количеству слоев. Этот метод называется пропорциональной выборкой. Этот пример похож на, еще более сложен, чем, тот, обсужденный в Симуляции Процентных ставок. Поскольку расслоено выборка требует знания будущего, это также требует более сложной синхронизации времени; а именно, функция в этом примере требует знания целой последовательности шагов расчета. Для получения дополнительной информации смотрите пример stratifiedExample.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);
Для удобства переупорядочьте выходные демонстрационные пути путем переупорядочения 3D выхода к двумерному эквивалентному массиву:
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')
Несмотря на то, что конечная стоимость Броуновского движения, показанного в последнем графике, нормально распределена, и терминальная цена в предыдущем графике логарифмически нормально распределяется, соответствующие пути каждого графика подобны.
Для другого примера методов сокращения отклонения смотрите Процентные ставки Симуляции.
bm
| cev
| cir
| diffusion
| drift
| gbm
| heston
| hwv
| interpolate
| sde
| sdeddo
| sdeld
| sdemrd
| simByEuler
| simBySolution
| simBySolution
| simulate
| ts2func