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 имя аргумента и 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 ложь).

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

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

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

Примечание

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

Типы данных: логический

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

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

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

Примечание

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

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

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

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

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

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

Отметьте, который указывает как выходной массив Paths хранится и возвратился в виде разделенной запятой пары, состоящей из 'StorePaths' и скалярный числовой или логический 1 TRUE) или 0 ложь).

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

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

Типы данных: логический

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

Xt=P(t,Xt)

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

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

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

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

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

свернуть все

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

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

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

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

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

Больше о

свернуть все

Прямо противоположная выборка

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

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

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

Алгоритмы

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

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

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

Здесь:

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

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

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

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

  • dW t является NBrowns- 1 Вектор броуновского движения.

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

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

Ссылки

[1] Aït-Sahalia, Yacine. “Тестируя Модели Непрерывного времени Точечной Процентной ставки”. Анализ Финансовых Исследований 9, № 2 (апрель 1996): 385–426.

[2] Aït-Sahalia, Yacine. “Плотность перехода для Процентной ставки и Другой Нелинейной Диффузии”. Журнал Финансов 54, № 4 (август 1999): 1361–95.

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

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

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

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

Введенный в R2020a