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

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

Все методы симуляции требуют, чтобы вы задали временную сетку путем определения количества периодов (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')

    Figure contains an axes. The axes with title 3-Month Euribor as a Daily Effective Yield contains an object of type line.

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

    Figure contains an axes. The axes with title Sampling Scheme for the Power-of-Two Algorithm contains an object of type stem.

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

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

    average = obj.StartState * exp(-speed * T) + level * ...
    (1 - exp(-speed * T));
    X       = [obj.StartState ; average];
  7. Сгенерируйте пять путей расчета. Сгенерируйте пять путей к выборке, задав Refine входной флаг в TRUE вставить каждое новое интерполированное состояние в сетку временных рядов по мере его доступности. Выполните интерполяцию на пробном базисе. Потому что входные временные ряды X имеет пять испытаний (где каждая страница трехмерных временных рядов представляет собой независимое испытание), интерполированный выходной ряд 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')

    Figure contains an axes. The axes with title Euribor Yields from Brownian Bridge Interpolation contains 6 objects of type line.

    Короткие скорости на этом графике представляют альтернативные пути расчета, которые имеют одинаковые начальные и терминальные значения. Они иллюстрируют специальный, хотя и упрощенный, случай более широкого метода дискретизации, известного как 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')

    Figure contains an axes. The axes with title Univariate CIR Short Rates contains 2 objects of type line. These objects represent Negative/Complex Rates, Positive Rates.

Совет

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

См. также

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

Похожие примеры

Подробнее о