Симулируйте приблизительное решение процесса диффузии перехода Мертона с диагональным дрейфом
[
моделирует Paths
,Times
,Z
,N
] = simBySolution(MDL
,NPeriods
)NNTrials
выборочные пути NVars
коррелированные переменные состояния, управляемые NBrowns
Брауновские источники риска и NJumps
комплексные пуассоновские процессы, представляющие прибытие важных событий по всему NPeriods
последовательные периоды наблюдения. Симуляция аппроксимирует процесс диффузии Мертона перехода времени с помощью приближения решения закрытой формы.
merton
ОбъектСимулируйте приблизительное решение диагонально-дрейфового процесса Мертона.
Создайте 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
MDL
- модель Мертонаmerton
объектМодель Мертона, заданная как merton
объект. Можно создать merton
объект, использующий merton
.
Типы данных: object
NPeriods
- Количество периодов симуляцииКоличество периодов симуляции, заданное как положительное скалярное целое число. Значение NPeriods
определяет количество строк моделируемого выходного ряда.
Типы данных: double
Задайте необязательные разделенные разделенными запятой парами Name,Value
аргументы. Name
- имя аргумента и Value
- соответствующее значение. Name
должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN
.
[Paths,Times,Z,N] = simBySolution(merton,NPeriods,'DeltaTimes',dt,'NNTrials',10)
'NNTrials'
- Моделируемые NTrials (пути проб)1
(один путь коррелированных переменных состояния) (по умолчанию) | положительным целым числомМоделируемые NTrials (пути дискретизации) NPeriods
каждый из наблюдений, заданный как разделенная разделенными запятой парами, состоящая из 'NNTrials'
и положительное скалярное целое число.
Типы данных: double
'DeltaTimes'
- Положительные шаги времени между наблюдениями1
(по умолчанию) | скалярный вектор | столбецПоложительные шаги времени между наблюдениями, заданные как разделенная разделенными запятой парами, состоящая из 'DeltaTimes'
и скаляр или NPeriods
-by- 1
Вектор-столбец.
DeltaTimes
представляет собой знакомые dt, найденные в стохастических дифференциальных уравнениях, и определяет время, в которое сообщаются моделируемые пути переменных выходного состояния.
Типы данных: double
'NSteps'
- Количество промежуточных временных шагов в каждом временном шаге1
(без промежуточной оценки) (по умолчанию) | положительным целым числомКоличество промежуточных временных шагов в каждом временном шаге dt (задается как DeltaTimes
), заданная как разделенная разделенными запятой парами, состоящая из 'NSteps'
и положительное скалярное целое число.
The simBySolution
функциональные разделы каждый временной шаг dt в NSteps
Подынтервалы длины dt/ NSteps
, и уточняет симуляцию путем оценки вектора моделируемого состояния в NSteps − 1
промежуточные точки. Хотя simBySolution
не сообщает вектор выходного состояния в этих промежуточных точках, уточнение улучшает точность, позволяя симуляции более точно аппроксимировать базовый процесс непрерывного времени.
Типы данных: double
'Antithetic'
- Флаг для использования антитетической выборки для генерации Гауссовых случайных вариацийfalse
(без антитетической выборки) (по умолчанию) | логическим со значениями true
или false
Флаг для использования антитетической дискретизации, чтобы сгенерировать Гауссовы случайные вариации, которые управляют брауновским вектором движения (процессы Винера), заданным как разделенная запятыми пара, состоящая из 'Antithetic'
и скаляр числовой или логический 1
(true
) или 0
(false
).
Когда вы задаете true
, simBySolution
выполняет выборку таким образом, чтобы все первичные и антитетические пути моделировались и сохранялись в последовательных совпадающих парах:
Нечетные (1,3,5,...) NTrials
соответствуют первичным Гауссовым путям.
Даже NTrials (2,4,6,...)
являются совпадающими антитетическими путями каждой пары, выведенными путем отрицания Гауссовских рисунков соответствующего первичного (нечетного) исследования.
Примечание
Если вы задаете входной процесс шума (см Z
), simBySolution
игнорирует значение Antithetic
.
Типы данных: logical
'Z'
- Прямая спецификация зависимого процесса случайного шума для генерации вектора броуновского движения Correlation
представитель SDE
объект (по умолчанию) | функцию | трехмерном массиве зависимых случайных вариацийПрямая спецификация зависимого процесса случайного шума для генерации вектора Броуна (процесс Винера), который управляет симуляцией, заданная как разделенная разделенными запятой парами, состоящая из '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'
- Зависимый процесс случайного подсчета для генерации количества переходов merton
параметр объекта JumpFreq
(по умолчанию) | трехмерный массив | функциюЗависимый процесс случайного подсчета для генерации количества переходов, заданный как разделенная разделенными запятой парами, состоящая из 'N'
и функцию или (NPeriods
⨉ NSteps
) -by- NJumps
-by- NNTrials
трехмерный массив зависимых случайных вариаций. Если вы задаете функцию, N
необходимо вернуть NJumps
-by- 1
Вектор-столбец, и вы должны вызвать его с двумя входами: реальное скалярное время наблюдения t за которым следует NVars
-by- 1
вектор состояния Xt.
Типы данных: double
| function
'StorePaths'
- Флаг, который указывает, как Paths
хранится и возвращаетсяtrue
(по умолчанию) | логическим со значениями true
или false
Флаг, который указывает, как выходной массив Paths
сохранен и возвращен, заданный как разделенная разделенными запятой парами, состоящая из 'StorePaths'
и скаляр числовой или логический 1
(true
) или 0
(false
).
Если StorePaths
является true
(значение по умолчанию) или не задано, simBySolution
возвращает Paths
как трехмерный массив временных рядов.
Если StorePaths
является false
(логический 0
), simBySolution
возвращает Paths
как пустая матрица.
Типы данных: logical
'Processes'
- Последовательность процессов в конце периода или корректировка вектора состояния вида simBySolution
не вносит никаких корректировок и не выполняет обработку (по умолчанию) | функцию | массив ячеек функцийПоследовательность процессов в конце периода или корректировок вектора состояния, заданная как разделенная разделенными запятой парами, состоящая из 'Processes'
и функция или массив ячеек функций вида
simBySolution
применяет функции обработки в конце каждого периода наблюдения. Эти функции должны принять текущее время наблюдения t а вектор текущего состояния X t и вернуть вектор состояния, который может быть корректировкой входа состояния.
Система на конец периода Processes
аргумент позволяет вам завершить указанное испытание раньше. В конце каждого временного шага simBySolution
проверяет векторное Xt состояния на все NaN
состояние. Таким образом, чтобы сигнализировать о раннем прекращении данного исследования, все элементы векторной Xt состояния должны быть NaN
. Этот тест включает пользовательскую Processes
функция, чтобы сигнализировать о раннем прекращении испытания и предлагает значительную эффективность преимущества в некоторых ситуациях (для примера, ценообразования снижающихся и выходящих барьерных вариантов).
Если вы задаете несколько функций обработки, simBySolution
вызывает функции в том порядке, в котором они появляются в массиве ячеек. Можно использовать этот аргумент, чтобы задать граничные условия, предотвратить отрицательные цены, накопить статистику, построить графики и многое другое.
Типы данных: cell
| function
Paths
- Моделируемые пути коррелированных переменных состоянияМоделируемые пути коррелированных переменных состояния, возвращенные как (NPeriods + 1)
-by- NVars
-by- NNTrials
трехмерный массив timeseries.
Для данного испытания каждая строка Paths
- транспонирование вектора состояния, X t в момент t времени. Когда StorePaths
установлено в false
, simBySolution
возвращает Paths
как пустая матрица.
Times
- Время наблюдения, сопоставленное с моделируемыми путямиВремя наблюдения, сопоставленное с моделируемыми путями, возвращается как (NPeriods + 1)
-by- 1
Вектор-столбец. Каждый элемент Times
связана с соответствующей строкой Paths
.
Z
- Зависимые случайные изменения для генерации брауновского вектора движенияЗависимые случайные изменения для генерации брауновского вектора движения (процессы Винера), которые управляют симуляцией, возвращенной как (NPeriods * NSteps)
-by- NBrowns
-by- NNTrials
трехмерный массив timeseries.
N
- Зависимые случайные изменения для генерации вектора процесса подсчета переходовЗависимые случайные изменения для генерации вектора процесса подсчета переходов, возвращенные как (NPeriods ⨉ NSteps)
-by- NJumps
-by- NNTrials
трехмерный массив timeseries.
Методы симуляции позволяют вам задать популярный метод уменьшения отклонения, называемый антитетической выборкой.
Этот метод пытается заменить одну последовательность случайных наблюдений на другую, которая имеет то же ожидаемое значение, но меньшее отклонение. В типичной симуляции Монте-Карло каждый путь выборки является независимым и представляет собой независимое исследование. Однако антитетическая выборка генерирует пути дискретизации в парах. Первый путь пары упоминается как основной путь, а второй как антитетический путь. Любая заданная пара является независимой другими парами, но два пути внутри каждой пары сильно коррелируются. Антитетическая литература часто рекомендует усреднение дисконтированных выплат каждой пары, фактически вдвое сокращая количество NTrials Монте-Карло.
Этот метод пытается уменьшить отклонение путем индуцирования отрицательной зависимости между парными входными выборками, в идеале приводя к отрицательной зависимости между парными выходными выборками. Чем больше степень отрицательной зависимости, тем более эффективен антитетический отбор проб.
The simBySolution
функция симулирует вектор состояния, Xt приближения решения диагонального дрейфа диффузионных моделей Мертона перехода закрытой формы. В частности, он применяет подход Эйлера к преобразованной log
[Xt] процесс (по формуле Ито). В целом это не является точным решением модели диффузии Мертона перехода, потому что распределения вероятностей моделируемого и истинного векторов состояния идентичны только для кусочно-постоянных параметров.
Эта функция моделирует любые векторные merton
процесс формы
Здесь:
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.
У вас есть измененная версия этого примера. Вы хотите открыть этот пример с вашими правками?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.