exponenta event banner

Моделирование цен собственного капитала

Моделирование многомерных рыночных моделей

В этом примере сравниваются альтернативные реализации разделяемого многомерного геометрического броуновского процесса движения, который часто называют многомерной рыночной моделью. Он моделирует пути выборки портфеля индексов акций с использованием sde, sdeddo, sdeld, cev, и gbm объекты.

Моделируемая рыночная модель:

dXt = мкXtdt + D (Xt)(1)

где:

  • λ - диагональная матрица ожидаемых результатов индекса.

  • D - диагональная матрица с Xt вдоль диагонали.

  • λ - диагональная матрица стандартных отклонений результатов индекса.

Представление рыночных моделей с использованием объектов SDE

Создание sde объект с использованием sde для представления модели рынка акций.

  1. Загрузить Data_GlobalIdx2 набор данных:

    load Data_GlobalIdx2
    prices  = [Dataset.TSX Dataset.CAC Dataset.DAX ...
    Dataset.NIK Dataset.FTSE Dataset.SP];
  2. Перевести дневные цены в возвраты:

    returns =  tick2ret(prices);
  3. Вычислить статистику данных для ввода в методы моделирования:

    nVariables  = size(returns, 2);
    expReturn   = mean(returns);
    sigma       = std(returns);
    correlation = corrcoef(returns);
    t           = 0;
    X           = 100;
    X           = X(ones(nVariables,1));
  4. Создайте простые анонимные функции дрейфа и диффузии, доступные для (t, Xt):

    F = @(t,X) diag(expReturn) * X;
    G = @(t,X) diag(X) * diag(sigma);
  5. Используйте эти функции с sde для создания sde объект для представления рыночной модели в уравнении 1:

    SDE = sde(F, G, 'Correlation', correlation, 'StartState', X)
    SDE = 
       Class SDE: Stochastic Differential Equation
       -------------------------------------------
         Dimensions: State = 6, Brownian = 6
       -------------------------------------------
          StartTime: 0
         StartState: 100 (6x1 double array) 
        Correlation: 6x6 double array 
              Drift: drift rate function F(t,X(t)) 
          Diffusion: diffusion rate function G(t,X(t)) 
         Simulation: simulation method/function simByEuler
    

    sde объект требует дополнительной информации для определения размерности модели, поскольку функции переданыsde известны только по их интерфейсу (t, Xt). Другими словами,sde объект требует только двух входов: функции скорости дрейфа и функции скорости диффузии, которые доступны как путем прохождения времени выборки, так и соответствующего вектора состояния (t, Xt).

    В этом случае этой информации недостаточно для однозначного определения размерности вектора состояния и броуновского движения. Размерность разрешается путем задания вектора начального состояния. StartState. Подсистема SDE назначила метод моделирования по умолчанию, simByEuler, в Simulation параметр.

Представление рыночных моделей с использованием объектов SDEDDO

Создание sdeddo объект с использованием sdeddo для представления рыночной модели в уравнении 1:

  1. Загрузить Data_GlobalIdx2 набор данных:

    load Data_GlobalIdx2
    prices  = [Dataset.TSX Dataset.CAC Dataset.DAX ...
    Dataset.NIK Dataset.FTSE Dataset.SP];
  2. Перевести дневные цены в возвраты:

    returns =  tick2ret(prices);
  3. Вычислить статистику данных для ввода в методы моделирования:

    nVariables  = size(returns, 2);
    expReturn   = mean(returns);
    sigma       = std(returns);
    correlation = corrcoef(returns);
  4. Создать drift и diffusion объекты с использованием drift и diffusion:

    F = drift(zeros(nVariables,1), diag(expReturn))
    F = 
       Class DRIFT: Drift Rate Specification  
       -------------------------------------  
          Rate: drift rate function F(t,X(t)) 
             A: 6x1 double array
             B: 6x6 diagonal double array
    
    G = diffusion(ones(nVariables,1), diag(sigma))
    G = 
       Class DIFFUSION: Diffusion Rate Specification 
       --------------------------------------------- 
           Rate: diffusion rate function G(t,X(t))  
          Alpha: 6x1 double array
          Sigma: 6x6 diagonal double array
    
  5. Пройти drift и diffusion объекты в sdeddo:

    SDEDDO = sdeddo(F, G, 'Correlation', correlation, ...
    'StartState', 100)
    SDEDDO = 
       Class SDEDDO: SDE from Drift and Diffusion Objects
       --------------------------------------------------
         Dimensions: State = 6, Brownian = 6
       --------------------------------------------------
          StartTime: 0
         StartState: 100 (6x1 double array) 
        Correlation: 6x6 double array 
              Drift: drift rate function F(t,X(t)) 
          Diffusion: diffusion rate function G(t,X(t)) 
         Simulation: simulation method/function simByEuler
                  A: 6x1 double array
                  B: 6x6 diagonal double array
              Alpha: 6x1 double array
              Sigma: 6x6 diagonal double array
    

    sdeddo объект требует два входных объекта, которые предоставляют больше информации, чем две функции из шага 4 представления рыночных моделей с использованием объектов SDE. Таким образом, размерность легче поддается разрешению. Фактически, начальная цена каждого индекса является скаляром (StartState = 100). Это в отличие от sde , который требовал явного вектора состояния для однозначного определения размерности задачи.

    Снова класс каждого объекта четко идентифицируется, и параметры отображаются как поля структуры. В частности, Rate параметр объектов дрейфа и диффузии идентифицируется как вызываемая функция времени и состояния, F (t, Xt) и G (t, Xt) соответственно. Дополнительные параметры,A, B, Alpha, и Sigma, представляют собой массивы соответствующей размерности, указывающие статические (не изменяющиеся во времени) параметры. Другими словами, A (t, Xt), B (t, Xt), Alpha (t, Xt) и Sigma (t, Xt) являются постоянными функциями времени и состояния.

Представление рыночных моделей с использованием объектов SDELD, CEV и GBM

Создать sdeld, cev, и gbm объекты для представления рыночной модели в уравнении 1.

  1. Загрузить Data_GlobalIdx2 набор данных:

    load Data_GlobalIdx2
    prices  = [Dataset.TSX Dataset.CAC Dataset.DAX ...
        Dataset.NIK Dataset.FTSE Dataset.SP];
  2. Перевести дневные цены в возвраты:

    returns =  tick2ret(prices);
  3. Вычислить статистику данных для ввода в методы моделирования:

    nVariables  = size(returns, 2);
    expReturn   = mean(returns);
    sigma       = std(returns);
    correlation = corrcoef(returns);
    t           = 0;
    X           = 100;
    X           = X(ones(nVariables,1));
  4. Создание sdeld объект с использованием sdeld:

    SDELD = sdeld(zeros(nVariables,1), diag(expReturn), ...
        ones(nVariables,1), diag(sigma),'Correlation', ... 
        correlation, 'StartState', X)
    SDELD = 
       Class SDELD: SDE with Linear Drift
       ----------------------------------------
         Dimensions: State = 6, Brownian = 6
       ----------------------------------------
          StartTime: 0
         StartState: 100 (6x1 double array) 
        Correlation: 6x6 double array 
              Drift: drift rate function F(t,X(t)) 
          Diffusion: diffusion rate function G(t,X(t)) 
         Simulation: simulation method/function simByEuler
                  A: 6x1 double array
                  B: 6x6 diagonal double array
              Alpha: 6x1 double array
              Sigma: 6x6 diagonal double array
    
  5. Создать cev объект с использованием cev:

    CEV = cev(diag(expReturn), ones(nVariables,1), ... 
        diag(sigma), 'Correlation', correlation, ...
        'StartState', X)
    CEV = 
       Class CEV: Constant Elasticity of Variance
       ------------------------------------------
         Dimensions: State = 6, Brownian = 6
       ------------------------------------------
          StartTime: 0
         StartState: 100 (6x1 double array) 
        Correlation: 6x6 double array 
              Drift: drift rate function F(t,X(t)) 
          Diffusion: diffusion rate function G(t,X(t)) 
         Simulation: simulation method/function simByEuler
             Return: 6x6 diagonal double array
              Alpha: 6x1 double array
              Sigma: 6x6 diagonal double array
    
  6. Создать gbm объект с использованием gbm:

    GBM = gbm(diag(expReturn), diag(sigma), 'Correlation', ...
        correlation, 'StartState', X)
    GBM = 
       Class GBM: Generalized Geometric Brownian Motion
       ------------------------------------------------
         Dimensions: State = 6, Brownian = 6
       ------------------------------------------------
          StartTime: 0
         StartState: 100 (6x1 double array) 
        Correlation: 6x6 double array 
              Drift: drift rate function F(t,X(t)) 
          Diffusion: diffusion rate function G(t,X(t)) 
         Simulation: simulation method/function simByEuler
             Return: 6x6 diagonal double array
              Sigma: 6x6 diagonal double array
    

    Обратите внимание на последовательность ограничений интерфейса:

    • sdeld объекты требуют указания A, B, Alpha, и Sigma.

    • cev объекты требуют указания Return, Alpha, и Sigma.

    • gbm объекты требуют указания только Return и Sigma.

    Однако все три объекта представляют одну и ту же многомерную рыночную модель.

    Также, cev и gbm объекты отображают базовый параметр B полученные из sdeld объект как Return. Это интуитивно понятное название, обычно связанное с моделями долевого участия.

Моделирование рынков акций с использованием метода моделирования по умолчанию

  1. Загрузить Data_GlobalIdx2 набор и использование данных sde чтобы указать модель SDE как в разделе Представление рыночных моделей с использованием объектов SDE.

    load Data_GlobalIdx2
    prices  = [Dataset.TSX Dataset.CAC Dataset.DAX ...
        Dataset.NIK Dataset.FTSE Dataset.SP];
    
    returns =  tick2ret(prices);
    
    nVariables  = size(returns,2);
    expReturn   = mean(returns);
    sigma       = std(returns);
    correlation = corrcoef(returns);
    t           = 0;
    X           = 100;
    X           = X(ones(nVariables,1));
    
    F = @(t,X) diag(expReturn)* X;
    G = @(t,X) diag(X) * diag(sigma);
    
    SDE = sde(F, G, 'Correlation', ...
        correlation, 'StartState', X);
  2. Моделирование единого пути коррелированных цен индекса собственного капитала в течение одного календарного года (определенного как приблизительно 250 торговых дней) с использованием значения по умолчаниюsimulate способ:

    nPeriods = 249;      % # of simulated observations
    dt       =   1;      % time increment = 1 day
    rng(142857,'twister')
    [S,T] = simulate(SDE, nPeriods, 'DeltaTime', dt);
    
    whos S
      Name        Size            Bytes  Class     Attributes
    
      S         250x6             12000  double              
    

    Выходной массив S равно 250 на 6 = (NPeriods + 1около-nVariablesоколо-1) массив с тем же начальным значением, 100, для всех индексов. Каждая строка S является наблюдением вектора состояния Xt в момент времени t.

  3. Постройте график моделируемых путей.

    plot(T, S), xlabel('Trading Day'), ylabel('Price')
    title('Single Path of Multi-Dimensional Market Model')
    legend({'Canada' 'France' 'Germany' 'Japan' 'UK' 'US'}, ... 
        'Location', 'Best')

    Figure contains an axes. The axes with title Single Path of Multi-Dimensional Market Model contains 6 objects of type line. These objects represent Canada, France, Germany, Japan, UK, US.

Моделирование рынков акций с использованием метода SimSunEuler

Поскольку simByEuler является допустимым методом моделирования, вы можете вызвать его напрямую, переопределяя Simulation текущий метод или функция параметра (который в данном случае simByEuler). Следующие инструкции создают те же ценовые пути, что и при моделировании рынков акций с использованием метода моделирования по умолчанию:

  1. Загрузить Data_GlobalIdx2 набор и использование данных sde чтобы указать модель SDE как в разделе Представление рыночных моделей с использованием объектов SDE.

    load Data_GlobalIdx2
    prices  = [Dataset.TSX Dataset.CAC Dataset.DAX ...
        Dataset.NIK Dataset.FTSE Dataset.SP];
    
    returns =  tick2ret(prices);
    
    nVariables  = size(returns,2);
    expReturn   = mean(returns);
    sigma       = std(returns);
    correlation = corrcoef(returns);
    t           = 0;
    X           = 100;
    X           = X(ones(nVariables,1));
    
    F = @(t,X) diag(expReturn)* X;
    G = @(t,X) diag(X) * diag(sigma);
    
    SDE = sde(F, G, 'Correlation', ...
        correlation, 'StartState', X);
  2. Моделирование одного пути с помощью simByEuler.

    nPeriods = 249;      % # of simulated observations
    dt       =   1;      % time increment = 1 day
    rng(142857,'twister')
    [S,T] = simByEuler(SDE, nPeriods, 'DeltaTime', dt);
  3. Смоделировать 10 испытаний с одинаковыми исходными условиями и изучить S:

    rng(142857,'twister')
    [S,T] = simulate(SDE, nPeriods, 'DeltaTime', dt, 'nTrials', 10);
    
    whos S
      Name        Size               Bytes  Class     Attributes
    
      S         250x6x10            120000  double              
    

    Теперь выходной массив S является NPeriods + 1около-nVariablesоколо-NTrials массив временных рядов.

  4. Постройте первые контуры.

    plot(T, S(:,:,1)), xlabel('Trading Day'), ylabel('Price')
    title('First Path of Multi-Dimensional Market Model')
    legend({'Canada' 'France' 'Germany' 'Japan' 'UK' 'US'},...
        'Location', 'Best')

    Figure contains an axes. The axes with title First Path of Multi-Dimensional Market Model contains 6 objects of type line. These objects represent Canada, France, Germany, Japan, UK, US.

Первая реализация S идентичен контурам на графике.

Моделирование рынков акций с использованием методов моделирования GBM

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

  • Перегруженный метод моделирования Эйлера, simByEuler, предназначен для оптимальной производительности

  • Функция, simBySolution, обеспечивает приблизительное решение лежащего в основе стохастического дифференциального уравнения, рассчитанного на точность

  1. Загрузить Data_GlobalIdx2 набор и использование данных sde определение модели SDE как в представлении рыночных моделей с использованием объектов SDE, а модели GBM как в представлении рыночных моделей с использованием объектов SDELD, CEV и GBM.

    load Data_GlobalIdx2
    prices  = [Dataset.TSX Dataset.CAC Dataset.DAX ...
        Dataset.NIK Dataset.FTSE Dataset.SP];
    
    returns =  tick2ret(prices);
    
    nVariables  = size(returns,2);
    expReturn   = mean(returns);
    sigma       = std(returns);
    correlation = corrcoef(returns);
    t           = 0;
    X           = 100;
    X           = X(ones(nVariables,1));
    
    F = @(t,X) diag(expReturn)* X;
    G = @(t,X) diag(X) * diag(sigma);
    
    SDE = sde(F, G, 'Correlation', ...
        correlation, 'StartState', X);
    
    GBM = gbm(diag(expReturn),diag(sigma), 'Correlation', ...
        correlation, 'StartState', X);
  2. Чтобы проиллюстрировать преимущество производительности перегруженного метода аппроксимации Эйлера, увеличьте число испытаний до 10000.

    nPeriods = 249;      % # of simulated observations
    dt       =   1;      % time increment = 1 day
    rng(142857,'twister')
    [X,T] = simulate(GBM, nPeriods, 'DeltaTime', dt, ...
        'nTrials', 10000);
    
    whos X
      Name        Size                     Bytes  Class     Attributes
    
      X         250x6x10000            120000000  double              
    

    Продукция X является гораздо большим массивом временных рядов.

  3. Используя этот размер выборки, изучите терминальное распределение TSX Composite в Канаде, чтобы качественно проверить логнормальный характер данных.

    histogram(squeeze(X(end,1,:)), 30), xlabel('Price'), ylabel('Frequency')
    title('Histogram of Prices after One Year: Canada (TSX Composite)')

    Figure contains an axes. The axes with title Histogram of Prices after One Year: Canada (TSX Composite) contains an object of type histogram.

  4. Смоделировать 10 испытаний решения и построить график первого испытания:

    rng(142857,'twister')
    [S,T] = simulate(SDE, nPeriods, 'DeltaTime', dt, 'nTrials', 10);
    rng(142857,'twister')
    [X,T] = simBySolution(GBM, nPeriods,...
        'DeltaTime', dt, 'nTrials', 10);
    subplot(2,1,1)
    plot(T, S(:,:,1)), xlabel('Trading Day'),ylabel('Price')
    title('1st Path of Multi-Dim Market Model:Euler Approximation')
    subplot(2,1,2)
    plot(T, X(:,:,1)), xlabel('Trading Day'),ylabel('Price')
    title('1st Path of Multi-Dim Market Model:Analytic Solution')

    Figure contains 2 axes. Axes 1 with title 1st Path of Multi-Dim Market Model:Euler Approximation contains 6 objects of type line. Axes 2 with title 1st Path of Multi-Dim Market Model:Analytic Solution contains 6 objects of type line.

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

  5. Следующий график иллюстрирует разницу между двумя методами:

    subplot(1,1,1)
    plot(T, S(:,1,1) - X(:,1,1), 'blue'), grid('on')
    xlabel('Trading Day'), ylabel('Price Difference')
    title('Euler Approx Minus Exact Solution:Canada(TSX Composite)')

    Figure contains an axes. The axes with title Euler Approx Minus Exact Solution:Canada(TSX Composite) contains an object of type line.

simByEuler Аппроксимация Эйлера буквально оценивает стохастическое дифференциальное уравнение непосредственно из уравнения движения, для некоторого подходящего значения dt приращение времени. Эта простая аппроксимация страдает ошибкой дискретизации. Эта ошибка объясняется несоответствием между выбором dt приращение времени и то, что в теории является непрерывным параметром времени.

Дискретно-временная аппроксимация улучшается DeltaTime приближается к нулю. Метод Эйлера часто является наименее точным и наиболее общим доступным методом. Этот метод применяется ко всем моделям, поставляемым в комплект моделирования.

Напротив,simBySolution способ обеспечивает более точное описание базовой модели. Этот метод моделирует ценовые пути путем аппроксимации замкнутого решения разделяемых моделей. В частности, он применяет эйлеровский подход к преобразованному процессу, который в целом не является точным решением этого GBM модель. Это происходит потому, что распределения вероятности моделируемого и истинного векторов состояния идентичны только для кусочно-постоянных параметров.

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

Пример использования simBySolution для оптимизации точности решений см. раздел Оптимизация точности: о точности решения и ошибке.

Индуцирование зависимости и корреляции

Этот пример иллюстрирует две методики, которые индуцируют зависимость между отдельными элементами вектора состояния. Он также иллюстрирует взаимодействие между Sigma и Correlation.

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

Вторая методика генерирует независимые гауссовы вариации для формирования стандартного броуновского процесса движения, который затем взвешивается более низким коэффициентом Холески желаемой ковариационной матрицы. Хотя эти методы могут быть использованы на многих моделях, взаимосвязь между ними легче всего проиллюстрировать, работая с разделяемым GBM модель (см. Моделирование цен собственного капитала с использованием методов моделирования GBM). Моделируемая рыночная модель:

dXt =

где λ - диагональная матрица.

  1. Загрузите набор данных:

    load Data_GlobalIdx2
    prices  = [Dataset.TSX Dataset.CAC Dataset.DAX ...
        Dataset.NIK Dataset.FTSE Dataset.SP];
  2. Преобразуйте дневные цены в возвраты:

    returns =  tick2ret(prices);
  3. Определить Sigma и Correlation с использованием первой методики:

    1. Используя первый метод, укажите Sigma в качестве диагональной матрицы стандартных отклонений возврата основных средств:

      expReturn   = diag(mean(returns));  % expected return vector
      sigma       = diag(std(returns));   % volatility of returns
    2. Определить Correlation в качестве выборки корреляционной матрицы этих возвращений. В этом случае компоненты броуновского движения зависимы:

      correlation = corrcoef(returns);    
      GBM1        = gbm(expReturn,sigma,'Correlation',...
                        correlation);
  4. Определить Sigma и Correlation используя второй метод:

    1. Используя второй метод, укажите Sigma в качестве нижнего коэффициента Холеского ковариационной матрицы возврата активов:

      covariance = cov(returns);
      sigma      = cholcov(covariance)';
    2. Набор Correlation к единичной матрице:

      GBM2       = gbm(expReturn,sigma);

      Здесь, sigma фиксирует как корреляцию, так и величину неопределенности возврата активов. В отличие от первой техники, компоненты броуновского движения независимы. Кроме того, этот метод допускает назначение по умолчанию единичной матрицы Correlationи является более простым.

  5. Смоделировать одно испытание из 1000 наблюдений (примерно четыре года ежедневных данных) с использованием обоих методов. По умолчанию все переменные состояния начинаются с 1:

    rng(22814,'twister')
    [X1,T] = simByEuler(GBM1,1000);  % correlated Brownian motion
    rng(22814,'twister')
    [X2,T] = simByEuler(GBM2,1000);  % standard Brownian motion

При использовании одного и того же начального состояния случайного числа каждый метод генерирует идентичные пути цены актива:

subplot(2,1,1)
plot(T, X1)
title('Sample Paths from Correlated Brownian Motion')
ylabel('Asset Price')
subplot(2,1,2)
plot(T, X2)
title('Sample Paths from Standard Brownian Motion')
xlabel('Trading Day')
ylabel('Asset Price')

Figure contains 2 axes. Axes 1 with title Sample Paths from Correlated Brownian Motion contains 6 objects of type line. Axes 2 with title Sample Paths from Standard Brownian Motion contains 6 objects of type line.

Динамическое поведение рыночных параметров

Как описано в разделе Создание объектов SDE, параметры объекта могут оцениваться так, как если бы они представляли собой функции MATLAB ®, доступные через общий интерфейс. Эта доступность обеспечивает впечатление динамического поведения независимо от того, действительно ли основные параметры изменяются во времени. Кроме того, поскольку параметры доступны через общий интерфейс, кажущиеся простыми линейные конструкции могут фактически представлять сложные нелинейные конструкции .

Например, рассмотрим одномерную модель геометрического броуновского движения (GBM) вида:

dXt = (t) Xtdt + (t) XtdWt

В этой модели доходность, λ (t), и волатильность, λ (t), являются динамическими параметрами только времени. Однако при создании gbm для представления базовой модели такое динамическое поведение должно быть доступно через общий интерфейс (t, Xt). Это отражает тот факт, что GBM модели (и другие) являются ограниченными параметризациями, производными от общих SDE класс.

Для удобства можно задать параметры ограниченных моделей, например: GBM модели, как традиционные массивы MATLAB соответствующего размера. В этом случае такие массивы представляют собой статический частный случай более общей динамической ситуации, доступной интерфейсу (t, Xt).

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

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

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

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

    load Data_GlobalIdx2
  2. Моделирование нейтральных по риску путей выборки. Моделирование нейтральных для риска путей выборки индекса CAC 40 с использованием геометрического броуновского движения (GBM) модель:

    dXt = r (t) Xtdt + startXtdWt

    где r (t) представляет эволюцию безрисковой нормы прибыли.

    Кроме того, предположим, что требуется ежегодная обработка соответствующей информации, полученной из ежедневных данных (ежегодная обработка данных необязательна, но полезна для сравнения с другими примерами), и что каждый календарный год включает 250 торговых дней:

    dt      = 1/250;
    returns = tick2ret(Dataset.CAC);
    sigma   = std(returns)*sqrt(250);
    yields  = Dataset.EB3M;
    yields  = 360*log(1 + yields);
  3. Сравните пути выборки из двух подходов к историческому моделированию, нейтральных по риску. Сравните результирующие пути выборки, полученные из двух подходов исторического моделирования, нейтральных к риску, где ежедневные доходности Euribor служат прокси для безрисковой нормы прибыли.

    1. Первый подход определяет нейтральную по риску доходность как выборочную среднюю доходность Euribor и, следовательно, предполагает постоянную (нединамическую) безрисковую доходность:

      nPeriods = length(yields);  % Simulated observations
      rng(5713,'twister')
      obj    = gbm(mean(yields),diag(sigma),'StartState',100)
      obj = 
         Class GBM: Generalized Geometric Brownian Motion
         ------------------------------------------------
           Dimensions: State = 1, Brownian = 1
         ------------------------------------------------
            StartTime: 0
           StartState: 100
          Correlation: 1
                Drift: drift rate function F(t,X(t)) 
            Diffusion: diffusion rate function G(t,X(t)) 
           Simulation: simulation method/function simByEuler
               Return: 0.0278117
                Sigma: 0.231906
      
      [X1,T] = simulate(obj,nPeriods,'DeltaTime',dt);
    2. Напротив, второй подход определяет нейтральную к риску доходность как исторические временные ряды доходности Euribor. Поэтому она предполагает динамичную, но детерминированную норму прибыли; этот пример не иллюстрирует стохастические процентные ставки. Чтобы проиллюстрировать этот динамический эффект, используйте ts2func утилита:

      r = ts2func(yields,'Times',(0:nPeriods - 1)');

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

      r(0,100)
      ans = 0.0470
      

      вычисляет функцию при (t = 0, X t = 100) и возвращает первый наблюдаемый выход по Эврибору. Однако можно также вычислить результирующую функцию в любое промежуточное время t и состояние Xt:

      r(7.5,200)
      ans = 0.0472
      

      Кроме того, следующая команда дает тот же результат при вызове только по времени:

      r(7.5)
      ans = 0.0472
      

      Эквивалентность этих двух последних команд подчеркивает некоторые важные особенности.

      При указании параметров в качестве функций они должны правильно вычисляться при прохождении скалярного, действительного времени выборки (t) и NVars-by-1 вектор состояния (Xt). Они также должны генерировать массив соответствующих размеров, который в первом случае является скалярной константой, а во втором - скалярной, кусочно-постоянной функцией только времени.

      Использование времени (t) или состояния (Xt) не требуется. В текущем примере функция правильно вычисляется, когда прошло время, за которым следует состояние, тем самым удовлетворяя минимальным требованиям. Тот факт, что он также правильно вычисляется, когда прошло только время, просто указывает на то, что функция не требует вектора состояния Xt. Важно отметить, что он работает при прохождении (t, Xt).

      Кроме того, ts2func функция выполняет интерполяцию кусочных констант с удержанием нулевого порядка (ZOH). Понятие кусочно-постоянных параметров широко распространено во всей архитектуре SDE и более подробно обсуждается в разделе Оптимизация точности: о точности решения и ошибке.

  4. Выполните второе моделирование с использованием того же начального состояния случайных чисел. Выполните сравнение, выполнив второе моделирование с использованием того же начального состояния случайных чисел:

    rng(5713,'twister')
    obj = gbm(r, diag(sigma),'StartState',100)
    obj = 
       Class GBM: Generalized Geometric Brownian Motion
       ------------------------------------------------
         Dimensions: State = 1, Brownian = 1
       ------------------------------------------------
          StartTime: 0
         StartState: 100
        Correlation: 1
              Drift: drift rate function F(t,X(t)) 
          Diffusion: diffusion rate function G(t,X(t)) 
         Simulation: simulation method/function simByEuler
             Return: function ts2func/vector2Function
              Sigma: 0.231906
    
    X2  = simulate(obj,nPeriods,'DeltaTime',dt);
  5. Сравните два испытания моделирования. Постройте график ряда безрисковых эталонных показателей для сравнения двух испытаний моделирования:

    subplot(2,1,1)
    plot(dates,100*yields)
    datetick('x')
    xlabel('Date')
    ylabel('Annualized Yield (%)')
    title('Risk Free Rate(3-Mo Euribor Continuously-Compounded)')
    subplot(2,1,2)
    plot(T,X1,'red',T,X2,'blue')
    xlabel('Time (Years)')
    ylabel('Index Level')
    title('Constant vs. Dynamic Rate of Return: CAC 40')
    legend({'Constant Interest Rates' 'Dynamic Interest Rates'},...
        'Location', 'Best')

    Figure contains 2 axes. Axes 1 with title Risk Free Rate(3-Mo Euribor Continuously-Compounded) contains an object of type line. Axes 2 with title Constant vs. Dynamic Rate of Return: CAC 40 contains 2 objects of type line. These objects represent Constant Interest Rates, Dynamic Interest Rates.

    Пути близки, но не точны. Синяя линия на последнем сюжете использует все исторические данные Euribor, и иллюстрирует единственную пробную версию исторического моделирования.

Опционы на стоимость собственного капитала

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

Xt = f (t, Xt)

для оценки в конце каждого времени выборки.

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

Рассмотрим ценообразование европейских опционов на акции с помощью моделирования Monte Carlo в рамках Black-Scholes-Merton. Предположим, что запас имеет следующие признаки:

  • Акции в настоящее время торгуются на уровне 100.

  • Акции не платят дивидендов.

  • Волатильность акций составляет 50% годовых.

  • Цена страйка опциона составляет 95.

  • Срок действия опции истекает через три месяца.

  • Безрисковая ставка постоянна и составляет 10% годовых.

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

dXt = 0 .1Xtdt + 0 .5XtdWt

Кроме того, предположим, что цена акций моделируется ежедневно и каждый календарный месяц включает 21 торговый день:

strike   = 95;
rate     = 0.1;
sigma    = 0.5;
dt       = 1/252;
nPeriods = 63;
T        = nPeriods*dt;
obj = gbm(rate,sigma,'StartState',100);

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

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

  • Функция обработки в конце периода, доступная по времени и состоянию, которая записывает цену терминального запаса для каждого пути образца. Эта функция обработки реализована как вложенная функция с доступом к совместно используемой информации. Дополнительные сведения см. в разделе Example_BlackScholes.m.

  1. Перед моделированием вызовите файл примера для доступа к функции обработки в конце периода:

    nTrials = 10000; % Number of independent trials (i.e., paths)
    f = Example_BlackScholes(nPeriods,nTrials)
    f = struct with fields:
        BlackScholes: @Example_BlackScholes/saveTerminalStockPrice
           CallPrice: @Example_BlackScholes/getCallPrice
            PutPrice: @Example_BlackScholes/getPutPrice
    
    
  2. Моделирование 10000 независимых испытаний (пути выборки). Запросите смоделированные пути цены запаса в качестве выходного документа и определите функцию обработки на конец периода:

    rng(88161,'twister')
    X = simBySolution(obj,nPeriods,'DeltaTime',dt,... 
        'nTrials',nTrials,'Processes',f.BlackScholes);
  3. Вычислите цены опционов непосредственно по моделируемым путям цены акций. Поскольку это европейские опционы, игнорируйте все промежуточные цены на акции:

    call = mean(exp(-rate*T)*max(squeeze(X(end,:,:)) - strike, 0))
    call = 13.9342
    
    put  = mean(exp(-rate*T)*max(strike - squeeze(X(end,:,:)), 0))
    put = 6.4166
    
  4. Оцените опционы косвенно, вызвав вложенные функции:

    f.CallPrice(strike,rate)
    ans = 13.9342
    
    f.PutPrice(strike,rate)
    ans = 6.4166
    

    Для справки, теоретические цены колла и пут, рассчитанные на основе опционных формул Блэка-Шоулза, являются 13.6953 и 6.3497соответственно.

  5. Несмотря на то, что шаги 3 и 4 создают одинаковые цены опционов, последний подход работает непосредственно с ценами терминальных запасов каждого пути выборки. Поэтому он намного эффективнее памяти. В этом примере нет убедительной причины запрашивать выходные данные.

См. также

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

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

Подробнее