Вычислите кредитные риски из договорных стоимостей
[
вычисляет кредитные риски контрагента из массива метки на рынок договорные стоимости OTC. Эти воздействия используются при вычислении CVA (корректировка стоимости кредита) для портфеля. exposures
,exposurecpty
]
= creditexposures(values
,counterparties
)
[
добавляют дополнительные аргументы значения имени.exposures
,exposurecpty
]
= creditexposures(___,Name,Value
)
[
вычисляет кредитные риски контрагента из массива метки на рынок договорные стоимости OTC с помощью дополнительных аргументов пары "имя-значение" для exposures
,exposurecpty
,collateral
]
= creditexposures(___,Name,Value
)CollateralTable
и Dates
, collateral
выходной параметр возвращен для симулированных сопутствующих сумм, доступных для контрагентов в каждую дату симуляции и по каждому сценарию.
После вычисления договорных стоимостей метки на рынок для портфеля подкачек по многим сценариям вычислите кредитный риск для конкретного контрагента. Просматривайте договорные стоимости и кредитный риск в зависимости от времени.
Во-первых, загрузите данные (ccr.mat
) содержа договорные стоимости метки на рынок для портфеля подкачек по многим сценариям.
load ccr.mat % Look at one counterparty. cpID = 4; cpValues = squeeze(sum(values(:,swaps.Counterparty == cpID,:),2)); subplot(2,1,1) plot(simulationDates,cpValues); title(sprintf('Mark-to-Market Contract Values for Counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Portfolio Value ($)') % Compute the exposure by counterparty. [exposures, expcpty] = creditexposures(values,swaps.Counterparty,... 'NettingID',swaps.NettingID); % View the credit exposure over time for the counterparty. subplot(2,1,2) cpIdx = find(expcpty == cpID); plot(simulationDates,squeeze(exposures(:,cpIdx,:))); title(sprintf('Exposure for counterparty: %d',cpIdx)); datetick('x','mmmyy') ylabel('Exposure ($)') xlabel('Simulation Dates')
Загрузите данные (ccr.mat
) содержа договорные стоимости метки на рынок для портфеля подкачек по многим сценариям.
load ccr.mat
Посмотрите на одного контрагента.
cpID = 4; cpIdx = swaps.Counterparty == cpID; cpValues = values(:,cpIdx,:); plot(simulationDates,squeeze(sum(cpValues,2))); grid on; title(sprintf('Potential Mark-to-Market Portfolio Values for Counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Portfolio Value ($)')
Вычислите воздействия.
netting = swaps.NettingID(cpIdx);
exposures = creditexposures(cpValues,cpID,'NettingID',netting);
Просматривайте кредитный риск в зависимости от времени для контрагента.
figure; plot(simulationDates,squeeze(exposures)); grid on title(sprintf('Exposure for counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Exposure ($)') xlabel('Simulation Dates')
Вычислите профили кредитного риска.
profilesBefore = exposureprofiles(simulationDates,exposures)
profilesBefore = struct with fields:
Dates: [37x1 double]
EE: [37x1 double]
PFE: [37x1 double]
MPFE: 2.1580e+05
EffEE: [37x1 double]
EPE: 2.8602e+04
EffEPE: 4.9579e+04
Рассмотрите новую торговлю с контрагентом. В данном примере возьмите другую торговлю из исходного портфеля подкачки и "скопируйте" его для нового контрагента. Этот пример только в иллюстративных целях.
newTradeIdx = 3; newTradeValues = values(:,newTradeIdx,:); % Append a new trade to your existing portfolio. cpValues = [cpValues newTradeValues]; netting = [netting; cpID]; exposures = creditexposures(cpValues,cpID,'NettingID',netting);
Вычислите новые профили кредитного риска.
profilesAfter = exposureprofiles(simulationDates,exposures)
profilesAfter = struct with fields:
Dates: [37x1 double]
EE: [37x1 double]
PFE: [37x1 double]
MPFE: 2.4689e+05
EffEE: [37x1 double]
EPE: 3.1609e+04
EffEPE: 5.6178e+04
Визуализируйте ожидаемые воздействия и инкрементное воздействие новой торговли. Используйте инкрементное воздействие, чтобы вычислить инкрементный заряд корректировки стоимости кредита (CVA).
figure; subplot(2,1,1) plot(simulationDates,profilesBefore.EE,... simulationDates,profilesAfter.EE); grid on; legend({'EE before','EE with trade'}) datetick('x','mmmyy','keeplimits') title('Expected Exposure before and after new trade'); ylabel('Exposure ($)') subplot(2,1,2) incrementalEE = profilesAfter.EE - profilesBefore.EE; plot(simulationDates,incrementalEE); grid on; legend('incremental EE') datetick('x','mmmyy','keeplimits') ylabel('Exposure ($)') xlabel('Simulation Dates')
Загрузите данные (ccr.mat
) содержа договорные стоимости метки на рынок для портфеля подкачек по многим сценариям.
load ccr.mat
Только посмотрите на одного контрагента для этого примера.
cpID = 4; cpIdx = swaps.Counterparty == cpID; cpValues = values(:,cpIdx,:);
Вычислите воздействия нес обеспечением.
exposures = creditexposures(cpValues,swaps.Counterparty(cpIdx),... 'NettingID',swaps.NettingID(cpIdx));
Просматривайте кредитный риск в зависимости от времени для контрагента.
plot(simulationDates,squeeze(exposures)); expYLim = get(gca,'YLim'); title(sprintf('Exposures for Counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Exposure ($)') xlabel('Simulation Dates')
Добавьте сопутствующее соглашение для контрагента. 'CollateralTable'
параметр является таблицей MATLAB®. Можно составить таблицы из электронных таблиц или других источников данных, в дополнение к созданию их встроенный, как замечено здесь. Для получения дополнительной информации смотрите table
.
collateralVariables = {'Counterparty';'PeriodOfRisk';'Threshold';'MinimumTransfer'}; periodOfRisk = 14; threshold = 100000; minTransfer = 10000; collateralTable = table(cpID,periodOfRisk,threshold,minTransfer,... 'VariableNames',collateralVariables)
collateralTable=1×4 table
Counterparty PeriodOfRisk Threshold MinimumTransfer
____________ ____________ _________ _______________
4 14 1e+05 10000
Вычислите воздействия с обеспечением.
[collatExp, collatcpty, collateral] = creditexposures(cpValues,... swaps.Counterparty(cpIdx),'NettingID',swaps.NettingID(cpIdx),... 'CollateralTable',collateralTable,'Dates',simulationDates);
Постройте сопутствующие уровни и обеспеченные воздействия.
figure; subplot(2,1,1) plot(simulationDates,squeeze(collateral)); set(gca,'YLim',expYLim); title(sprintf('Collateral for counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Collateral ($)') xlabel('Simulation Dates') subplot(2,1,2) plot(simulationDates,squeeze(collatExp)); set(gca,'YLim',expYLim); title(sprintf('Collateralized Exposure for Counterparty: %d',cpID)); datetick('x','mmmyy') ylabel('Exposure ($)') xlabel('Simulation Dates');
values
— Трехмерный массив симулированных текущих рыночных стоимостей портфеля контрактовТрехмерный массив симулированных текущих рыночных стоимостей портфеля контрактов, симулированных по серии дат симуляции и через многие сценарии в виде NumDates
- NumContracts
- NumScenarios
“куб” договорных стоимостей. Каждая строка представляет различную дату симуляции, каждый столбец различный контракт, и каждая “страница” является различным сценарием от симуляции Монте-Карло.
Типы данных: double
counterparties
— Контрагенты, соответствующие каждому контрактуКонтрагенты, соответствующие каждому контракту в values
В виде NumContracts
- вектор элемента из контрагентов. Контрагенты могут быть вектором из числовых идентификаторов или массивом ячеек имен контрагента. По умолчанию каждый контрагент принят, чтобы установить одну сетку, которая покрывает все ее контракты. Если контрагенты покрыты несколькими наборами сетки, то используйте NettingID
параметр. Значение NaN
(или ''
в массиве ячеек), указывает, что контракт не включен ни в какой набор сетки, если в противном случае не задано NettingID
. counterparties
является нечувствительным к регистру и ведущим, или конечные пробелы удалены.
Типы данных: double |
cell
Задайте дополнительные разделенные запятой пары Name,Value
аргументы. Name
имя аргумента и Value
соответствующее значение. Name
должен появиться в кавычках. Вы можете задать несколько аргументов в виде пар имен и значений в любом порядке, например: Name1, Value1, ..., NameN, ValueN
.
[exposures,exposurecpty] = creditexposures(values,counterparties,'NettingID','10','ExposureType','Additive')
'NettingID'
— Сетка установила идентификаторы, указывают, какая сетка установила каждый контракт, принадлежитСетка установила идентификаторы указывать, на который сетка установила каждый контракт в values
принадлежит, заданный NumContracts
- вектор элемента из сетки установил идентификаторы. NettingID
может быть вектор из числовых идентификаторов или иначе массив ячеек идентификаторов вектора символов. creditexposures
функционируйте использует counterparties
и NettingID
задавать каждый уникальный набор сетки (все контракты в наборе сетки должны быть с тем же контрагентом). По умолчанию каждому контрагенту установили одну сетку, которая покрывает все их контракты. Значение NaN
(или ''
в массиве ячеек), указывает, что контракт не включен ни в какой набор сетки. NettingID
является нечувствительным к регистру и ведущим, или конечные пробелы удалены.
Типы данных: double |
cell
'ExposureType'
— Метод расчета для воздействий'Counterparty'
(значение по умолчанию) | вектор символов со значением 'Counterparty'
или 'Additive'
Метод расчета для воздействий, заданных со значениями:
'Counterparty'
— Вычислите воздействия на контрагента.
'Additive'
— Вычислите аддитивные воздействия на уровне контракта. Воздействия вычисляются на контракт и сумму к общей подверженности контрагента.
Типы данных: char
'CollateralTable'
— Таблица, содержащая информацию о сопутствующих соглашениях о контрагентахТаблица, содержащая информацию о сопутствующих соглашениях о контрагентах в виде таблицы MATLAB. Таблица состоит из одной записи (строка) на контрагента с обеспечением и должна иметь следующие переменные (столбцы):
'Counterparty'
— Имя контрагента или ID. Имя Контрагента или ID должны совпадать с параметром 'Counterparty'
для ExposureType
аргумент.
'PeriodOfRisk'
— Граничный период риска в днях. Номер дней от граничного вызова до отправленного имущественного залога доступен от контрагента.
'Threshold'
— Сопутствующий порог. Когда подверженность контрагента превышает эту сумму, контрагент должен отправить имущественный залог.
'MinimumTransfer'
— Минимум переводит сумму. Минимальное количество по/под порогу, требуемому инициировать передачу имущественного залога.
Примечание
Когда вычисление предоставило обеспечение воздействия, оба CollateralTable
параметр и Dates
параметр должен быть задан.
Типы данных: table
'Dates'
— Даты симуляции, соответствующие каждой строке массива значенийДаты симуляции, соответствующие каждой строке values
массив в виде NUMDATES
- 1
вектор из дат симуляции. Dates
или вектор из чисел даты MATLAB или иначе массив ячеек из символьных векторов в известном формате даты. Смотрите datenum
для известных форматов даты.
Примечание
Когда вычисление предоставило обеспечение воздействия, оба CollateralTable
параметр и Dates
параметр должен быть задан.
Типы данных: double |
cell
exposures
— Трехмерный массив кредитных рисковТрехмерный массив кредитных рисков, представляющих возможные потери от каждого контрагента или контракта в каждую дату и по всем сценариям. Размер exposures
зависит от ExposureType
входной параметр:
Когда ExposureType
'Counterparty'
, exposures
возвращает NumDates
- NumCounterparties
- NumScenarios
“куб” кредитных рисков, представляющих возможные убытки, которые можно было потерпеть по всем датам, контрагентам и сценариям, если бы контрагент принял значение по умолчанию (игнорирующий какое-либо восстановление постпо умолчанию).
Когда ExposureType
'Additive'
, exposures
возвращает NumDates
- NumContracts
- NumScenarios
“куб”, где каждым элементом является аддитивное воздействие каждого контракта (по всем датам и сценариям). Аддитивные воздействия суммируют к воздействию уровня контрагента.
exposurecpty
— Контрагенты, которые соответствуют столбцам exposures
массивКонтрагенты, которые соответствуют столбцам exposures
массив, возвращенный как NumCounterparties
или NumContracts
элементы в зависимости от ExposureType
.
collateral
— Симулированный имущественный залог составляет доступный для контрагентов в каждую дату симуляции и по каждому сценариюСимулированный имущественный залог составляет доступный для контрагентов в каждую дату симуляции и по каждому сценарию, возвращенному как NumDates
- NumCounterparties
- NumScenarios
3D массив. Сопутствующие суммы вычисляются с помощью Броуниэн-Бридж, чтобы оценить договорные стоимости между датами симуляции. Для получения дополнительной информации смотрите Броуниэн-Бридж. Если CollateralTable
не был задан, этот выход пуст.
Броуниэн-Бридж используется, чтобы симулировать стоимость портфеля в промежуточные даты, чтобы вычислить имущественный залог, доступный в последующие даты симуляции.
Например, чтобы оценить имущественный залог, доступный в конкретную дату симуляции, t i, необходимо знать состояние портфеля во время t i – dt, где dt является граничным периодом риска. Стоимость портфеля симулирована в эти промежуточные даты путем рисования от распределения, заданного Броуниэн-Бридж между t i и предыдущей датой симуляции, t i–1.
Если договорные стоимости во время t i –1 и t, i известен и вы хотите оценить договорную стоимость во время t c (где t, c является t i – dt), то выборка от нормального распределения используется с отклонением:
и со средним значением, которое является просто линейной интерполяцией договорных стоимостей между двумя датами симуляции во время t c. Для получения дополнительной информации смотрите Ссылки.
[1] Lomibao, D. и С. Чжу. “Условный подход оценки для зависимых от предшествующего пути развития инструментов”. Август 2005.
[2] Пихтин М., “Моделирующий кредитный риск для контрагентов с обеспечением”. Декабрь 2009.
[3] Пихтин М. и С. Чжу. “Руководство по Моделированию Кредитного риска Контрагента”. GARP, июль/август 2007, выпуск 37.
[4] Pykhtin, Майкл., и Дэн Розен. “Оценивая риск контрагента на торговом уровне и выделениях CVA”. ФЕДЕРАЛЬНЫЙ рабочий документ № 10., 1 февраля 2010.
datenum
| exposureprofiles
| table
У вас есть модифицированная версия этого примера. Вы хотите открыть этот пример со своими редактированиями?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.