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

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

Все методы симуляции требуют, чтобы вы задали сетку времени путем определения количества периодов (NPERIODS). Можно также опционально задать скаляр или вектор строго положительного шага времени (DeltaTime) и промежуточные временные шаги (NSTEPS). Эти параметры, наряду с начальным шагом расчета, сопоставленным с объектом (StartTime), исключительно определяют последовательность времен, в которые выбирается вектор состояния. Таким образом методы симуляции позволяют вам пересекать сетку времени с начала до конца (то есть, слева направо).

Напротив, методы интерполяции позволяют вам пересекать сетку времени в любом порядке, позволяя и прямые и обратные перемещения вовремя. Они позволяют вам задавать вектор времен интерполяции, элементы которых не должны быть уникальными.

Много ссылок задают Броуниэн-Бридж как условную симуляцию, объединенную со схемой того, чтобы пересечь сетку времени, эффективно объединяя два отличных алгоритма. Напротив, метод интерполяции, предлагаемый здесь, обеспечивает дополнительную гибкость путем намеренного разделения алгоритмов. В этом методе для перемещения сетки времени вы выполняете начальную симуляцию Монте-Карло, чтобы выбрать состояние в терминальное время, и затем последовательно демонстрационные промежуточные состояния стохастической интерполяцией. Первые несколько выборок определяют полное поведение путей, в то время как более поздние выборки прогрессивно совершенствовали структуру. Такие алгоритмы часто называются методами сокращения отклонения. Этот алгоритм прост, когда номер времен интерполяции является степенью 2. В этом случае каждая интерполяция падает на полпути между двумя известными состояниями, совершенствовав интерполяцию с помощью метода как деление пополам. Этот пример подсвечивает гибкость усовершенствованной интерполяции путем реализации этого алгоритма степени двойки.

  1. Загрузите данные. Загрузите набор исторических данных трехмесячных уровней Euribor, наблюдаемых ежедневно, и соответствующие торговые даты, охватывающие временной интервал с 7 февраля 2001 до 24 апреля 2006:

    load Data_GlobalIdx2
    plot(dates, 100 * Dataset.EB3M)
    datetick('x'), xlabel('Date'), ylabel('Daily Yield (%)')
    title('3-Month Euribor as a Daily Effective Yield')

  2. Подберите модель к данным. Теперь соответствуйте простой одномерной модели Vasicek к ежедневным эквивалентным урожаям трехмесячных данных Euribor:

    dXt=S(LXt)dt+σdWt

    Учитывая начальные условия, распределение короткого уровня в некоторое время T в будущем является Гауссовым со средним значением:

    E(XT)=X0eST+L(1eST)

    и отклонение:

    Var(XT)=σ2(1eST)/2S

    Чтобы калибровать эту простую короткую модель уровня, перепишите его в более знакомом формате регрессии:

    yt=α+βxt+εt

    где:

    yt=dXt,α=SLdt,β=Sdt

    выполните обычную линейную регрессию, где энергозависимость модели пропорциональна стандартной погрешности невязок:

    σ=Var(εt)/dt

    yields     = Dataset.EB3M;
    regressors = [ones(length(yields) - 1, 1) yields(1:end-1)];
    [coefficients, intervals, residuals] = ...
       regress(diff(yields), regressors);
    dt    = 1;  % time increment = 1 day
    speed = -coefficients(2)/dt;
    level = -coefficients(1)/coefficients(2);
    sigma =  std(residuals)/sqrt(dt);
  3. Создайте объект и установите его начальный StartState. Создайте объект hwv с набором StartState к последний раз наблюдаемому короткому уровню:

    obj = hwv(speed, level, sigma, 'StartState', yields(end))
    obj = 
       Class HWV: Hull-White/Vasicek
       ----------------------------------------
         Dimensions: State = 1, Brownian = 1
       ----------------------------------------
          StartTime: 0
         StartState: 7.70408e-05
        Correlation: 1
              Drift: drift rate function F(t,X(t)) 
          Diffusion: diffusion rate function G(t,X(t)) 
         Simulation: simulation method/function simByEuler
              Sigma: 4.77637e-07
              Level: 6.00424e-05
              Speed: 0.00228854
    
  4. Моделируйте подобранную модель. Примите, например, что вы моделируете подобранную модель более чем 64 (26) торговые дни, с помощью усовершенствованного Броуниэн-Бридж с алгоритмом степени двойки вместо обычного подхода симуляции Монте-Карло начала к концу. Кроме того, примите, что начальное время и состояние совпадают с теми из последнего доступного наблюдения за историческими данными, и что терминальное состояние является ожидаемым значением дней модели 64 Вашичека в будущее. В этом случае можно оценить поведение различных путей что вся доля те же начальные и терминальные состояния, возможно, чтобы поддержать оценивающие зависимые от предшествующего пути развития опции процентной ставки на трехмесячном интервале.

    Создайте вектор времен интерполяции, чтобы пересечь сетку времени путем перемещения обоих вперед и назад вовремя. А именно, первый раз интерполяции установлен в новое короткое время наблюдения уровня, второй раз интерполяции установлен в терминальное время и последующие времена интерполяции последовательно демонстрационные промежуточные состояния:

    T      = 64;
    times  = (1:T)';
    t      = NaN(length(times) + 1, 1);
    t(1)   = obj.StartTime;
    t(2)   = T;
    delta  = T;
    jMax   = 1;
    iCount = 3;
    
    for k = 1:log2(T)
        i = delta / 2;
        for j = 1:jMax
            t(iCount) = times(i);
            i         = i + delta;
            iCount    = iCount + 1;
        end
        jMax  = 2 * jMax;
        delta = delta / 2;
    end
  5. Постройте времена интерполяции. Исследуйте последовательность времен интерполяции, сгенерированных этим алгоритмом:

    stem(1:length(t), t, 'filled')
    xlabel('Index'), ylabel('Interpolation Time (Days)')
    title ('Sampling Scheme for the Power-of-Two Algorithm')

    Первые несколько выборок широко разделяются вовремя и определяют структуру курса путей. Более поздние выборки близко расположены и прогрессивно совершенствовали подробную структуру.

  6. Инициализируйте сетку временных рядов. Теперь, когда вы сгенерировали последовательность времен интерполяции, инициализируйте сетку временных рядов курса, чтобы начать интерполяцию. Процесс выборки начинается в прошлый наблюдаемый раз и состояние, взятое из исторического короткого ряда уровня, и заканчивает 64 дня в будущее в ожидаемом значении модели Vasicek, выведенной от калиброванных параметров:

    average = obj.StartState * exp(-speed * T) + level * ...
    (1 - exp(-speed * T));
    X       = [obj.StartState ; average];
  7. Сгенерируйте пять демонстрационных путей. Сгенерируйте пять демонстрационных путей, установив флаг входа Refine на TRUE вставить каждое новое интерполированное состояние в сетку временных рядов, когда это становится доступным. Выполните интерполяцию на испытании испытательным сроком. Поскольку входные временные ряды, X имеет пять испытаний (где каждая страница 3D временных рядов представляет независимое испытание), интерполированная выходная серия Y также имеют пять страниц:

    nTrials = 5;
    rng(63349,'twister')
    Y = obj.interpolate(t, X(:,:,ones(nTrials,1)), ...
    'Times',[obj.StartTime  T], 'Refine', true);
  8. Постройте получившиеся демонстрационные пути. Поскольку времена интерполяции монотонно не увеличивают, сортируют времена и переупорядочивают соответствующие короткие уровни:

    [t,i] = sort(t);
    Y     = squeeze(Y);
    Y     = Y(i,:);
    plot(t, 100 * Y), hold('on')
    plot(t([1 end]), 100 * Y([1 end],1),'. black','MarkerSize',20)
    xlabel('Interpolation Time (Days into the Future)')
    ylabel('Yield (%)'), hold('off')
    title ('Euribor Yields from Brownian Bridge Interpolation')

    Короткие уровни в этом графике представляют альтернативные демонстрационные пути, которые совместно используют те же начальные значения и конечную стоимость. Они иллюстрируют специальное предложение, хотя упрощенный, случай более широкого метода выборки, известного как stratified sampling. Для более сложного примера стратифицированной выборки смотрите Стратифицированную Выборку.

    Несмотря на то, что этот простой пример моделировал одномерную модель процентной ставки Vasicek, он применяется к проблемам любой размерности.

Совет

Броуновские мостовые методы также применяют более общие методы сокращения отклонения. Для получения дополнительной информации смотрите Стратифицированную Выборку.

Обеспечение положительных процентных ставок

Вся симуляция и методы интерполяции позволяют вам задавать последовательность функций или фоновые процессы, оценивать в конце каждого периода шага расчета. Этот период включает любые промежуточные временные шаги, определенные дополнительным входом NSTEPS, как обсуждено в Оптимизации Точности: О Точности Решения и Ошибке. Эти функции заданы как вызываемые функции времени и состояния, и должны возвратить обновленный вектор состояния X t:

Xt=f(t,Xt)

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

Обрабатывающие функции не требуются, чтобы использовать время (t) или утверждать (X t). Они также не требуются обновить или изменить вектор состояния ввода. На самом деле симуляция и методы интерполяции не знают о любых деталях реализации, и в этом отношении, они только придерживаются опубликованного интерфейса.

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

За исключением моделей (BM) Броуновского движения, отдельные компоненты моделируемого вектора состояния обычно представляют переменные, реальные дубликаты которых являются по сути положительными количествами, такими как цены активов или процентные ставки. Однако по умолчанию большая часть симуляции и методов интерполяции, обеспеченных здесь, моделируют переход между последовательными шагами расчета как масштабированное (возможно многомерный) Гауссова ничья. Так, при приближении непрерывно-разового процесса в дискретное время вектор состояния не может остаться положительным. Единственным исключением является simBySolution для объектов gbm и simBySolution для объектов hwv, логарифмического преобразования отделимых моделей геометрического броуновского движения. Кроме того, по умолчанию, ни одна из симуляции и методов интерполяции не вносит изменения в вектор состояния. Поэтому вы ответственны за обеспечение, что все компоненты вектора состояния остаются положительными как соответствующими.

К счастью, определение неотрицательных состояний гарантирует простую корректировку обработки конца периода. Несмотря на то, что эта корректировка широко применима, это разоблачающе, когда применено одномерная модель диффузии квадратного корня cir:

dXt=0.25(0.1Xt)dt+0.2Xt12dWt=S(LXt)dt+σXt12dWt

Возможно, первичное обращение одномерных моделей cir, где:

2SLσ2

это, короткий уровень остается положительным. Однако положительность коротких уровней только содержит для базовой непрерывно-разовой модели.

  1. Моделируйте ежедневные короткие уровни модели cir. Чтобы проиллюстрировать последний оператор, моделируйте ежедневные короткие уровни модели cir, с помощью cir, за один календарный год (приблизительно 250 торговых дней):

    rng(14151617,'twister')
    obj   = cir(0.25,@(t,X)0.1,0.2,'StartState',0.02);
    [X,T] = simByEuler(obj,250,'DeltaTime',1/250,'nTrials',5);
    sprintf('%0.4f\t%0.4f+i%0.4f\n',[T(195:205)';...
        real(X(195:205,1,4))'; imag(X(195:205,1,4))'])
    ans = 
        '0.7760	0.0003+i0.0000
         0.7800	0.0004+i0.0000
         0.7840	0.0002+i0.0000
         0.7880	-0.0000+i0.0000
         0.7920	0.0001+i0.0000
         0.7960	0.0002+i0.0000
         0.8000	0.0002+i0.0000
         0.8040	0.0008+i0.0001
         0.8080	0.0004+i0.0001
         0.8120	0.0008+i0.0001
         0.8160	0.0008+i0.0001
         '
    
    

    Процентные ставки могут стать отрицательными, если получившиеся пути моделируются в дискретное время. Кроме того, поскольку модели cir включают термин диффузии квадратного корня, короткие уровни могут даже стать комплексными.

  2. Повторите симуляцию с функцией обработки. Повторите симуляцию, на этот раз задав функцию обработки, которая берет абсолютное значение короткого уровня в конце каждого периода. Можно получить доступ к функции обработки ко времени и состоянию (t, Xt), но это только использует вектор состояния коротких уровней Xt:

    rng(14151617,'twister')
    [Y,T] = simByEuler(obj,250,'DeltaTime',1/250,... 
        'nTrials',5,'Processes',@(t,X)abs(X));
  3. Сравните настроенные и ненастроенные пути. Графически сравните значение неприспособленного пути (с отрицательными и комплексными числами!) к соответствующему пути, сохраненному положительным при помощи обработки конца периода, функционируют по отрезку времени интереса:

    clf
    plot(T,100*abs(X(:,1,4)),'red',T,100*Y(:,1,4),'blue')
    axis([0.75 1 0 0.4])
    xlabel('Time (Years)'), ylabel('Short Rate (%)')
    title('Univariate CIR Short Rates')
    legend({'Negative/Complex Rates' 'Positive Rates'}, ... 
        'Location', 'Best')

Совет

Можно использовать этот метод, чтобы получить более точные решения SDE. Для получения дополнительной информации смотрите Факторы Производительности.

Смотрите также

| | | | | | | | | | | | | | | | |

Связанные примеры

Больше о