exponenta event banner

simBySolution

Смоделировать приблизительное решение процесса диффузии диагонально-дрейфового перехода Мертона

Описание

пример

[Paths,Times,Z,N] = simBySolution(MDL,NPeriods) моделирует NNTrials примеры путей NVars коррелированные переменные состояния, управляемые NBrowns Броуновские источники движения риска и NJumps сложные пуассоновские процессы, представляющие прибытие важных событий NPeriods последовательные периоды наблюдения. Моделирование аппроксимирует процесс диффузии мертоновского скачка с непрерывным временем посредством аппроксимации решения закрытой формы.

пример

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

Примеры

свернуть все

Смоделировать приблизительное решение процесса Мертона с диагональным дрейфом.

Создать merton объект.

AssetPrice = 80;
            Return = 0.03;
            Sigma = 0.16;
            JumpMean = 0.02;
            JumpVol = 0.08;
            JumpFreq = 2;
            
            mertonObj = merton(Return,Sigma,JumpFreq,JumpMean,JumpVol,...
                'startstat',AssetPrice)
mertonObj = 
   Class MERTON: Merton Jump Diffusion
   ----------------------------------------
     Dimensions: State = 1, Brownian = 1
   ----------------------------------------
      StartTime: 0
     StartState: 80
    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.16
         Return: 0.03
       JumpFreq: 2
       JumpMean: 0.02
        JumpVol: 0.08

Использовать simBySolution моделировать NTrials примеры путей NVARS коррелированные переменные состояния, управляемые NBrowns Броуновские источники движения риска и NJumps сложные пуассоновские процессы, представляющие прибытие важных событий NPeriods последовательные периоды наблюдения. Функция аппроксимирует процесс диффузии мертоновского скачка с непрерывным временем аппроксимацией решения закрытой формы.

nPeriods = 100;
[Paths,Times,Z,N] = simBySolution(mertonObj, nPeriods,'nTrials', 3)
Paths = 
Paths(:,:,1) =

   1.0e+03 *

    0.0800
    0.0662
    0.1257
    0.1863
    0.2042
    0.2210
    0.2405
    0.3143
    0.4980
    0.4753
    0.4088
    0.5627
    0.6849
    0.6662
    0.7172
    0.7710
    0.6758
    0.5528
    0.4777
    0.6314
    0.7290
    0.7265
    0.6018
    0.6630
    0.5531
    0.5919
    0.5580
    0.7209
    0.8122
    0.6494
    0.8194
    0.7434
    0.6887
    0.6873
    0.7052
    0.8532
    0.5498
    0.4686
    0.5445
    0.4291
    0.5118
    0.4138
    0.4986
    0.4331
    0.4687
    0.5235
    0.4944
    0.4616
    0.3621
    0.4860
    0.4461
    0.4268
    0.4179
    0.3913
    0.5225
    0.4346
    0.3433
    0.3635
    0.3604
    0.3736
    0.3771
    0.4883
    0.4785
    0.4859
    0.5719
    0.6593
    0.7232
    0.8269
    0.7894
    0.8895
    0.9131
    0.7396
    0.9902
    1.4258
    1.1410
    1.1657
    1.2759
    1.2797
    1.2587
    1.5073
    1.5914
    1.2676
    1.5111
    1.4698
    1.5310
    1.0471
    1.3415
    1.2142
    1.3649
    1.9905
    1.9329
    1.5042
    1.7000
    2.2315
    2.6107
    2.2992
    2.6765
    2.7024
    1.6837
    1.0520
    1.1556


Paths(:,:,2) =

   80.0000
   67.0894
   98.3231
  108.1133
  102.2668
  116.5130
   92.6337
   94.7715
  110.7864
  125.7798
  120.6730
  116.9214
  106.8356
  118.3119
  190.3385
  228.3806
  271.8072
  272.0175
  306.3696
  249.6461
  427.2599
  310.1494
  471.7915
  370.6712
  426.4875
  393.6037
  423.9768
  436.6450
  423.3666
  415.2689
  578.7237
  448.8291
  358.5539
  314.4588
  284.7537
  345.2281
  379.3241
  432.3968
  284.6978
  428.3203
  314.5781
  326.2297
  236.1605
  178.9878
  175.8927
  177.5584
  140.5670
  124.3399
  111.5921
  114.6988
  101.7877
   72.8823
   61.0876
   54.7438
   53.9104
   44.3239
   32.8282
   35.8978
   44.7213
   37.6385
   34.8707
   33.4812
   35.0828
   37.3844
   50.3077
   49.7005
   41.2006
   58.0578
   51.8254
   42.3636
   38.3241
   40.1687
   35.9465
   44.4746
   36.3203
   31.4723
   25.3097
   23.4042
   14.5024
   11.9513
   11.7996
   13.2874
   14.9033
   14.9986
   14.9639
   18.8188
   16.5700
   17.8684
   13.5567
   13.5978
   11.3215
   10.6453
    9.9437
   10.9639
   14.0077
   16.5691
   12.1943
   10.7238
   11.5439
    9.3313
   10.3501


Paths(:,:,3) =

   80.0000
   79.6896
   69.0705
   57.4353
   54.6468
   61.1361
   78.0797
  104.5536
  107.1168
   87.1463
   54.5801
   59.8430
   67.0858
   74.7163
   65.0742
   90.0205
   70.0329
   94.1883
   88.2437
  100.7302
  127.2244
  111.4070
   81.0410
   93.1479
   72.5876
   74.3940
   71.8182
   78.4764
   90.1952
   89.6539
   70.3198
   50.4493
   58.2573
   52.1928
   67.7723
   81.1286
  112.6400
  108.8060
  103.0418
  104.3689
  120.8792
   89.2307
   66.3967
   76.2541
   57.1963
   56.8041
   40.4475
   34.5959
   45.2467
   44.6159
   52.2680
   63.3114
   69.8554
  102.0669
   76.8265
   84.8615
   62.4934
   70.3915
   54.4665
   60.1859
   68.3690
   73.3205
   87.8904
   82.7777
   94.8760
   88.8936
  103.9546
  103.4198
   99.0468
  135.2132
  117.9348
  120.8927
  126.9568
  120.5084
  119.4830
  154.8170
  165.2276
  180.3558
  150.8172
  155.2828
  138.6475
  179.8007
  158.8069
  166.0540
  229.0607
  253.4962
  240.1957
  192.3787
  225.7069
  311.1060
  353.6839
  463.5303
  515.0606
  569.4017
  488.1785
  331.1247
  392.7017
  379.5234
  238.3932
  186.9090
  209.5703

Times = 101×1

     0
     1
     2
     3
     4
     5
     6
     7
     8
     9
      ⋮

Z = 
Z(:,:,1) =

   -1.3077
    3.5784
    3.0349
    0.7147
    1.4897
    0.6715
    1.6302
    0.7269
   -0.7873
   -1.0689
    1.4384
    1.3703
   -0.2414
   -0.8649
    0.6277
   -0.8637
   -1.1135
   -0.7697
    1.1174
    0.5525
    0.0859
   -1.0616
    0.7481
   -0.7648
    0.4882
    1.4193
    1.5877
    0.8351
   -1.1658
    0.7223
    0.1873
   -0.4390
   -0.8880
    0.3035
    0.7394
   -2.1384
   -1.0722
    1.4367
   -1.2078
    1.3790
   -0.2725
    0.7015
   -0.8236
    0.2820
    1.1275
    0.0229
   -0.2857
   -1.1564
    0.9642
   -0.0348
   -0.1332
   -0.2248
   -0.8479
    1.6555
   -0.8655
   -1.3320
    0.3335
   -0.1303
    0.8620
   -0.8487
    1.0391
    0.6601
   -0.2176
    0.0513
    0.4669
    0.1832
    0.3071
    0.2614
   -0.1461
   -0.8757
   -1.1742
    1.5301
    1.6035
   -1.5062
    0.2761
    0.3919
   -0.7411
    0.0125
    1.2424
    0.3503
   -1.5651
    0.0983
   -0.0308
   -0.3728
   -2.2584
    1.0001
   -0.2781
    0.4716
    0.6524
    1.0061
   -0.9444
    0.0000
    0.5946
    0.9298
   -0.6516
   -0.0245
    0.8617
   -2.4863
   -2.3193
    0.4115


Z(:,:,2) =

   -0.4336
    2.7694
    0.7254
   -0.2050
    1.4090
   -1.2075
    0.4889
   -0.3034
    0.8884
   -0.8095
    0.3252
   -1.7115
    0.3192
   -0.0301
    1.0933
    0.0774
   -0.0068
    0.3714
   -1.0891
    1.1006
   -1.4916
    2.3505
   -0.1924
   -1.4023
   -0.1774
    0.2916
   -0.8045
   -0.2437
   -1.1480
    2.5855
   -0.0825
   -1.7947
    0.1001
   -0.6003
    1.7119
   -0.8396
    0.9610
   -1.9609
    2.9080
   -1.0582
    1.0984
   -2.0518
   -1.5771
    0.0335
    0.3502
   -0.2620
   -0.8314
   -0.5336
    0.5201
   -0.7982
   -0.7145
   -0.5890
   -1.1201
    0.3075
   -0.1765
   -2.3299
    0.3914
    0.1837
   -1.3617
   -0.3349
   -1.1176
   -0.0679
   -0.3031
    0.8261
   -0.2097
   -1.0298
    0.1352
   -0.9415
   -0.5320
   -0.4838
   -0.1922
   -0.2490
    1.2347
   -0.4446
   -0.2612
   -1.2507
   -0.5078
   -3.0292
   -1.0667
   -0.0290
   -0.0845
    0.0414
    0.2323
   -0.2365
    2.2294
   -1.6642
    0.4227
   -1.2128
    0.3271
   -0.6509
   -1.3218
   -0.0549
    0.3502
    0.2398
    1.1921
   -1.9488
    0.0012
    0.5812
    0.0799
    0.6770


Z(:,:,3) =

    0.3426
   -1.3499
   -0.0631
   -0.1241
    1.4172
    0.7172
    1.0347
    0.2939
   -1.1471
   -2.9443
   -0.7549
   -0.1022
    0.3129
   -0.1649
    1.1093
   -1.2141
    1.5326
   -0.2256
    0.0326
    1.5442
   -0.7423
   -0.6156
    0.8886
   -1.4224
   -0.1961
    0.1978
    0.6966
    0.2157
    0.1049
   -0.6669
   -1.9330
    0.8404
   -0.5445
    0.4900
   -0.1941
    1.3546
    0.1240
   -0.1977
    0.8252
   -0.4686
   -0.2779
   -0.3538
    0.5080
   -1.3337
   -0.2991
   -1.7502
   -0.9792
   -2.0026
   -0.0200
    1.0187
    1.3514
   -0.2938
    2.5260
   -1.2571
    0.7914
   -1.4491
    0.4517
   -0.4762
    0.4550
    0.5528
    1.2607
   -0.1952
    0.0230
    1.5270
    0.6252
    0.9492
    0.5152
   -0.1623
    1.6821
   -0.7120
   -0.2741
   -1.0642
   -0.2296
   -0.1559
    0.4434
   -0.9480
   -0.3206
   -0.4570
    0.9337
    0.1825
    1.6039
   -0.7342
    0.4264
    2.0237
    0.3376
   -0.5900
   -1.6702
    0.0662
    1.0826
    0.2571
    0.9248
    0.9111
    1.2503
   -0.6904
   -1.6118
    1.0205
   -0.0708
   -2.1924
   -0.9485
    0.8577

N = 
N(:,:,1) =

     1
     2
     1
     0
     2
     0
     1
     3
     4
     2
     1
     0
     1
     1
     1
     1
     0
     0
     3
     2
     2
     1
     0
     1
     1
     3
     3
     4
     2
     4
     1
     1
     2
     0
     2
     2
     3
     2
     1
     3
     2
     2
     1
     1
     1
     3
     0
     2
     2
     1
     0
     1
     1
     1
     1
     0
     2
     2
     1
     1
     6
     7
     3
     2
     2
     1
     3
     3
     4
     3
     0
     1
     7
     2
     0
     5
     2
     2
     1
     2
     1
     3
     0
     2
     5
     2
     2
     4
     2
     3
     1
     2
     6
     1
     0
     3
     3
     1
     1
     3


N(:,:,2) =

     2
     2
     2
     0
     4
     1
     2
     3
     1
     2
     1
     4
     2
     4
     2
     2
     2
     2
     1
     5
     3
     1
     3
     3
     1
     3
     5
     1
     4
     2
     2
     1
     2
     1
     1
     6
     0
     2
     2
     3
     2
     2
     1
     0
     1
     5
     5
     0
     1
     1
     2
     1
     2
     3
     2
     2
     1
     2
     2
     0
     3
     1
     5
     3
     3
     0
     2
     1
     2
     0
     4
     1
     3
     1
     2
     2
     2
     1
     0
     2
     2
     2
     2
     1
     1
     3
     1
     2
     2
     1
     4
     1
     3
     3
     0
     1
     1
     1
     2
     3


N(:,:,3) =

     3
     2
     2
     1
     4
     2
     3
     0
     0
     4
     3
     2
     3
     1
     1
     1
     1
     3
     4
     1
     2
     3
     1
     1
     1
     1
     0
     3
     0
     1
     0
     5
     0
     2
     4
     3
     1
     0
     1
     4
     3
     3
     2
     1
     2
     3
     1
     4
     4
     1
     1
     2
     2
     1
     1
     1
     2
     1
     6
     1
     2
     1
     3
     2
     2
     1
     3
     1
     7
     0
     1
     5
     1
     1
     3
     4
     3
     1
     2
     2
     1
     2
     1
     1
     1
     1
     1
     2
     3
     4
     2
     1
     3
     2
     1
     1
     0
     1
     3
     0

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

свернуть все

Модель Мертона, заданная как merton объект. Можно создать merton объект с использованием merton.

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

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

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

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

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

Пример: [Paths,Times,Z,N] = simBySolution(merton,NPeriods,'DeltaTimes',dt,'NNTrials',10)

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

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

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

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

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

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

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

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

Флаг для использования антитетической выборки для генерации гауссовых случайных вариаций, которые управляют броуновским вектором движения (процессы Винера), указанный как пара, разделенная запятыми, состоящая из 'Antithetic' и скалярный числовой или логический 1 (true) или 0 (false).

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

  • Нечётные НТриалы (1,3,5,...) соответствуют первичным гауссовым путям.

  • Даже NTrials (2,4,6,...) - совпадающие антитетические пути каждой пары, полученные отрицанием гауссовых притяжений соответствующего первичного (нечётного) испытания.

Примечание

При указании входного шумового процесса (см. Z), simBySolution игнорирует значение Antithetic.

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

Прямая спецификация зависимого процесса случайного шума для генерации броуновского вектора движения (процесс Винера), который управляет моделированием, заданная как разделенная запятыми пара, состоящая из 'Z' и функцию или (NPeriods * NSteps)около-NBrownsоколо-NNTrials трехмерный массив зависимых случайных вариаций.

Входной аргумент Z позволяет непосредственно указать процесс генерации шума. Этот процесс имеет приоритет над Correlation параметр входа merton объект и значение Antithetic флаг ввода.

В частности, когда Z указывается, Correlation не используется явным образом для генерации гауссовых вариаций, которые управляют броуновским движением. Однако Correlation по-прежнему используется в выражении, которое появляется в экспоненциальном члене log [Xt] схемы Эйлера. Таким образом, необходимо указатьZ как коррелированный процесс гауссова шума, корреляционная структура которого последовательно фиксируется Correlation.

Примечание

При указании Z как функция, она должна возвращать NBrownsоколо-1 вектор столбца, и вы должны вызвать его с двумя входами:

  • Действительное скалярное время наблюдения t

  • Один NVarsоколо-1 вектор состояния Xt

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

Зависимый случайный процесс подсчета для генерации количества переходов, указанный как пара, разделенная запятыми, состоящая из 'N' и функция или (NPeriodsNStepsоколо-NJumpsоколо-NNTrials трехмерный массив зависимых случайных вариаций. Если указана функция, N должен возвращать NJumpsоколо-1 вектор столбца, и вы должны вызвать его с двумя входами: действительное скалярное время наблюдения t, за которым следует NVarsоколо-1 вектор состояния Xt.

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

Флаг, указывающий способ вывода массива Paths сохраняется и возвращается, указывается как пара, разделенная запятыми, состоящая из 'StorePaths' и скалярный числовой или логический 1 (true) или 0 (false).

Если StorePaths является true (значение по умолчанию) или не указано, simBySolution прибыль Paths в виде трехмерного массива временных рядов.

Если StorePaths является false (логический 0), simBySolution прибыль Paths в виде пустой матрицы.

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

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

Xt = P (t, Xt)

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

Конец периода Processes позволяет досрочно завершить данную пробную версию. В конце каждого шага времени simBySolution проверяет вектор состояния Xt для all-NaN состояние. Таким образом, чтобы сигнализировать о досрочном прекращении данного испытания, все элементы вектора состояния Xt должны быть NaN. Этот тест включает определяемый пользователем Processes Функция сигнализирует о досрочном прекращении испытания и предлагает значительные преимущества производительности в некоторых ситуациях (например, опционы ценового барьера).

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

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

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

свернуть все

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

Для данного испытания каждая строка Paths - транспонирование вектора состояния Xt в момент времени t. StorePaths имеет значение false, simBySolution прибыль Paths в виде пустой матрицы.

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

Зависимые случайные вариации для генерации броуновского вектора движения (процессы Винера), которые управляют моделированием, возвращаются в виде (NPeriods * NSteps)около-NBrownsоколо-NNTrials трехмерный массив временных рядов.

Зависимые случайные вариации для генерации вектора процесса подсчета переходов, возвращаемого как (NPeriods ⨉ NSteps)около-NJumpsоколо-NNTrials трехмерный массив временных рядов.

Подробнее

свернуть все

Антитетический отбор проб

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

Этот метод пытается заменить одну последовательность случайных наблюдений другой, которая имеет то же самое ожидаемое значение, но меньшую дисперсию. В типичном моделировании Монте-Карло каждый путь образца является независимым и представляет собой независимое испытание. Однако антитетическая выборка создает пути выборки попарно. Первый путь пары называется первичным путем, а второй - антитетическим путем. Любая данная пара является независимой от других пар, но два пути внутри каждой пары сильно коррелированы. В литературе по антитетической выборке часто рекомендуется усреднять дисконтированные выплаты каждой пары, фактически вдвое уменьшая количество NTrials Монте-Карло.

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

Алгоритмы

simBySolution функция моделирует вектор состояния Xt по аппроксимации замкнутого решения диагональных дрейфовых моделей диффузии перехода Мертона. В частности, он применяет подход Эйлера к преобразованному log[Xt] процесс (используя формулу Ито). В общем, это не является точным решением модели диффузии перехода Мертона, поскольку распределения вероятностей моделируемого и истинного векторов состояния идентичны только для кусочно-постоянных параметров.

Эта функция моделирует любые векторные значения merton процесс формы

dXt = B (t, Xt) Xtdt + D (t, Xt) V (t, xt) dWt + Y (t, Xt, Nt) XtdNt

Здесь:

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

  • B (t, Xt) - это NVarsоколо-NVars матрица обобщенных ожидаемых мгновенных показателей доходности.

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

  • V(t,Xt) является NVarsоколо-NVars матрица мгновенных скоростей волатильности.

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

  • Y(t,Xt,Nt) является NVarsоколо-NJumps функция размера перехода со значением матрицы.

  • dNt является NJumpsоколо-1 подсчет вектора процесса.

Ссылки

[1] Айт-Сахалия, Яцин. «Тестирование непрерывных временных моделей спотовой процентной ставки». Обзор финансовых исследований 9, № 2 (апрель 1996 года): 385-426.

[2] Айт-Сахалия, Яцин. «Плотности перехода для процентной ставки и других нелинейных диффузий». Журнал финансов 54, № 4 (август 1999 года): 1361-95.

[3] Глассермен, Пол. Методы Монте-Карло в финансовой инженерии. Нью-Йорк: Спрингер-Верлаг, 2004.

[4] Халл, Джон К. Опционы, фьючерсы и другие деривативы. 7-е изд., Прентис Холл, 2009.

[5] Джонсон, Норман Ллойд, Сэмюэл Коц и Нараянасвами Балакришнан. Непрерывные одномерные распределения. 2-й ред. Серия Уайли в вероятностной и математической статистике. Нью-Йорк: Уайли, 1995.

[6] Шрив, Стивен Э. Стохастическое исчисление для финансов. Нью-Йорк: Спрингер-Верлаг, 2004.

Представлен в R2020a