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-by- 1 Вектор-столбец.

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

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

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

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

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

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

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

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

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

Примечание

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

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

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

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

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

Примечание

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

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

  • Система координат NVars-by- 1 вектор состояния Xt

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

Зависимый процесс случайного подсчета для генерации количества переходов, заданный как разделенная разделенными запятой парами, состоящая из 'N' и функцию или (NPeriodsNSteps) -by- NJumps-by- NNTrials трехмерный массив зависимых случайных вариаций. Если вы задаете функцию, N необходимо вернуть NJumps-by- 1 Вектор-столбец, и вы должны вызвать его с двумя входами: реальное скалярное время наблюдения t за которым следует NVars-by- 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 а вектор текущего состояния X t и вернуть вектор состояния, который может быть корректировкой входа состояния.

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

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

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

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

свернуть все

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

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

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

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

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

Подробнее о

свернуть все

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

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

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

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

Алгоритмы

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

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

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

Здесь:

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

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

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

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

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

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

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

Ссылки

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

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

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

[4] Hull, John C. Опции, фьючерсы и другие производные. 7-е изд, Prentice Hall, 2009.

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

[6] Shreve, Steven E. Stochastic Calculus for Finance. Нью-Йорк: Springer-Verlag, 2004.

Введенный в R2020a