simByTransition

Симулируйте пути выборки Кокса-Ингерсолла-Росса с плотностью перехода

Описание

пример

[Paths,Times] = simByTransition(MDL,NPeriods) моделирует NTrials выборочные пути NVars независимые переменные состояния, управляемые Cox-Ingersoll-Ross (CIR), обрабатывают источники риска над NPeriods последовательные периоды наблюдения. simByTransition аппроксимирует модель CIR в непрерывном времени с использованием функции плотности сглаживания перехода.

пример

[Paths,Times] = simByTransition(___,Name,Value) задает опции, использующие один или несколько аргументы пары "имя-значение" в дополнение к входным параметрам в предыдущем синтаксисе.

Примеры

свернуть все

Используя короткую скорость, моделируйте динамику скорости и срочные структуры в будущем с помощью модели CIR. Модель CIR выражена как

dr(t)=α(b-r(t))dt+σr(t)dW(t)

Экспоненциальная аффинная форма цены облигации

B(t,T)=e-A(t,T)r(t)+C(t,T)

где

A(t,T)=2(eγ(T-t)-1)(γ+α)(eγ(T-t)-1)+2γ

B(t,T)=2αbσ2log(2γe(α+γ)(T-t)/2(γ+α)(eγ(T-t)-1)+2γ)

и

γ=α2+2σ2

Определите параметры для cir объект.

alpha = .1;
b = .05;
sigma = .05;
r0 = .04;

Определите функцию для цен облигаций.

gamma = sqrt(alpha^2 + 2*sigma^2);
A_func = @(t, T) ...
    2*(exp(gamma*(T-t))-1)/((alpha+gamma)*(exp(gamma*(T-t))-1)+2*gamma);
C_func = @(t, T) ...
    (2*alpha*b/sigma^2)*log(2*gamma*exp((alpha+gamma)*(T-t)/2)/((alpha+gamma)*(exp(gamma*(T-t))-1)+2*gamma));
P_func = @(t,T,r_t) exp(-A_func(t,T)*r_t+C_func(t,T));

Создайте cir объект.

obj = cir(alpha,b,sigma,'StartState',r0)
obj = 
   Class CIR: Cox-Ingersoll-Ross
   ----------------------------------------
     Dimensions: State = 1, Brownian = 1
   ----------------------------------------
      StartTime: 0
     StartState: 0.04
    Correlation: 1
          Drift: drift rate function F(t,X(t)) 
      Diffusion: diffusion rate function G(t,X(t)) 
     Simulation: simulation method/function simByEuler
          Sigma: 0.05
          Level: 0.05
          Speed: 0.1

Определите параметры симуляции.

nTrials = 100;
nPeriods = 5;   % Simulate future short over the next five years
nSteps = 12;    % Set intermediate steps to improve the accuracy

Моделируйте короткие скорости. Возвращаемый путь является (NPeriods + 1) -by- NVars-by- NTrialsтрехмерный массив timeseries. В данном примере размер выхода 6-by- 1-by- 100.

rng('default');    % Reproduce the same result
rPaths = simByTransition(obj,nPeriods,'nTrials',nTrials,'nSteps',nSteps);
size(rPaths)
ans = 1×3

     6     1   100

rPathsExp = mean(rPaths,3);

Определить структуру сроков в течение следующих 30 лет.

maturity = 30;
T = 1:maturity;
futuresTimes = 1:nPeriods+1;

% Preallocate simTermStruc
simTermStructure = zeros(nPeriods+1,30);
for i = futuresTimes
    for t = T
        bondPrice = P_func(i,i+t,rPathsExp(i));
        simTermStructure(i,t) = -log(bondPrice)/t;
    end
end
plot(simTermStructure')
legend('Current','1-year','2-year','3-year','4-year','5-year')
title('Projected Term Structure for Next 5 Years')
ylabel('Long Rate Maturity R(t,T)')
xlabel('Time')

Figure contains an axes. The axes with title Projected Term Structure for Next 5 Years contains 6 objects of type line. These objects represent Current, 1-year, 2-year, 3-year, 4-year, 5-year.

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

свернуть все

Модель Стохастического дифференциального уравнения, заданная как cir объект. Для получения дополнительной информации о создании CIR объект, см. cir.

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

Количество периодов симуляции, заданное как положительное скалярное целое число. Значение NPeriods определяет количество строк моделируемого выходного ряда.

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

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: [Paths,Times] = simByTransition(CIR,NPeriods,'DeltaTimes',dt)

Моделируемые испытания (пути расчета) NPeriods каждый из наблюдений, заданный как разделенная разделенными запятой парами, состоящая из 'NTrials' и положительное скалярное целое число.

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

Положительные шаги времени между наблюдениями, заданные как разделенная разделенными запятой парами, состоящая из 'DeltaTimes' и скаляр или NPeriods-by- 1 Вектор-столбец.

DeltaTime представляет собой знакомые dt, найденные в стохастических дифференциальных уравнениях, и определяет время, в которое сообщаются моделируемые пути переменных выходного состояния.

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

Количество промежуточных временных шагов в каждом dt временного шага (определяется как DeltaTimes), заданная как разделенная разделенными запятой парами, состоящая из 'NSteps' и положительное скалярное целое число.

The simByTransition функциональные разделы каждый временной шаг dt в NSteps Подынтервалы длины dt/ NSteps, и уточняет симуляцию путем оценки вектора моделируемого состояния в NSteps − 1 промежуточные точки. Хотя simByTransition не сообщает вектор выходного состояния в этих промежуточных точках, уточнение улучшает точность, позволяя симуляции более точно аппроксимировать базовый процесс непрерывного времени.

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

Флаг для метода хранения и возврата, который указывает, как выходной массив Paths сохранен и возвращен, заданный как разделенная разделенными запятой парами, состоящая из 'StorePaths' и скаляр логический флаг со значением True или False.

  • Если StorePaths является True (значение по умолчанию) или не задано, затем simByTransition возвращает Paths как трехмерный массив временных рядов.

  • Если StorePaths является False (логический 0), затем simByTransition возвращает Paths выходной массив как пустая матрица.

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

Последовательность процессов в конце периода или корректировок вектора состояния, заданная как разделенная разделенными запятой парами, состоящая из 'Processes' и функция или массив ячеек функций вида

Xt=P(t,Xt)

.

simByTransition применяет функции обработки в конце каждого периода наблюдения. Функции обработки принимают текущее время наблюдения t а вектор текущего состояния X t и возвращают вектор состояния, который может регулировать вход состояние .

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

Типы данных: cell | function

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

свернуть все

Моделируемые пути коррелированных переменных состояния, возвращенные как (NPeriods + 1)-by- NVars-by- NTrials трехмерный массив временных рядов.

Для данного испытания каждая строка Paths - транспонирование вектора состояния, X t в момент t времени. Когда флаг входа StorePaths = False, simByTransition возвращает Paths как пустая матрица.

Время наблюдения, сопоставленное с моделируемыми путями, возвращается как (NPeriods + 1)-by- 1 Вектор-столбец. Каждый элемент Times связана с соответствующей строкой Paths.

Подробнее о

свернуть все

Симуляция плотности перехода

SDE не имеет такого решения, что r (t) = f (r (0), ⋯).

Другими словами, уравнение явно не разрешимо. Однако плотность перехода для процесса известна.

Точная симуляция для распределения r (t _ 1), , r (t _ n) является симуляцией процесса во временах t _ 1, ⋯, t _ n для того же значения r (0). Плотность перехода для этого процесса известна и выражена как

r(t)=σ2(1eα(tu)4αxd2(4αeα(tu)σ2(1eα(tu))r(u)),t>uгдеd4bασ2

Алгоритмы

Используйте simByTransition функция для симуляции любого векторного CIR-процесса вида

dXt=S(t)[L(t)Xt]dt+D(t,Xt12)V(t)dWt

где

  • Xt является NVars-by- 1 вектор состояний переменных процесса.

  • S является NVars-by- NVars матрица средних скоростей реверсии (скорость средней реверсии).

  • L является NVars-by- 1 вектор средних уровней реверсии (долгосрочное среднее или уровень).

  • D является NVars-by- NVars диагональная матрица, где каждый элемент вдоль основной диагонали является квадратным корнем соответствующего элемента вектора состояний.

  • V является NVars-by- NBrowns мгновенная матрица скорости волатильности.

  • dWt является NBrowns-by- 1 Брауновский вектор движения.

Ссылки

[1] Glasserman, P. Monte Carlo Methods in Financial Engineering. Нью-Йорк: Springer-Verlag, 2004.

Введенный в R2018b