Этот пример исследует основные арбитражные концепции в одно период, портфель активов с двумя состояниями. Портфель состоит из связи, длинного запаса и длинного колл-опциона на запасе.
Это использует эти функции Symbolic Math Toolbox™:
equationsToMatrix
, чтобы преобразовать линейную систему уравнений к матрице.
linsolve
, чтобы решить систему.
Символьные эквиваленты стандартных функций MATLAB®, такие как diag
.
Этот пример символически выводит нейтральные к риску вероятности и досрочную цену в течение одно периода, сценария с двумя состояниями.
Создайте символьную переменную r
, представляющую безрисковый уровень за период. Установите предположение, что r
является положительным значением.
syms r positive
Задайте параметры в течение начала одного периода, time = 0
. Здесь S0
является курсом акций, и C0
является ценой колл-опциона с забастовкой, K
.
syms S0 C0 K positive
Теперь, задайте параметры для конца периода, time = 1
. Маркируйте два возможных состояния в конце периода как U (курс акций за этот период повышается), и D (курс акций за этот период понижается). Таким образом SU
и SD
являются курсами акций в состояниях U и D, и CU
является значением вызова в состоянии U. Обратите внимание на то, что .
syms SU SD CU positive
Цена облигаций в time = 0
равняется 1. Обратите внимание на то, что этот пример игнорирует затраты на трение.
Соберите цены в time = 0
в вектор-столбец.
prices = [1 S0 C0]'
prices =
Соберите выплаты портфеля в time = 1
в матрицу payoff
. Столбцы payoff
соответствуют выплатам для состояний D и U. Строки соответствуют выплатам для связи, запаса и вызова. Выплатой для связи является 1 + r
. Выплата для вызова в состоянии D является нулем, поскольку это не осуществлено (потому что ).
payoff = [(1 + r), (1 + r); SD, SU; 0, CU]
payoff =
CU
стоит SU - K
в состоянии U. Замените этим значением в payoff
.
payoff = subs(payoff, CU, SU - K)
payoff =
Задайте вероятности достижения состояний U и D.
syms pU pD real
Под без арбитражей eqns == 0
должен всегда сохраняться с положительным pU
и pD
.
eqns = payoff*[pD; pU] - prices
eqns =
Преобразуйте уравнения, чтобы использовать нейтральные к риску вероятности.
syms pDrn pUrn real; eqns = subs(eqns, [pD; pU], [pDrn; pUrn]/(1 + r))
eqns =
Неизвестными переменными является pDrn
, pUrn
и C0
. Преобразуйте линейную систему к матричной форме с помощью этих неизвестных переменных.
[A, b] = equationsToMatrix(eqns, [pDrn, pUrn, C0]')
A =
b =
Используя linsolve
, найдите решение для нейтральных к риску вероятностей и досрочной цены.
x = linsolve(A, b)
x =
Проверьте, что под нейтральными к риску вероятностями, x(1:2)
, ожидаемой нормой прибыли для портфеля, E_return
равняется безрисковому уровню, r
.
E_return = diag(prices)\(payoff - [prices,prices])*x(1:2); E_return = simplify(subs(E_return, C0, x(3)))
E_return =
Как пример тестирования нарушений без арбитражей, используйте следующие значения: r = 5%
, S0 = 100
и K = 100
. Для SU < 105
нарушено условие без арбитражей, потому что pDrn = xSol(1)
отрицателен (SU >= SD
). Далее, для любой досрочной цены кроме xSol(3)
, существует арбитраж.
xSol = simplify(subs(x, [r,S0,K], [0.05,100,100]))
xSol =
Постройте досрочную цену, C0 = xSol(3)
, для 50 <= SD <= 100
и 105 <= SU <= 150
. Обратите внимание на то, что вызов стоит больше, когда "отклонение" базового курса акций выше, например, SD = 50, SU = 150
.
fsurf(xSol(3), [50,100,105,150]) xlabel SD ylabel SU title 'Call Price'
Advanced Derivatives, Pricing and Risk Management: Theory, Tools and Programming Applications
Альбанезе, C., Campolieti, G.